Devel
Threads by month
- ----- 2026 -----
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- 48 participants
- 40227 discussions
It's out ! Libvirt 1.2.15 is released, I tagged it in git and
provided signed tarballs and rpms available at the usual place:
ftp://libvirt.org/libvirt/
I also pushed a python bindings release too at:
ftp://libvirt.org/libvirt/python/
This is again a reasonably large release with around 375 patches
merged in, including a fairly large set of bug fixes across all
areas. A few user visible features and a large set of improvements
are there too:
Features:
- Implement virDomainAddIOThread and virDomainDelIOThread (John Ferlan)
- libxl: Introduce configuration file for libxl driver (Jim Fehlig)
- Add VIR_DOMAIN_EVENT_ID_DEVICE_ADDED event (Ján Tomko)
- various improvements to parallels driver (Maxim Nestratov, Dmitry Guryanov)
Documentation:
- qemu: Fix comment for timeDelta (Jiri Denemark)
- Fix typo in comment about memory binding (zhang bo)
- virhostdev: Fix comments for virHostdevReAttachPCIDevices (John Ferlan)
- Add articles to virDomainDeviceDetachFlags docs (Ján Tomko)
- lib: snapshot: Explain that only one layer of images is inserted (Peter Krempa)
- Visually separate snapshot disk subelements (Ján Tomko)
- Add info (where necessary) that paths should be specified as absolute (Erik Skultety)
- Typos: Get rid of dependan(t|cies) (Martin Kletzander)
- Add Host sFlow into monitoring apps (Martin Kletzander)
Portability:
- Fix building virnetserverclientmock with MinGW (Martin Kletzander)
- Cleanup parameters for mock libraries (Martin Kletzander)
- Cleanup srcdir usage (Michal Privoznik)
- Add missing linker flags for MinGW build (Pavel Fedin)
- build: add pragma directive to fix build on some gcc (Pavel Hrdina)
- build: avoid obsolete index() (Eric Blake)
- util: fix build on non-Linux (Roman Bogorodskiy)
- vircapstest: fix build without LXC, QEMU or XEN (Roman Bogorodskiy)
- virbuffer: fix build on rhel-6 (Pavel Hrdina)
- tests: fix build on old 32-bit platforms (Eric Blake)
- build: provide virNetDevSysfsFile on non-Linux (Eric Blake)
- build: include correct header for time() (Eric Blake)
- xen: fix build error on rhel-5 (Pavel Hrdina)
- qemu: Avoid shadow of 'sync' symbol (Peter Krempa)
Bug Fixes:
- qemu: Fix bus and lun checks when scsi-disk.channel not present (John Ferlan)
- rpm-build: update %files section for libxl (Pavel Hrdina)
- qemu: blockjob: Call qemuDomainSupportsBlockJobs only on online VMs (Peter Krempa)
- qemu: Check address type for USB disks (Jiri Denemark)
- cpu: Honor vendor_id override in host-model (Jiri Denemark)
- iscsi: do not fail to stop a stopped pool (Ján Tomko)
- qemu: conf: Reject memory device if it would exceed configured max size (Peter Krempa)
- qemu: blockCopy: Allow reuse of raw image for shallow block copy (Peter Krempa)
- tests: free ChardevInfo correctly in qemumonitorjsontest (Zhang Bo)
- storage: fs: Ignore volumes that fail to open with EACCESS/EPERM (Cole Robinson)
- storage: If driver startup state syncing fails, delete statefile (Cole Robinson)
- storage: Don't leave stale state file if pool startup fails (Cole Robinson)
- storage: Fix autostart dir for qemu:///session (Cole Robinson)
- qemu: qemuProcessDetectIOThreadPIDs invert checks (John Ferlan)
- conf: Resolve some Coverity errors (John Ferlan)
- network: check newDef for used bridge names in addition to def (Laine Stump)
- network: check for bridge name conflict with existing devices (Laine Stump)
- network: move auto-assign of bridge name from XML parser to net driver (Laine Stump)
- test: Fix actual vs. expected in virtTestCompareFiles (Laine Stump)
- qemu: Resolve Coverity DEADCODE (John Ferlan)
- util: fix memleak in virStorageSourceClear (zhang bo)
- storage: Resolve Coverity UNINIT (John Ferlan)
- Fix check for return value of qemuDomainAgentAvailable() (Martin Kletzander)
- conf: fix memleak in virDomainHostdevDefClear (Zhang Bo)
- conf: fix memleak in virDomainNetIpParseXML (Zhang Bo)
- qemu: fix memleak in virCapabilitiesDomainDataLookup (Zhang Bo)
- qemu: fix memleaks in qemuBuildCommandLine (Zhang Bo)
- util: fix memleak in virFindSCSIHostByPCI (Zhang Bo)
- tests: fix some memleaks in tests (Zhang Bo)
- qemu: Fix domain object leak in qemuDomainInterfaceAddresses (Peter Krempa)
- libxl: initialize sdl.opengl defbool in libxlMakeVfb (Jim Fehlig)
- libxl: initialize vfb defbools in libxlMakeVfb (Olaf Hering)
- parallels: fix crash in prlsdkAddNet in case of CT definition (Maxim Nestratov)
- bhyve: fix build in tests (Roman Bogorodskiy)
- Fix memory leak in virNetSocketNewConnectUNIX (Jiri Denemark)
- parallels: fix IS_CT macro (Maxim Nestratov)
- rng: fix port number range validation (Daniel P. Berrange)
- qemu: Don't fail to reboot domains with unresponsive agent (zhang bo)
- bhyve: fix build in tests (Roman Bogorodskiy)
- spec: Fix libxl build with driver modules (Cole Robinson)
- configure: Fix --loader-nvram typo (Cole Robinson)
- parallels: don't forget to unlock domain after successful virDomainObjListFindByUUID call (Maxim Nestratov)
- vircommand: fix polling in virCommandProcessIO (Roman Bogorodskiy)
- util: storage: Fix possible crash when source path is NULL (Peter Krempa)
- qemu: Fix issues with maxMemory in qemuDomainSetMemoryFlags() (Luyao Huang)
- qemu: set macvtap physdevs online when macvtap is set online (Laine Stump)
- util: set MAC address for VF via netlink message to PF+VF# when possible (Laine Stump)
- qemu: Always refresh capabilities if no <guests> found (Cole Robinson)
- scsi: Adjust return values from processLU (John Ferlan)
- storage: Fix check for stable path check (John Ferlan)
- domtop: Properly free cpu status (Michal Privoznik)
- parallels: fix return status for parallelsConnectOpen (Nikolay Shirokovskiy)
- lxc: fix starting a domain with non-strict numa memory mode (Luyao Huang)
- lxc: fix starting a domain with a cpuset but no numatune (Luyao Huang)
- rng: Forbid to validate mismatched <disk> 'device' and 'type' attributes (Erik Skultety)
- domcaps: Check for architecture more wisely (Michal Privoznik)
- virNetSocketNewConnectUNIX: Don't unlink(NULL) (Michal Privoznik)
- libxl: drop virDomainObj lock when destroying a domain (Jim Fehlig)
- libxl: acquire a job when destroying a domain (Jim Fehlig)
- virCondWaitUntil: calculate timespec correctly (Michael Chapman)
- qemu: bulk stats: Ignore errors from missing/inaccessible disks (Peter Krempa)
- Strip control codes in virBufferEscapeString (Ján Tomko)
- Ignore storage volumes with control codes in their names (Ján Tomko)
- Strip control characters from sysfs attributes (Ján Tomko)
- tests: Resolve Coverity RESOURCE_LEAK (John Ferlan)
- virsh: fix regression in 'virsh event' by domain (Eric Blake)
- qemu: monitor: Fix qemuMonitorGetAllBlockStatsInfo with HMP (Peter Krempa)
- qemu: monitor: Ensure that qemuMonitorSetLink is called with non-null name (Peter Krempa)
- virNetSocketNewConnectUNIX: Use flocks when spawning a daemon (Michal Privoznik)
- sanlock: Use VIR_ERR_RESOURCE_BUSY if sanlock_acquire fails (Jiri Denemark)
- hostdev: fix loop index error when resetvfnetconfig (Huanle Han)
- qemu: fix index error when clean up vport profile (Huanle Han)
- virt-aa-helper: add unix channels (esp for qemu-guest-agent) (Serge Hallyn)
- qemu: save domain status after set memory parameters (Shanzhi Yu)
- virsh: improve the error for wrong memtune parameters (Shanzhi Yu)
- qemu: drivePivot: Fix assumption when 'block-job-complete' fails (Peter Krempa)
- qemu: Fix condition for checking vcpu when pinning vcpus (Peter Krempa)
- qemu: Enforce WWN to be unique among VM's disks (Peter Krempa)
- virBitmap: Place virBitmapIsAllClear check after virBitmapParse calls (Erik Skultety)
- Fix usb device version parsing issues (Ján Tomko)
- Support IPv6 in networkGetNetworkAddress (Ján Tomko)
- util: Update virNetDevGetIPAddress to get IPv6 addresses (Luyao Huang)
- parallels: fix virDomainDefineXML for domain in saved state (Dmitry Guryanov)
- conf: fix virDomainDefFormatInternal for parallels (Dmitry Guryanov)
- conf: fix virDomainDefParseXML for parallels (Dmitry Guryanov)
- storage: Don't duplicate efforts of backend driver (John Ferlan)
- storage: Need to update freeExtent at delete primary partition (John Ferlan)
- storage: Fix issues in storageVolResize (John Ferlan)
- Open /proc/PID/ns/* read-only to avoid getting permission denied (Cédric Bosdonnat)
- lxc: create the required directories upon driver start (Lubomir Rintel)
- util: file: Don't carelessly sanitize URIs (Peter Krempa)
- fix memleak in qemuRestoreCgroupState (Luyao Huang)
- qemuProcessHook: Call virNuma*() only when needed (Michal Privoznik)
- parallels: delete old networks in prlsdkDoApplyConfig before adding new ones (Maxim Nestratov)
- util: fix removal of callbacks in virCloseCallbacksRun (Michael Chapman)
- qemu: fix race between disk mirror fail and cancel (Michael Chapman)
- qemu: fix error propagation in qemuMigrationBegin (Michael Chapman)
- qemu: fix crash in qemuProcessAutoDestroy (Michael Chapman)
- virQEMUDriverGetConfig: Fix memleak (Michal Privoznik)
- virDomainVirtioSerialAddrSetFree: Fix memleak (Michal Privoznik)
- qemuSetupCgroupForVcpu: Fix memleak (Michal Privoznik)
- libvirt: virsh: Kill all uses of __FUNCTION__ in error messages (Noella Ashu)
- virsh: Fix domifaddr output in quiet mode (Luyao Huang)
- libxl: fix dom0 balloon logic (Jim Fehlig)
- hostdev: Fix index error in loop after remove an element (Huanle Han)
- Fix xlconfigtest with older libxl (Ján Tomko)
- iscsi: Fix exit path for virStorageBackendISCSIFindLUs failure (John Ferlan)
- qemuDomainBlockCopy: Check @granularity to be a power of two (Luyao Huang)
- nodeinfodata: Remove broken symlinks and uneeded files (Michal Privoznik)
- qemu: lifecycle: make agent-mode shutdown and reboot timeout (zhang bo)
Improvements:
- main: add new generated files to .gitignore (Pavel Hrdina)
- libxl: provide integration with lock manager (Jim Fehlig)
- domain: conf: Drop unused OSTYPE_AIX (Cole Robinson)
- qemu: migration: use sync block job helpers (Michael Chapman)
- qemuDomainBlockJobAbort: use sync block job helpers (Michael Chapman)
- qemuProcessStop: wake up pending sync block jobs (Michael Chapman)
- qemuBlockJobSync*: introduce sync block job helpers (Michael Chapman)
- qemuBlockJobEventProcess: move to new source file (Michael Chapman)
- qemu: Validate available slot count for memory devices (Peter Krempa)
- qemu: command: Validate that memory devices slot ID is in range (Peter Krempa)
- parallels: implement domainDetachDevice and domainDetachDeviceFlags (Maxim Nestratov)
- parallels: add prlsdkDelDisk and prlsdkGetDiskIndex functions (Maxim Nestratov)
- qemu: make qemuMonitorChardevInfoFree non-static (Zhang Bo)
- storage: Break out storageDriverLoadPoolState (Cole Robinson)
- qemu: Remove need for qemuMonitorIOThreadInfoFree (John Ferlan)
- qemu: Remove need for qemuDomainParseIOThreadAlias (John Ferlan)
- conf: explicitly initialize 'cpumask' variable (Roman Bogorodskiy)
- virsh: Add iothreadadd and iothreaddel commands (John Ferlan)
- qemu: Add support to Add/Delete IOThreads (John Ferlan)
- domain: Introduce virDomainIOThreadSchedDelId (John Ferlan)
- remote: Add support for AddIOThread and DelIOThread (John Ferlan)
- conf: Adjust the iothreadsched expectations (John Ferlan)
- Move iothreadspin information into iothreadids (John Ferlan)
- conf: Move virDomainPinIsDuplicate and make static (John Ferlan)
- qemu: Use domain iothreadids to IOThread's 'thread_id' (John Ferlan)
- conf: Add new domain XML element 'iothreadids' (John Ferlan)
- openvz: Drop useless domain lookup (Michal Privoznik)
- qemu: Connect to guest agent after channel hotplug (Peter Krempa)
- qemu: agent: Differentiate errors when the agent channel was hotplugged (Peter Krempa)
- qemu: Reuse qemuDomainAgentAvailable in qemuDomainInterfaceAddresses (Peter Krempa)
- qemu: agent: Reuse virJSONValueObjectCreateVArgs in qemuAgentMakeCommand (Peter Krempa)
- libxl: remove duplicate check for pci subsystem type (Olaf Hering)
- libxl: use pci init and dispose functions (Olaf Hering)
- hostdev: fix net config restore error (Huanle Han)
- hostdev: Create virHostdevIsPCINetDevice (Huanle Han)
- qemu: Build nvram directory at driver startup (Cole Robinson)
- qemu: Build channel autosocket directory at driver startup (Cole Robinson)
- qemu: chown autoDumpPath on driver startup (Cole Robinson)
- qemu: conf: Clarify paths that are relative to libDir (Cole Robinson)
- tests: qemu: Couple aarch64 CPU tests (Cole Robinson)
- migration: Usable time statistics without requiring NTP (Jiri Denemark)
- uml: s/virDomainObjListFindByID/virDomainObjListFindByUUID/ (Michal Privoznik)
- virDomainObjList: Introduce yet another hash table (Michal Privoznik)
- virDomainObjListFindByName: Return referenced object (Michal Privoznik)
- Introduce virDomainObjEndAPI (Michal Privoznik)
- virDomainObjListNew: Use virObjectFreeHashData (Michal Privoznik)
- virDomainObjListAddLocked: s/false/NULL/ for @oldDef (Michal Privoznik)
- parallels: implement .domainGetMaxMemory (Dmitry Guryanov)
- Apparmor: allow reading block-rbd.so (Cédric Bosdonnat)
- Allow access to vendor and device file for PCI device passthrough (Cédric Bosdonnat)
- qemu: cgroup: Fix priorities when setting emulatorpin (Peter Krempa)
- tests: Add VIR_TEST_REGENERATE_OUTPUT (Cole Robinson)
- tests: Add virtTestCompareToFile (Cole Robinson)
- tests: Use *DefParseFile more (Cole Robinson)
- tests: Add VIR_TEST_DEBUG and VIR_TEST_VERBOSE (Cole Robinson)
- parallels_sdk: Utilize parallelsDomObjFromDomain() (Michal Privoznik)
- parallels_driver: Utilize parallelsDomObjFromDomain() (Michal Privoznik)
- parallels: Introduce parallelsDomObjFromDomain() (Michal Privoznik)
- struct _parallelsConn: Mark @domains as immutable pointer (Michal Privoznik)
- spec: Point fedora --with-loader-nvram at nightly firmware repo (Cole Robinson)
- configure: Report --with-loader-nvram value in summary (Cole Robinson)
- locking: relax PID requirement (Jim Fehlig)
- util: storage: Improve error message when requesting image above 'start' (Peter Krempa)
- util: storage: Add hint to error message that indexed access was used (Peter Krempa)
- util: command: Deduplicate code in virCommandNewArgList (Peter Krempa)
- qemu: migration: Refactor hostdev validation in migration check (Peter Krempa)
- processNicRxFilterChangedEvent: Take appropriate actions for NET_TYPE_NETWORK too (Michal Privoznik)
- virDomainActualNetDefContentsFormat: Format class_id only for status XML (Michal Privoznik)
- scsi: Change return values for virStorageBackendSCSIFindLUs (John Ferlan)
- scsi: Adjust return value for virStorageBackendSCSINewLun (John Ferlan)
- storage: Split out the stable path check (John Ferlan)
- xend: Remove a couple of unused function prototypes. (Richard W.M. Jones)
- domain: conf: Drop expectedVirtTypes (Cole Robinson)
- caps: Use DomainDataLookup to replace GuestDefault* (Cole Robinson)
- domain: conf: Use CapabilitiesDomainDataLookup for caps validation (Cole Robinson)
- domain: conf: Do ostype/arch/machine parsing earlier (Cole Robinson)
- caps: Add virCapabilitiesDomainDataLookup (Cole Robinson)
- caps: Convert to use VIR_DOMAIN_VIRT internally (Cole Robinson)
- domain: Convert os.type to VIR_DOMAIN_OSTYPE enum (Cole Robinson)
- caps: Switch AddGuest to take VIR_DOMAIN_OSTYPE value (Cole Robinson)
- caps: Use an enum internally for ostype value (Cole Robinson)
- domain: conf: Don't validate VM ostype/arch at daemon startup (Cole Robinson)
- domain: conf: Better errors on bad os <type> values (Cole Robinson)
- parallels: make device addressing consistent (Nikolay Shirokovskiy)
- rng: Move sgio attr definition to a separate block (Erik Skultety)
- Apparmor: removed duplicate nscd rules (Cédric Bosdonnat)
- schema: Allow multiple machines for VMs and unite architectures (Martin Kletzander)
- qemuDomainShutdownFlags: Set fakeReboot more frequently (zhang bo)
- Introduce virNetDevBandwidthUpdateFilter (Michal Privoznik)
- virnetdevbandwidth.c: Separate tc filter creation to a function (Michal Privoznik)
- virNetDevBandwidthSet: Add priority to filter (Michal Privoznik)
- virDomainActualNetDefContentsFormat: Format class_id more frequently (Michal Privoznik)
- nwfilter: Partly initialize driver even for non-privileged users (Michal Privoznik)
- lxc: move wireless PHYs to a network namespace (Lubomir Rintel)
- libxl: Move job acquisition in libxlDomainStart to callers (Jim Fehlig)
- libxl: support HVM direct kernel boot (Jim Fehlig)
- xenconfig: don't use "kernel" for hvmloader (Jim Fehlig)
- xenconfig: move <os> parsing/formating to config-specific files (Jim Fehlig)
- xenconfig: remove redunant parsing of device_model (Jim Fehlig)
- xenconfig: export xenConfigCopyString (Jim Fehlig)
- storage: Refactor virStorageBackendSCSINewLun (John Ferlan)
- qemu: monitor: Refactor and fix monitor checking (Peter Krempa)
- daemon: Prefix sysctl configuration filename with a number (Jiri Denemark)
- RNG schema: allow plain @floor to <bandwidth/> (Michal Privoznik)
- virNetDevBandwidthPlug: Update function description (Michal Privoznik)
- Add functions dealing with control characters in strings (Ján Tomko)
- tests: rename testStripIPv6BracketsData to testStripData (Ján Tomko)
- Add an example for EVENT_ID_DEVICE_ADDED (Ján Tomko)
- Emit VIR_DOMAIN_EVENT_ID_DEVICE_ADDED in the QEMU driver (Ján Tomko)
- Cleanup "/sys/class/net" usage (Michal Privoznik)
- tests: Add virnetdevtestdata to EXTRA_DIST (Michal Privoznik)
- node: udev: Remove some redundant error reports (Peter Krempa)
- virPidFileConstructPath: Drop useless VIR_FREE() (Michal Privoznik)
- qemu: monitor: @running in qemuMonitorGetStatus is always non-NULL (Peter Krempa)
- qemu: monitor: Don't use 'ret' variable where not necessary (Peter Krempa)
- qemu: monitor: Sanitize control flow in qemuMonitorSetCapabilities (Peter Krempa)
- qemu: monitor: Clean up coding style (Peter Krempa)
- json: export non-static functions (Martin Kletzander)
- Change virConnectPtr into virObjectLocklable (Martin Kletzander)
- closeCallback is already lockable, initialize it as such (Martin Kletzander)
- configure: Align messages (Martin Kletzander)
- storage: Add duplicate devices check for zfs pool def (John Ferlan)
- storage: Add duplicate source pool for Gluster pool def (John Ferlan)
- storage: Add duplicate host check for Sheepdog pool def (John Ferlan)
- storage: Remove default from switch in virStoragePoolSourceFindDuplicate (John Ferlan)
- storage: Use virStoragePoolSourceMatchSingleHost for NETFS (John Ferlan)
- storage: Add check for different ports for host duplicate matching (John Ferlan)
- storage: Create virStoragePoolSourceMatchSingleHost (John Ferlan)
- storage: Refactor iSCSI Source matching (John Ferlan)
- Introduce virnetdevtest (Michal Privoznik)
- cfg: Disallow usage of 'index' as variable name (John Ferlan)
- nwfilter: Change 'index' to 'idx' (John Ferlan)
- snapshot: Change 'index' to 'idx' (John Ferlan)
- util: Use 'idx' instead of 'index' (John Ferlan)
- qemu: Adjust the prototype to match the function (John Ferlan)
- sparc: Add default PCI root controller (Martin Kletzander)
- qemu: Use 'idx' instead of 'index' for variable name (John Ferlan)
- qemu: Refactor qemuDomainBlockJobAbort() (Peter Krempa)
- qemu: blockPull: Refactor the rest of qemuDomainBlockJobImpl (Peter Krempa)
- qemu: blockjob: Separate qemuDomainBlockJobAbort from qemuDomainBlockJobImpl (Peter Krempa)
- qemu: blockjob: Split qemuDomainBlockJobSetSpeed from qemuDomainBlockJobImpl (Peter Krempa)
- qemu: monitor: Extract handling of JSON block job error codes (Peter Krempa)
- qemu: monitor: json: Refactor error code class checker (Peter Krempa)
- conf: Refactor virDomainVcpuPinDefParseXML (Peter Krempa)
- conf: Error out if iothread id is missing in iothreadpin (Peter Krempa)
- onf: Split up virDomainVcpuPinDefParseXML (Peter Krempa)
- conf: Split out parsing of emulatorpin (Peter Krempa)
- conf: ABI: Check WWN in disk abi stability check (Peter Krempa)
- Convert virDomainPinIsDuplicate into bool return (John Ferlan)
- Rename qemuCheckIothreads to qemuCheckIOThreads (John Ferlan)
- Rewrite vshParseCPUList (Ján Tomko)
- Rewrite vshPrintPinInfo (Ján Tomko)
- Parallels: implemented domainAttachDevice (Alexander Burluka)
- Parallels: implement domainAttachDeviceFlags (Alexander Burluka)
- Parallels: remove disk serial number check (Alexander Burluka)
- Remove overengineered loop (Ján Tomko)
- Introduce struct _virStorageBackendQemuImgInfo (Ján Tomko)
- Rename virStorageBackendCreateQemuImgCmd (Ján Tomko)
- Use XPath when parsing snapshot disk definition (Ján Tomko)
- Split out storage format 'compat' attribute sanity check (Ján Tomko)
- Remove feature formating funcs from pool-specific options (Ján Tomko)
- Rewrite usb device version parsing (Ján Tomko)
- Do xml->xml test for usb-redir-filter (Ján Tomko)
- Do not require virtio-pci devices when using virtio-mmio (Ján Tomko)
- qemuMigrationPrecreateStorage: Fix debug message (Michal Privoznik)
- qemu_migration.c: sleep first before checking for migration status. (Xing Lin)
- conf: Don't output <cpu> tag if it contains no information. (Andrea Bolognani)
- qemu: qemuDomainHotplugVcpus - separate out pin adjustment code (John Ferlan)
- AUTHORS: Add my email address to AUTHORS.in (Dmitry Guryanov)
- util: Replace virNetDevGetIPv4Address with virNetDevGetIPAddress (John Ferlan)
- parallels: add implicit input devices (Dmitry Guryanov)
- conf: add input device type for parallels containers (Dmitry Guryanov)
- conf: return proper default video type for parallels (Dmitry Guryanov)
- conf: add VIR_DOMAIN_VIDEO_TYPE_PARALLELS video type (Dmitry Guryanov)
- parallels: don't fill net adapter model for containers (Dmitry Guryanov)
- parallels: fill adapter model in virDomainNetDef (Dmitry Guryanov)
- parallels: add controllers in prlsdkLoadDomain (Dmitry Guryanov)
- parallels: report, that cdroms are readonly (Dmitry Guryanov)
- parallels: implement virDomainManagedSave (Dmitry Guryanov)
- parallels: split prlsdkDomainChangeState function (Dmitry Guryanov)
- parallels: fix headers in parallels_sdk.h (Dmitry Guryanov)
- qemu: qemuDomainHotplugVcpus - separate out the del cgroup and pin (John Ferlan)
- qemu: qemuDomainHotplugVcpus - separate out the add cgroup (John Ferlan)
- cgroup: Use virCgroupNewThread (John Ferlan)
- cgroup: Introduce virCgroupNewThread (John Ferlan)
- qemu: blockPivot: Don't pause the VM any more since we don't use drive-reopen (Peter Krempa)
- qemu: Clean up old leftovers in qemuMonitorDrivePivot (Peter Krempa)
- qemu: blockjob: Use the new helpers in qemuDomainGetBlockJobInfo (Peter Krempa)
- qemu: domain: Add helper to check block job support (Peter Krempa)
- qemu: domain: Introduce helper to retrieve domain monitor object (Peter Krempa)
- Apparmor qemu abstraction fixes for SLES (Cédric Bosdonnat)
- test: Add tests for virFileSanitizePath (Peter Krempa)
- virLXCControllerSetupResourceLimits: Call virNuma*() iff needed (Michal Privoznik)
- vbox: Implement virDomainSendKey (Dawid Zamirski)
- vbox: Register IKeyboard with the unified API. (Dawid Zamirski)
- vircgroup: Introduce virCgroupControllerAvailable (Michal Privoznik)
- qemu_driver: check caps after starting block job (Michael Chapman)
- qemu_migrate: use nested job when adding NBD to cookie (Michael Chapman)
- storage: Introduce storagePoolUpdateAllState function (Erik Skultety)
- conf: Introduce virStoragePoolLoadAllState && virStoragePoolLoadState (Erik Skultety)
- storage: Add support for storage pool state XML (Erik Skultety)
- hostdev: Report the domain name for used hostdevs during nodedev-detach (Shivaprasad G Bhat)
- virsh: Improve change-media success message (Cole Robinson)
- interface: allow multiple IPv4 addresses in interface XML (Laine Stump)
- virsh.pod: Remove redundant --config from attach-interface (Jiri Denemark)
- esx: esxNodeGetFreeMemory return info from host. (Dawid Zamirski)
- esx: add esxVI_GetInt (Dawid Zamirski)
- conf: Change virStoragePoolSaveConfig prototype s/configDir/configFile (Erik Skultety)
- conf: Introduce virStoragePoolSaveState (Erik Skultety)
- conf: Introduce virStoragePoolDefFormatBuf (Erik Skultety)
- Auto add virtio-serial controllers (Ján Tomko)
- Assign an address when hotplugging a virtio-serial device (Ján Tomko)
- Expand the address set when attaching a virtio-serial controller (Ján Tomko)
- Allocate virtio-serial addresses when starting a domain (Ján Tomko)
- Add functions to track virtio-serial addresses (Ján Tomko)
- Add test for virtio serial port assignment (Ján Tomko)
- scsi: Remove unused 'type_path' in processLU (John Ferlan)
- iscsi: Use error message from virStorageBackendSCSIFindLUs (John Ferlan)
- conf: Introduce virStoragePoolSaveXML (Erik Skultety)
- storage: Remove unused attribute conn from 'checkPool' callback (Erik Skultety)
- Fix indentation in cmdVcpuPin (Ján Tomko)
- virsh: remove stale comment (Ján Tomko)
- conf: Rename virDomainHasDiskMirror and detect block jobs properly (Shanzhi Yu)
- qemu: snapshot: Check for block jobs individually (Peter Krempa)
- Remove unnecessary includes from virsh.h (Ján Tomko)
- Remove unused includes from virsh (Ján Tomko)
- Clean up headers in src/util/virutil.h (Ján Tomko)
- Do not include cpu_map.h in libvirtd.c (Ján Tomko)
- Use the DEFAULT_DRIVER_DIR macro (Ján Tomko)
- Remove unused macros (Ján Tomko)
- qemu: Copy bitmap in a sane way (Peter Krempa)
- qemu: cgroup: Kill qemuSetupCgroupVcpuPin() (Peter Krempa)
- qemu: cgroup: Kill qemuSetupCgroupIOThreadsPin() (Peter Krempa)
- qemu: cgroup: Rename qemuSetupCgroupEmulatorPin to qemuSetupCgroupCpusetCpus (Peter Krempa)
- qemu: cgroup: Use priv->autoCpuset instead of using qemuPrepareCpumap() (Peter Krempa)
- qemu: cgroup: Properly set up vcpu pinning (Peter Krempa)
- qemu: cgroup: Refactor setup for IOThread cgroups (Peter Krempa)
- qemu: cgroup: Store auto cpuset instead of re-creating it on demand (Peter Krempa)
So thanks everybody for your contributions for this release, be it
ideas, bug reports, documentations, patches, reviews ... all those releases
represent a massive amount of work !
Daniel
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
1
0
I'm a little late, but I have now tagged candidate release 1 for
1.2.15 in git and pushed signed tarballs and rpms to the usual place:
ftp://libvirt.org/libvirt/
this seems to work for me in my limited testing, but please give
it a try, especially on less common platforms.
The https://ci.centos.org/ seems to indicate issues on building the
Perl tests as well as virt-manager regression testing, can someone dig
into what is happening there ?
I will likely push an rc2 on Thursday, and then the final release over the
week-end,
thanks!
Daniel
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
3
4
01 May '15
Provide integration with libvirt's lock manager in the libxl driver.
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
V3 of
https://www.redhat.com/archives/libvir-list/2015-April/msg01006.html
In V3, call virDomainLockProcessStart() with 'paused' parameter
set to 'true' and add a call to virDomainLockProcessResume().
src/Makefile.am | 12 +++++++++
src/libxl/libvirtd_libxl.aug | 2 ++
src/libxl/libxl.conf | 10 +++++++
src/libxl/libxl_conf.c | 14 ++++++++++
src/libxl/libxl_conf.h | 6 +++++
src/libxl/libxl_domain.c | 51 +++++++++++++++++++++++++++++++++++-
src/libxl/libxl_domain.h | 1 +
src/libxl/libxl_driver.c | 25 ++++++++++++++++++
src/libxl/libxl_migration.c | 6 +++++
src/libxl/test_libvirtd_libxl.aug.in | 1 +
10 files changed, 127 insertions(+), 1 deletion(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 9a5f16c..1438174 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2246,6 +2246,12 @@ BUILT_SOURCES += locking/qemu-lockd.conf
DISTCLEANFILES += locking/qemu-lockd.conf
endif WITH_QEMU
+if WITH_LIBXL
+nodist_conf_DATA += locking/libxl-lockd.conf
+BUILT_SOURCES += locking/libxl-lockd.conf
+DISTCLEANFILES += locking/libxl-lockd.conf
+endif WITH_LIBXL
+
locking/%-lockd.conf: $(srcdir)/locking/lockd.conf
$(AM_V_GEN)$(MKDIR_P) locking ; \
cp $< $@
@@ -2431,6 +2437,12 @@ nodist_conf_DATA += locking/qemu-sanlock.conf
BUILT_SOURCES += locking/qemu-sanlock.conf
DISTCLEANFILES += locking/qemu-sanlock.conf
endif WITH_QEMU
+
+if WITH_LIBXL
+nodist_conf_DATA += locking/libxl-sanlock.conf
+BUILT_SOURCES += locking/libxl-sanlock.conf
+DISTCLEANFILES += locking/libxl-sanlock.conf
+endif WITH_LIBXL
else ! WITH_SANLOCK
EXTRA_DIST += $(LOCK_DRIVER_SANLOCK_SOURCES)
endif ! WITH_SANLOCK
diff --git a/src/libxl/libvirtd_libxl.aug b/src/libxl/libvirtd_libxl.aug
index f225954..d5aa150 100644
--- a/src/libxl/libvirtd_libxl.aug
+++ b/src/libxl/libvirtd_libxl.aug
@@ -25,9 +25,11 @@ module Libvirtd_libxl =
(* Config entry grouped by function - same order as example config *)
let autoballoon_entry = bool_entry "autoballoon"
+ let lock_entry = str_entry "lock_manager"
(* Each entry in the config is one of the following ... *)
let entry = autoballoon_entry
+ | lock_entry
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
let empty = [ label "#empty" . eol ]
diff --git a/src/libxl/libxl.conf b/src/libxl/libxl.conf
index c104d40..ba3de7a 100644
--- a/src/libxl/libxl.conf
+++ b/src/libxl/libxl.conf
@@ -10,3 +10,13 @@
# autoballoon setting.
#
#autoballoon = 1
+
+
+# In order to prevent accidentally starting two domains that
+# share one writable disk, libvirt offers two approaches for
+# locking files: sanlock and virtlockd. sanlock is an external
+# project which libvirt integrates with via the libvirt-lock-sanlock
+# package. virtlockd is a libvirt implementation that is enabled with
+# "lockd". Accepted values are "sanlock" and "lockd".
+#
+#lock_manager = "lockd"
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 1b504fa..29498d5 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -102,6 +102,7 @@ libxlDriverConfigDispose(void *obj)
VIR_FREE(cfg->libDir);
VIR_FREE(cfg->saveDir);
VIR_FREE(cfg->autoDumpDir);
+ VIR_FREE(cfg->lockManagerName);
}
@@ -1495,6 +1496,7 @@ int libxlDriverConfigLoadFile(libxlDriverConfigPtr cfg,
const char *filename)
{
virConfPtr conf = NULL;
+ virConfValuePtr p;
int ret = -1;
/* Check the file is readable before opening it, otherwise
@@ -1512,6 +1514,18 @@ int libxlDriverConfigLoadFile(libxlDriverConfigPtr cfg,
if (libxlGetAutoballoonConf(cfg, conf) < 0)
goto cleanup;
+ if ((p = virConfGetValue(conf, "lock_manager"))) {
+ if (p->type != VIR_CONF_STRING) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "%s",
+ _("Unexpected type for 'lock_manager' setting"));
+ goto cleanup;
+ }
+
+ if (VIR_STRDUP(cfg->lockManagerName, p->str) < 0)
+ goto cleanup;
+ }
+
ret = 0;
cleanup:
diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h
index 5ba1a71..0a1c0db 100644
--- a/src/libxl/libxl_conf.h
+++ b/src/libxl/libxl_conf.h
@@ -38,6 +38,7 @@
# include "virobject.h"
# include "virchrdev.h"
# include "virhostdev.h"
+# include "locking/lock_manager.h"
# define LIBXL_DRIVER_NAME "xenlight"
# define LIBXL_VNC_PORT_MIN 5900
@@ -98,6 +99,8 @@ struct _libxlDriverConfig {
* memory for new domains from domain0. */
bool autoballoon;
+ char *lockManagerName;
+
/* Once created, caps are immutable */
virCapsPtr caps;
@@ -144,6 +147,9 @@ struct _libxlDriverPrivate {
/* Immutable pointer, lockless APIs*/
virSysinfoDefPtr hostsysinfo;
+
+ /* Immutable pointer. lockless access */
+ virLockManagerPluginPtr lockManager;
};
# define LIBXL_SAVE_MAGIC "libvirt-xml\n \0 \r"
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 3039427..5f5f8e5 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -34,6 +34,7 @@
#include "virlog.h"
#include "virstring.h"
#include "virtime.h"
+#include "locking/domain_lock.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -217,12 +218,36 @@ libxlDomainObjPrivateFree(void *data)
{
libxlDomainObjPrivatePtr priv = data;
+ VIR_FREE(priv->lockState);
virObjectUnref(priv);
}
+static int
+libxlDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
+{
+ libxlDomainObjPrivatePtr priv = data;
+
+ priv->lockState = virXPathString("string(./lockstate)", ctxt);
+
+ return 0;
+}
+
+static int
+libxlDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
+{
+ libxlDomainObjPrivatePtr priv = data;
+
+ if (priv->lockState)
+ virBufferAsprintf(buf, "<lockstate>%s</lockstate>\n", priv->lockState);
+
+ return 0;
+}
+
virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks = {
.alloc = libxlDomainObjPrivateAlloc,
.free = libxlDomainObjPrivateFree,
+ .parse = libxlDomainObjPrivateXMLParse,
+ .format = libxlDomainObjPrivateXMLFormat,
};
@@ -667,6 +692,11 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
virHostdevReAttachDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
vm->def, VIR_HOSTDEV_SP_PCI, NULL);
+ VIR_FREE(priv->lockState);
+ if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
+ VIR_WARN("Unable to release lease on %s", vm->def->name);
+ VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
+
vm->def->id = -1;
if (priv->deathW) {
@@ -960,6 +990,20 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
vm->def, VIR_HOSTDEV_SP_PCI) < 0)
goto cleanup;
+ if (virDomainLockProcessStart(driver->lockManager,
+ "xen:///system",
+ vm,
+ true,
+ NULL) < 0)
+ goto cleanup;
+
+ if (virDomainLockProcessResume(driver->lockManager,
+ "xen:///system",
+ vm,
+ priv->lockState) < 0)
+ goto cleanup;
+ VIR_FREE(priv->lockState);
+
/* Unlock virDomainObj while creating the domain */
virObjectUnlock(vm);
@@ -990,7 +1034,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to restore domain '%s'"),
d_config.c_info.name);
- goto cleanup;
+ goto release_dom;
}
/*
@@ -1003,6 +1047,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
if (libxl_evenable_domain_death(cfg->ctx, vm->def->id, 0, &priv->deathW))
goto cleanup_dom;
+
if ((dom_xml = virDomainDefFormat(vm->def, 0)) == NULL)
goto cleanup_dom;
@@ -1040,6 +1085,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
goto cleanup;
cleanup_dom:
+ ret = -1;
if (priv->deathW) {
libxl_evdisable_domain_death(cfg->ctx, priv->deathW);
priv->deathW = NULL;
@@ -1048,6 +1094,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
vm->def->id = -1;
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_FAILED);
+ release_dom:
+ virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState);
+
cleanup:
libxl_domain_config_dispose(&d_config);
VIR_FREE(dom_xml);
diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h
index aa647b8..8c73cc4 100644
--- a/src/libxl/libxl_domain.h
+++ b/src/libxl/libxl_domain.h
@@ -64,6 +64,7 @@ struct _libxlDomainObjPrivate {
virChrdevsPtr devs;
libxl_evgen_domain_death *deathW;
unsigned short migrationPort;
+ char *lockState;
struct libxlDomainJobObj job;
};
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 6a54c73..1ecfd71 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -57,6 +57,7 @@
#include "viratomic.h"
#include "virhostdev.h"
#include "network/bridge_driver.h"
+#include "locking/domain_lock.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -411,6 +412,7 @@ libxlStateCleanup(void)
virObjectUnref(libxl_driver->domains);
virObjectUnref(libxl_driver->reservedVNCPorts);
virObjectUnref(libxl_driver->migrationPorts);
+ virLockManagerPluginUnref(libxl_driver->lockManager);
virObjectEventStateFree(libxl_driver->domainEventState);
virSysinfoDefFree(libxl_driver->hostsysinfo);
@@ -590,6 +592,14 @@ libxlStateInitialize(bool privileged,
goto error;
}
+ if (!(libxl_driver->lockManager =
+ virLockManagerPluginNew(cfg->lockManagerName ?
+ cfg->lockManagerName : "nop",
+ "libxl",
+ cfg->configBaseDir,
+ 0)))
+ goto error;
+
/* read the host sysinfo */
libxl_driver->hostsysinfo = virSysinfoRead();
@@ -2860,11 +2870,21 @@ libxlDomainAttachDeviceDiskLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev)
if (libxlMakeDisk(l_disk, &x_disk) < 0)
goto cleanup;
+ if (virDomainLockDiskAttach(libxl_driver->lockManager,
+ "xen:///system",
+ vm, l_disk) < 0)
+ goto cleanup;
+
if ((ret = libxl_device_disk_add(cfg->ctx, vm->def->id,
&x_disk, NULL)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to attach disk '%s'"),
l_disk->dst);
+ if (virDomainLockDiskDetach(libxl_driver->lockManager,
+ vm, l_disk) < 0) {
+ VIR_WARN("Unable to release lock on %s",
+ virDomainDiskGetSource(l_disk));
+ }
goto cleanup;
}
@@ -3005,6 +3025,11 @@ libxlDomainDetachDeviceDiskLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev)
goto cleanup;
}
+ if (virDomainLockDiskDetach(libxl_driver->lockManager,
+ vm, l_disk) < 0)
+ VIR_WARN("Unable to release lock on %s",
+ virDomainDiskGetSource(l_disk));
+
virDomainDiskRemove(vm->def, idx);
virDomainDiskDefFree(l_disk);
diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c
index 51993c6..1efd98f 100644
--- a/src/libxl/libxl_migration.c
+++ b/src/libxl/libxl_migration.c
@@ -41,6 +41,7 @@
#include "libxl_driver.h"
#include "libxl_conf.h"
#include "libxl_migration.h"
+#include "locking/domain_lock.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -469,6 +470,7 @@ libxlDomainMigrationPerform(libxlDriverPrivatePtr driver,
const char *dname ATTRIBUTE_UNUSED,
unsigned int flags)
{
+ libxlDomainObjPrivatePtr priv = vm->privateData;
char *hostname = NULL;
unsigned short port = 0;
char portstr[100];
@@ -503,6 +505,10 @@ libxlDomainMigrationPerform(libxlDriverPrivatePtr driver,
sockfd = virNetSocketDupFD(sock, true);
virObjectUnref(sock);
+ if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
+ VIR_WARN("Unable to release lease on %s", vm->def->name);
+ VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
+
/* suspend vm and send saved data to dst through socket fd */
virObjectUnlock(vm);
ret = libxlDoMigrateSend(driver, vm, flags, sockfd);
diff --git a/src/libxl/test_libvirtd_libxl.aug.in b/src/libxl/test_libvirtd_libxl.aug.in
index 23e667c..baa8c79 100644
--- a/src/libxl/test_libvirtd_libxl.aug.in
+++ b/src/libxl/test_libvirtd_libxl.aug.in
@@ -3,3 +3,4 @@ module Test_libvirtd_libxl =
test Libvirtd_libxl.lns get conf =
{ "autoballoon" = "1" }
+{ "lock_manager" = "lockd" }
--
1.8.4.5
3
6
[libvirt] [PATCH] qemu: Fix bus and lun checks when scsi-disk.channel not present
by John Ferlan 30 Apr '15
by John Ferlan 30 Apr '15
30 Apr '15
Found by Laine and discussed a bit on internal IRC.
Commit id c56fe7f1d6 added support for creating a command line to support
scsi-disk.channel.
Series was here:
http://www.redhat.com/archives/libvir-list/2012-February/msg01052.html
Which pointed to a design proposal here:
http://permalink.gmane.org/gmane.comp.emulators.libvirt/50428
Which states (in part):
Libvirt should check for the QEMU "scsi-disk.channel" property. If it
is unavailable, QEMU will only support channel=lun=0 and 0<=target<=7.
However, the check added was ensuring that bus != lun *and* bus != 0. So
if bus == lun and both were non zero, we'd never make the second check.
Changing this to an *or* check fixes the check, but still is less readable
than the just checking each for 0
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_command.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 0dc8628..583bc11 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4127,8 +4127,8 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
goto error;
}
- if ((disk->info.addr.drive.bus != disk->info.addr.drive.unit) &&
- (disk->info.addr.drive.bus != 0)) {
+ if (disk->info.addr.drive.bus != 0 &&
+ disk->info.addr.drive.unit != 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU only supports both bus and "
"unit equal to 0"));
--
2.1.0
2
1
Recent commit 198cc1d3 introduced integration of lockd and sanlock into
libxl, but forget to update libvirt.spec.in to also list new files
distributed via package.
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
Pushed under build-breaker rule.
libvirt.spec.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 20af502..f95e31f 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -2129,6 +2129,8 @@ exit 0
%files daemon-driver-libxl
%defattr(-, root, root)
%config(noreplace) %{_sysconfdir}/libvirt/libxl.conf
+%config(noreplace) %{_sysconfdir}/libvirt/libxl-lockd.conf
+%config(noreplace) %{_sysconfdir}/libvirt/libxl-sanlock.conf
%{_datadir}/augeas/lenses/libvirtd_libxl.aug
%{_datadir}/augeas/lenses/tests/test_libvirtd_libxl.aug
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/libxl/
--
2.0.5
3
2
This means new libxl-lockd.conf and libxl-sanlock.conf
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
Pushed under trivial rule.
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index 9d09709..7bcf359 100644
--- a/.gitignore
+++ b/.gitignore
@@ -124,6 +124,8 @@
/src/libvirt_*helper
/src/libvirt_*probes.h
/src/libvirt_lxc
+/src/locking/libxl-lockd.conf
+/src/locking/libxl-sanlock.conf
/src/locking/lock_daemon_dispatch_stubs.h
/src/locking/lock_protocol.[ch]
/src/locking/qemu-lockd.conf
--
2.0.5
1
0
[libvirt] [PATCH] qemu: blockjob: Call qemuDomainSupportsBlockJobs only on online VMs
by Peter Krempa 30 Apr '15
by Peter Krempa 30 Apr '15
30 Apr '15
Since the qemu capabilities are not initialized for offline VMs the
caller might get suboptimal error message:
$ virsh blockjob VM PATH --bandwidth 1
error: unsupported configuration: block jobs not supported with this QEMU binary
Move the checks after we make sure that the VM is alive.
---
src/qemu/qemu_driver.c | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3695b26..d6e7570 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -16555,34 +16555,34 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
goto cleanup;
}
- if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
+ if (!virDomainObjIsActive(vm)) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain is not running"));
+ goto endjob;
+ }
+
+ if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ goto endjob;
+
if (!modern) {
if (base) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("partial block pull not supported with this "
"QEMU binary"));
- goto cleanup;
+ goto endjob;
}
if (bandwidth) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("setting bandwidth at start of block pull not "
"supported with this QEMU binary"));
- goto cleanup;
+ goto endjob;
}
}
- if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
- goto cleanup;
-
- if (!virDomainObjIsActive(vm)) {
- virReportError(VIR_ERR_OPERATION_INVALID, "%s",
- _("domain is not running"));
- goto endjob;
- }
-
if (!(device = qemuDiskPathToAlias(vm, path, &idx)))
goto endjob;
disk = vm->def->disks[idx];
@@ -16682,9 +16682,6 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
if (virDomainBlockJobAbortEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
- goto cleanup;
-
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
@@ -16694,6 +16691,9 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
goto endjob;
}
+ if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ goto endjob;
+
if (!(device = qemuDiskPathToAlias(vm, path, &idx)))
goto endjob;
disk = vm->def->disks[idx];
@@ -16896,9 +16896,6 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom,
if (virDomainBlockJobSetSpeedEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
- goto cleanup;
-
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
@@ -16908,6 +16905,9 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom,
goto endjob;
}
+ if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ goto endjob;
+
if (!(device = qemuDiskPathToAlias(vm, path, NULL)))
goto endjob;
--
2.3.5
2
2
Just as we allow stopping filesystem pools when they were unmounted
externally, do not fail to stop an iscsi pool when someone else
closed the session externally.
Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1171984
---
src/storage/storage_backend_iscsi.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c
index 197d333..bea6758 100644
--- a/src/storage/storage_backend_iscsi.c
+++ b/src/storage/storage_backend_iscsi.c
@@ -449,8 +449,13 @@ virStorageBackendISCSIStopPool(virConnectPtr conn ATTRIBUTE_UNUSED,
virStoragePoolObjPtr pool)
{
char *portal;
+ char *session;
int ret = -1;
+ if ((session = virStorageBackendISCSISession(pool, false)) == NULL)
+ return 0;
+ VIR_FREE(session);
+
if ((portal = virStorageBackendISCSIPortal(&pool->def->source)) == NULL)
return -1;
--
2.0.5
3
8
Hi all,
libvirt's selinux/DAC labeling behavior has been a repeated source of
frustration for desktop virt users. Granted much of the frustration comes from
the fact that virt-manager runs as $user, talks to libvirtd running as root,
which launches VMs running as qemu, and we are mixing it all with selinux :)
But the flip side is that I've lost count of how many times I've heard someone
complain 'why is libvirt chowning/relabeling my .iso? it's world readable'
I spent some time looking at bug reports and looking at the relevant libvirt
code, and I have a couple ideas for reducing user complaints in this area. The
patches should be pretty simple but I haven't written them yet since I'd like
other opinions on this stuff, given it could impact security. Here's my two
suggestions:
1) Don't attempt to change selinux label for readonly/shareable images, if the
image already has a label that svirt_t can access.
Background: svirt is about giving r/w disk images a unique selinux label tied
to one running VM, so that if other VMs are compromised, they can't access
another VMs disk image. Maintaining this guarantee is important, which is why
libvirt will raise an explicit error if attempting to change the disk image
label errors with EPERM and selinux==Enforcing. Makes sense.
The problem is with readonly media. We don't give a unique label to RO media,
we just give it plain virt_content_t. RO media labeling isn't about VM
isolation, it's about ensuring the svirt VM can even access the media.
However, if labeling fails with EPERM, we still fail in the same way mentioned
above.
Here's a situation where that is problematic:
- Running as qemu:///session (unprivileged)
- Point a VM at /path/to/my/isos/foo.iso
- foo.iso is: owner=root, mode=644, label=public_content_t. We
are sharing this media for qemu:///system usage as well
Without any libvirt label changing, the VM should be able to access that ISO:
permissions are fine, and svirt_t can access public_content_t. However the
unprivileged user does not have permissions to change the label to
virt_content_t, libvirt fails to set the label, raises the error, VM startup
fails.
I suggest that in the case of readonly (and maybe shareable which uses the
plain svirt_image_t label) disk, we first check to see if svirt_t can access
the existing label, and if so, don't do any explicit labeling. This makes
things 'just work' in the above example, and doesn't seem to have a
detrimental effect on security. I don't know exactly how to do this with the
selinux API but I assume there's something that reproduces what sesearch does
on the CLI.
Another case this helps: qemu:///system VM wants to use /dev/sr0, changes the
label to virt_content_t, which can generate selinux violations from udev when
media is ejected/inserted and the VM is running (I don't remember specifics
here but we've had bug reports in the past). Instead it just leaves /dev/sr0
as removable_device_t, which svirt_t can already read from.
(Libvirt already does something along these lines: If the labeling fails, it
checks to see if the disk image _already_ has the label we just requested, and
if so, it's not an error condition. But this suggestion goes a step further
than that)
2) DAC shouldn't change owner if qemu will be able to access the disk.
Background: My understanding of the DAC driver is it's _just_ to facilitate
running qemu as non-root; we chown the image to ensure the emulator has
permissions to access it so that VM startup doesn't fail. So I suggest that if
libvirt determines the disk is already accessible by the qemu user, we skip
the chown step.
Coupled with the above selinux erroring mentioned above, unnecessary chowning
can cause issues when sharing media between qemu:///system and
qemu:///session; once the file is owned by qemu, qemu:///session can't change
the selinux label ever again, and labeling failures may mean the VM fails to
start.
Thankfully we have libvirt infrastructure for checking whether a file can be
read by arbitrary uid:gid: virStorageFileInitAs and friends. We already use
that to check the file is searchable at qemu startup time, via:
qemuProcessState->
qemuDomainCheckDiskPresence->
qemuDomainDetermineDiskChain->
virStorageFileGetMetadata->
virStorageFileGetMetadataRecurse
So I suggest we add a check along those lines in security_dac.c, and if the
file is already accessible for the disk's needs, we skip the chown'ing.
Thoughts/comments appreciated.
Thanks,
Cole
3
3
Only USB addresses are allowed for USB disks. Report an error if another
address is configured.
https://bugzilla.redhat.com/show_bug.cgi?id=1043436
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_command.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index e62833f..0dc8628 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4057,6 +4057,7 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
disk->info.addr.drive.bus,
disk->info.addr.drive.unit);
break;
+
case VIR_DOMAIN_DISK_BUS_SCSI:
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_BLOCK)) {
@@ -4155,6 +4156,7 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
disk->info.addr.drive.unit);
}
break;
+
case VIR_DOMAIN_DISK_BUS_SATA:
if (disk->info.addr.drive.bus != 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -4194,6 +4196,7 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
disk->info.addr.drive.unit);
}
break;
+
case VIR_DOMAIN_DISK_BUS_VIRTIO:
if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
virBufferAddLit(&opt, "virtio-blk-ccw");
@@ -4227,7 +4230,14 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
if (qemuBuildDeviceAddressStr(&opt, def, &disk->info, qemuCaps) < 0)
goto error;
break;
+
case VIR_DOMAIN_DISK_BUS_USB:
+ if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("unexpected address type for usb disk"));
+ goto error;
+ }
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_STORAGE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU doesn't support '-device "
@@ -4240,11 +4250,13 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
if (qemuBuildDeviceAddressStr(&opt, def, &disk->info, qemuCaps) < 0)
goto error;
break;
+
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unsupported disk bus '%s' with device setup"), bus);
goto error;
}
+
virBufferAsprintf(&opt, ",drive=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias);
virBufferAsprintf(&opt, ",id=%s", disk->info.alias);
if (bootindex && virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX))
--
2.3.6
2
2
30 Apr '15
https://bugzilla.redhat.com/show_bug.cgi?id=858147
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/cpu/cpu_x86.c | 6 ++++++
.../qemuxml2argv-cpu-host-model-vendor.args | 20 ++++++++++++++++++++
.../qemuxml2argv-cpu-host-model-vendor.xml | 21 +++++++++++++++++++++
tests/qemuxml2argvtest.c | 1 +
4 files changed, 48 insertions(+)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.xml
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index bf1867b..2a14705 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -2107,6 +2107,12 @@ x86UpdateHostModel(virCPUDefPtr guest,
if (virCPUDefCopyModel(guest, host, true) < 0)
goto cleanup;
+ if (oldguest->vendor_id) {
+ VIR_FREE(guest->vendor_id);
+ if (VIR_STRDUP(guest->vendor_id, oldguest->vendor_id) < 0)
+ goto cleanup;
+ }
+
/* Remove non-migratable features by default
* Note: this only works as long as no CPU model contains non-migratable
* features directly */
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args
new file mode 100644
index 0000000..5d67d55
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args
@@ -0,0 +1,20 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/home/test \
+USER=test \
+LOGNAME=test QEMU_AUDIO_DRV=none \
+/usr/bin/qemu \
+-S \
+-M pc \
+-cpu 'core2duo,vendor=Libvirt QEMU,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,\
++ds_cpl,+pbe,+tm,+ht,+ss,+acpi,+ds' \
+-m 214 \
+-smp 6 \
+-nographic \
+-monitor unix:/tmp/test-monitor,server,nowait \
+-no-acpi \
+-boot n \
+-usb \
+-net none \
+-serial none \
+-parallel none
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.xml
new file mode 100644
index 0000000..a33362f
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.xml
@@ -0,0 +1,21 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+ <currentMemory unit='KiB'>219100</currentMemory>
+ <vcpu placement='static'>6</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc'>hvm</type>
+ <boot dev='network'/>
+ </os>
+ <cpu mode='host-model'>
+ <model vendor_id="Libvirt QEMU"/>
+ </cpu>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 0763068..670465e 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1245,6 +1245,7 @@ mymain(void)
QEMU_CAPS_OBJECT_MEMORY_RAM);
DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY);
DO_TEST("cpu-host-model", NONE);
+ DO_TEST("cpu-host-model-vendor", NONE);
skipLegacyCPUs = true;
DO_TEST("cpu-host-model-fallback", NONE);
DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
--
2.3.6
2
2
[libvirt] [PATCH] build-aux: make bracket-space.pl more python like
by Daniel P. Berrange 30 Apr '15
by Daniel P. Berrange 30 Apr '15
30 Apr '15
The libvirt developer community is generally more comfortable
with python like languages, so this converts the bracket-spacing.pl
test to use python like syntax. It includes one extra external
Perl dependancy, but after applying this, there should be no
functional change - just prettier syntax. If this is appealing
it can be extended to all the Perl scripts in the tree.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
bootstrap.conf | 1 +
build-aux/bracket-spacing.pl | 2866 +++++++++++++++++++++++++++++++++++++++---
cfg.mk | 4 +-
3 files changed, 2665 insertions(+), 206 deletions(-)
diff --git a/bootstrap.conf b/bootstrap.conf
index c06ee4c..f55466f 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -210,6 +210,7 @@ gzip -
libtool -
patch -
perl 5.5
+perl::Acme::Python -
perl::XML::XPath -
pkg-config -
python-config -
diff --git a/build-aux/bracket-spacing.pl b/build-aux/bracket-spacing.pl
index 5bc96d2..9114352 100755
--- a/build-aux/bracket-spacing.pl
+++ b/build-aux/bracket-spacing.pl
@@ -1,204 +1,2662 @@
-#!/usr/bin/perl
-#
-# bracket-spacing.pl: Report any usage of 'function (..args..)'
-# Also check for other syntax issues, such as correct use of ';'
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library. If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# Authors:
-# Daniel P. Berrange <berrange(a)redhat.com>
-
-use strict;
-use warnings;
-
-my $ret = 0;
-my $incomment = 0;
-
-foreach my $file (@ARGV) {
- # Per-file variables for multiline Curly Bracket (cb_) check
- my $cb_linenum = 0;
- my $cb_code = "";
- my $cb_scolon = 0;
-
- open FILE, $file;
-
- while (defined (my $line = <FILE>)) {
- my $data = $line;
- # For temporary modifications
- my $tmpdata;
-
- # Kill any quoted , ; = or "
- $data =~ s/'[";,=]'/'X'/g;
-
- # Kill any quoted strings
- $data =~ s,"([^\\\"]|\\.)*","XXX",g;
-
- # Kill any C++ style comments
- $data =~ s,//.*$,//,;
-
- next if $data =~ /^#/;
-
- # Kill contents of multi-line comments
- # and detect end of multi-line comments
- if ($incomment) {
- if ($data =~ m,\*/,) {
- $incomment = 0;
- $data =~ s,^.*\*/,*/,;
- } else {
- $data = "";
- }
- }
-
- # Kill single line comments, and detect
- # start of multi-line comments
- if ($data =~ m,/\*.*\*/,) {
- $data =~ s,/\*.*\*/,/* */,;
- } elsif ($data =~ m,/\*,) {
- $incomment = 1;
- $data =~ s,/\*.*,/*,;
- }
-
- # We need to match things like
- #
- # int foo (int bar, bool wizz);
- # foo (bar, wizz);
- #
- # but not match things like:
- #
- # typedef int (*foo)(bar wizz)
- #
- # we can't do this (efficiently) without
- # missing things like
- #
- # foo (*bar, wizz);
- #
- # We also don't want to spoil the $data so it can be used
- # later on.
- $tmpdata = $data;
- while ($tmpdata =~ /(\w+)\s\((?!\*)/) {
- my $kw = $1;
-
- # Allow space after keywords only
- if ($kw =~ /^(if|for|while|switch|return)$/) {
- $tmpdata =~ s/($kw\s\()/XXX(/;
- } else {
- print "Whitespace after non-keyword:\n";
- print "$file:$.: $line";
- $ret = 1;
- last;
- }
- }
-
- # Require whitespace immediately after keywords,
- # but none after the opening bracket
- if ($data =~ /\b(if|for|while|switch|return)\(/ ||
- $data =~ /\b(if|for|while|switch|return)\s+\(\s/) {
- print "No whitespace after keyword:\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # Forbid whitespace between )( of a function typedef
- if ($data =~ /\(\*\w+\)\s+\(/) {
- print "Whitespace between ')' and '(':\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # Forbid whitespace following ( or prior to )
- if ($data =~ /\S\s+\)/ ||
- $data =~ /\(\s+\S/) {
- print "Whitespace after '(' or before ')':\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # Forbid whitespace before ";" or ",". Things like below are allowed:
- #
- # 1) The expression is empty for "for" loop. E.g.
- # for (i = 0; ; i++)
- #
- # 2) An empty statement. E.g.
- # while (write(statuswrite, &status, 1) == -1 &&
- # errno == EINTR)
- # ;
- #
- if ($data =~ /[^;\s]\s+[;,]/) {
- print "Whitespace before (semi)colon:\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # Require EOL, macro line continuation, or whitespace after ";".
- # Allow "for (;;)" as an exception.
- if ($data =~ /;[^ \\\n;)]/) {
- print "Invalid character after semicolon:\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # Require EOL, space, or enum/struct end after comma.
- if ($data =~ /,[^ \\\n)}]/) {
- print "Invalid character after comma:\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # Require spaces around assignment '=', compounds and '=='
- # with the exception of virAssertCmpInt()
- $tmpdata = $data;
- $tmpdata =~ s/(virAssertCmpInt\(.* ).?=,/$1op,/;
- if ($tmpdata =~ /[^ ]\b[!<>&|\-+*\/%\^=]?=[^=]/ ||
- $tmpdata =~ /=[^= \\\n]/) {
- print "Spacing around '=' or '==':\n";
- print "$file:$.: $line";
- $ret = 1;
- }
-
- # One line conditional statements with one line bodies should
- # not use curly brackets.
- if ($data =~ /^\s*(if|while|for)\b.*\{$/) {
- $cb_linenum = $.;
- $cb_code = $line;
- $cb_scolon = 0;
- }
-
- # We need to check for exactly one semicolon inside the body,
- # because empty statements (e.g. with comment only) are
- # allowed
- if ($cb_linenum == $. - 1 && $data =~ /^[^;]*;[^;]*$/) {
- $cb_code .= $line;
- $cb_scolon = 1;
- }
-
- if ($data =~ /^\s*}\s*$/ &&
- $cb_linenum == $. - 2 &&
- $cb_scolon) {
-
- print "Curly brackets around single-line body:\n";
- print "$file:$cb_linenum-$.:\n$cb_code$line";
- $ret = 1;
-
- # There _should_ be no need to reset the values; but to
- # keep my inner peace...
- $cb_linenum = 0;
- $cb_scolon = 0;
- $cb_code = "";
- }
- }
- close FILE;
-}
-
-exit $ret;
+use Acme::Python;
+Hisssssssssssssssss
+Hiss hiss Hiss hiss Hissss hiss Hisss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hisss hisss Hissss hissss Hiss
+hiss Hissss hisss Hiss hisss Hissss hiss
+Hiss hisss Hiss hiss Hisss hiss Hisss hissss
+Hisss hissss Hiss hiss Hissss hiss Hisss
+hiss Hissss hissss Hiss hiss Hiss hisssss
+Hiss hiss Hiss hiss Hissss hiss Hisss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hissss hiss Hissss hiss Hiss hisssss
+Hisss hisss Hiss hisss Hissss hisss Hissss
+hiss Hisss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hissss hisss
+Hisss hiss Hisss hisss Hissss hiss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hiss Hisss hiss
+Hisss hiss Hiss hisss Hisssss hisssssss Hiss
+hisssss Hiss hisss Hiss hissss Hiss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hissss
+Hiss hiss Hissss hisssssss Hiss hisss Hiss
+hiss Hisssss hissssssss Hiss hisssssss Hisss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hisssss Hiss hiss Hisss hiss Hisss hiss
+Hiss hisss Hisssss hisssssss Hiss hisssss
+Hiss hisss Hiss hisss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hisss
+hissss Hisss hiss Hisssss hiss Hisss hiss
+Hiss hiss Hisss hiss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hisss Hiss hiss
+Hisssss hissssssss Hiss hisssssss Hisss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hissssss Hisss hisss Hisss
+hiss Hisssss hiss Hisss hisss Hiss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hiss Hisss hissss Hisss
+hisssss Hiss hiss Hisss hisssssss Hiss hisss
+Hiss hiss Hisss hiss Hisss hiss Hiss hisss
+Hisssss hisssssss Hiss hisssss Hiss hisss
+Hiss hissss Hisss hisss Hisss hiss Hiss hisss
+Hiss hiss Hisss hissss Hisss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hissssss Hiss hiss Hiss hisssssssss Hiss
+hiss Hiss hissssss Hiss hisss Hiss hisss
+Hiss hiss Hiss hiss Hissss hissss Hiss hisss
+Hisss hiss Hiss hiss Hiss hiss Hiss hisss
+Hiss hiss Hiss hissssssss Hiss hisss Hisss
+hiss Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisssssss Hiss hiss Hiss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hisss Hissss hiss
+Hiss hiss Hisss hiss Hiss hissss Hisss hisss
+Hisss hiss Hiss hisss Hiss hiss Hisss hissss
+Hisss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hissss Hisss hiss Hissss
+hiss Hiss hisssss Hisss hisss Hiss hisss
+Hissss hiss Hiss hisss Hiss hiss Hisss hiss
+Hiss hisssss Hisss hisss Hiss hissss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hiss Hisss hisss Hissss hisssssss
+Hiss hissss Hisss hisss Hisss hiss Hisssss
+hiss Hisss hisss Hiss hisss Hissss hisssssss
+Hiss hisss Hiss hiss Hisss hiss Hisss hiss
+Hiss hiss Hiss hiss Hissss hissss Hisss hiss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisss
+Hiss hiss Hisss hissss Hisss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hisss hisssss Hiss hiss Hiss hiss
+Hiss hiss Hissss hisss Hiss hisss Hissss
+hissss Hisss hiss Hisss hiss Hiss hisss Hisssss
+hisssssss Hiss hissss Hiss hisssss Hiss hisss
+Hiss hisss Hissss hiss Hiss hisssss Hisss
+hiss Hisss hissss Hisss hiss Hisss hiss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissssss
+Hiss hiss Hiss hisss Hisss hissss Hisss hisss
+Hiss hissss Hisss hiss Hissssss hiss Hiss
+hiss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hissss Hisss hisssss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hissss Hisss hiss Hisss hiss Hiss
+hiss Hisss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hisss hiss Hisss hiss
+Hiss hisss Hisssss hisssssss Hiss hisssss
+Hiss hisss Hiss hisss Hisss hissss Hisss
+hisss Hiss hissss Hisss hiss Hissssss hiss
+Hiss hissss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hiss
+Hiss hiss Hisss hiss Hisss hisssssss Hiss
+hisss Hiss hiss Hisssss hissssssss Hiss hisssssss
+Hisss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hisss Hiss
+hiss Hisss hiss Hisss hiss Hiss hisss Hisssss
+hisssssss Hiss hisssss Hiss hisss Hiss hisss
+Hisss hissss Hisss hisss Hiss hissss Hisss
+hiss Hissssss hiss Hiss hiss Hisss hissss
+Hisss hiss Hisssss hiss Hisss hissss Hiss
+hisss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hisss Hiss hiss Hisssss hissssssss
+Hiss hissss Hiss hissss Hiss hissss Hiss
+hissss Hiss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hiss hiss Hisss hiss Hisss hiss Hiss hisss
+Hisssss hisssssss Hiss hisssss Hiss hisss
+Hiss hisss Hisss hissss Hisss hisss Hiss
+hissss Hisss hiss Hissssss hiss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hisss
+hiss Hisssss hiss Hisss hissss Hisss hiss
+Hisss hiss Hisssss hiss Hisss hisss Hissss
+hiss Hisss hisssssss Hiss hisss Hiss hiss
+Hisssss hissssssss Hiss hisssssss Hisss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisssss hiss Hisss hissssss Hissss hiss Hiss
+hiss Hiss hisss Hisss hisss Hissss hiss Hisss
+hisssssss Hiss hissss Hisss hissss Hiss hiss
+Hiss hisss Hiss hisss Hiss hissss Hisss hisss
+Hiss hiss Hiss hiss Hiss hissss Hiss hissss
+Hisss hiss Hiss hissssssss Hiss hisssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hisss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hissss hiss Hissss hisssss Hiss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hissss Hisss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hissssss Hiss hiss Hiss hisssss
+Hiss hisss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisss Hisss hisss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hissss Hiss hisss
+Hisss hisssssss Hiss hissssss Hiss hiss Hiss
+hisss Hiss hiss Hisss hiss Hisss hiss Hiss
+hisss Hisssss hisssssss Hiss hisssss Hiss
+hisss Hiss hisssss Hisss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisssss Hisssss hissss Hisss hissss Hiss
+hiss Hiss hisss Hiss hisss Hiss hissss Hisss
+hisss Hiss hiss Hiss hiss Hiss hissss Hiss
+hisss Hissssss hisss Hiss hisss Hiss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hisss hiss Hisss hiss
+Hiss hisss Hisssss hisssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hiss hisss Hisss
+hiss Hiss hisssss Hisss hissss Hiss hiss
+Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisssss Hiss hisss Hiss hisssss Hisss hiss
+Hisss hiss Hiss hisss Hiss hiss Hisss hisss
+Hissss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hiss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hissss Hisss hissss Hiss hiss Hisssss hiss
+Hisss hisss Hiss hisss Hissss hisssssss Hiss
+hisssss Hiss hiss Hissss hiss Hiss hiss Hiss
+hisss Hisss hiss Hiss hiss Hisss hiss Hisss
+hissssss Hissss hiss Hisssss hiss Hisss hisss
+Hiss hisss Hissss hiss Hiss hisssss Hisss
+hisss Hiss hisss Hissss hiss Hiss hisss Hisssss
+hisssssss Hiss hisss Hiss hiss Hisss hiss
+Hisss hiss Hisssss hiss Hisss hissss Hiss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hisss Hisss hisss Hisss hiss Hiss hisss Hiss
+hiss Hisss hiss Hisss hissss Hisss hiss Hiss
+hisssss Hisss hissss Hiss hiss Hissss hiss
+Hiss hisss Hiss hiss Hisss hiss Hisssss hiss
+Hisss hisss Hissss hiss Hisss hiss Hisss
+hisss Hissss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hisss
+hiss Hisss hiss Hiss hisss Hisssss hisssssss
+Hiss hisssss Hiss hisss Hiss hisssss Hiss
+hiss Hissss hiss Hiss hiss Hisss hiss Hisss
+hissssss Hissss hissss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hiss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hisss Hisss
+hiss Hiss hisss Hiss hiss Hiss hisss Hiss
+hiss Hisss hissss Hisss hiss Hisss hissss
+Hisss hiss Hisss hisssssss Hiss hisss Hiss
+hisssss Hisss hisss Hissss hiss Hisss hiss
+Hiss hisss Hisssss hisssssss Hiss hisss Hiss
+hissss Hissss hiss Hiss hiss Hiss hiss Hissss
+hiss Hisssss hiss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hissss
+Hiss hisss Hisss hisssssss Hiss hisssss Hisss
+hiss Hiss hissssssss Hiss hisss Hisss hiss
+Hissss hissssssss Hiss hisss Hiss hiss Hisssss
+hissssssss Hiss hisss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisss
+hisss Hissss hiss Hisssss hiss Hiss hisss
+Hissss hisss Hiss hisss Hisss hiss Hisss
+hiss Hiss hisss Hiss hissss Hiss hisss Hisss
+hiss Hissss hisssss Hisss hiss Hiss hisss
+Hiss hiss Hisssss hisss Hiss hiss Hissss
+hiss Hiss hiss Hissss hisss Hiss hisss Hisssss
+hiss Hiss hisss Hissss hisss Hiss hissssss
+Hisss hiss Hiss hiss Hissss hisss Hiss hisss
+Hisssss hiss Hiss hisss Hissss hisss Hisss
+hiss Hisss hiss Hissss hissss Hiss hiss Hiss
+hissssss Hiss hiss Hiss hissssssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisss Hisss hiss Hiss hisss
+Hiss hiss Hiss hisss Hiss hiss Hisss hissss
+Hisss hiss Hisss hissss Hisss hiss Hisss
+hisssssss Hiss hisss Hiss hisssss Hisss hisss
+Hissss hiss Hisss hiss Hiss hisss Hisssss
+hisssssss Hiss hisss Hiss hissss Hissss hiss
+Hiss hiss Hiss hiss Hissss hiss Hisssss hiss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hissss Hiss hisss Hisss
+hisssssss Hiss hisss Hisss hisss Hissss hissss
+Hiss hiss Hissss hisss Hiss hisss Hissss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hissss hisss Hisss hiss Hisss
+hisss Hissss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisss
+hisss Hissss hissss Hisss hiss Hiss hissss
+Hiss hissss Hiss hissssss Hiss hiss Hiss
+hisss Hisss hiss Hisss hiss Hiss hisss Hisssss
+hiss Hiss hissss Hissss hiss Hiss hissss
+Hissss hiss Hiss hissss Hissss hiss Hiss
+hisss Hiss hissss Hiss hisss Hiss hiss Hissss
+hiss Hiss hissss Hissssss hissss Hissss hiss
+Hiss hissss Hissss hiss Hiss hisss Hissss
+hiss Hiss hisss Hiss hisss Hiss hiss Hiss
+hissss Hiss hiss Hiss hiss Hiss hissss Hiss
+hissss Hiss hisssss Hisss hiss Hiss hissss
+Hiss hissss Hiss hissssss Hisss hiss Hiss
+hisssss Hisss hiss Hiss hisssss Hisss hiss
+Hiss hisss Hiss hissss Hiss hisssss Hisss
+hiss Hiss hisss Hissss hisss Hisss hiss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hisss hiss Hiss hisss Hiss hiss Hiss
+hisss Hiss hiss Hisss hissss Hisss hiss Hisss
+hissss Hisss hiss Hisss hisssssss Hiss hisss
+Hiss hisssss Hisss hisss Hissss hiss Hisss
+hiss Hiss hisss Hisssss hisssssss Hiss hisss
+Hisss hisssss Hiss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hiss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hisss Hissss hissss Hiss
+hiss Hissss hiss Hiss hisss Hisssss hissss
+Hisss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hisss Hisss hissss Hisss
+hiss Hisssss hiss Hisss hiss Hiss hiss Hisss
+hiss Hisss hiss Hiss hiss Hisss hiss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisss Hissss
+hiss Hisss hissss Hiss hiss Hissss hiss Hisss
+hisss Hissss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisss
+hisss Hissss hissss Hisss hiss Hiss hisss
+Hisssss hiss Hiss hisss Hisssss hiss Hiss
+hissss Hissss hiss Hiss hissss Hiss hiss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisssss
+Hisss hiss Hiss hisss Hisssss hiss Hiss hisss
+Hisssss hiss Hiss hisssss Hisss hiss Hiss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissss Hissss hiss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisssss Hisssss
+hissss Hiss hiss Hissss hisssssss Hiss hisss
+Hiss hisss Hiss hiss Hisss hisss Hisss hisss
+Hisss hisssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hissss Hisssss hiss Hiss hiss Hisss
+hissss Hiss hisss Hisssss hiss Hiss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hisss hiss Hiss hisss Hiss hiss Hiss
+hisss Hiss hiss Hisss hissss Hisss hiss Hisss
+hissss Hisss hiss Hisss hisssssss Hiss hisss
+Hisss hissss Hisss hiss Hisssss hiss Hisss
+hisss Hissss hiss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisss
+Hissss hiss Hisss hissss Hiss hiss Hissss
+hiss Hisss hisss Hissss hisssssss Hiss hisss
+Hisssss hiss Hisss hisss Hisss hisss Hisss
+hisssssss Hiss hisss Hiss hiss Hisss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hissss
+Hisss hiss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisss Hiss hiss Hisss hiss Hiss
+hiss Hisss hiss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hisss Hisss hissss Hisss hiss
+Hisssss hiss Hisss hiss Hiss hiss Hisss hiss
+Hisss hiss Hiss hiss Hisss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hissss Hiss hiss Hissss hiss Hisss
+hisss Hissss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisss Hiss hisssss Hisss
+hisss Hissss hiss Hisss hissss Hiss hisss
+Hisss hisssssss Hiss hisssss Hiss hisss Hisss
+hiss Hiss hiss Hiss hisss Hisss hissss Hiss
+hiss Hissss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hissss Hisss hissss Hiss hiss
+Hissss hisssssss Hiss hisss Hiss hiss Hiss
+hisss Hisss hisss Hissss hiss Hisss hissss
+Hiss hisss Hisss hisssssss Hiss hisss Hisssss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hisss Hiss hiss Hisss hiss Hisss hiss
+Hiss hiss Hiss hiss Hissss hissss Hisss hiss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisss
+Hiss hiss Hisss hiss Hiss hiss Hisss hiss
+Hiss hisssss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hisss Hisss hissss Hisss hiss Hisssss hiss
+Hisss hiss Hiss hiss Hisss hiss Hisss hiss
+Hiss hiss Hisss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hiss Hisss hisss
+Hissss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hisss hissss
+Hisss hiss Hisssss hiss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hisss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisss
+Hissss hiss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hiss hiss Hisss hiss Hisss hissss
+Hisss hiss Hiss hisssss Hissss hiss Hiss
+hisss Hiss hiss Hiss hiss Hiss hisss Hisssss
+hiss Hiss hisssss Hisss hiss Hiss hisss Hiss
+hisss Hiss hiss Hiss hissssssss Hiss hisss
+Hisss hiss Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssss Hiss hisss Hiss hisss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hisss hissss Hisss hiss Hisssss hiss Hisss
+hiss Hiss hiss Hisss hiss Hisss hiss Hiss
+hiss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hissss hiss Hisss hissss
+Hiss hiss Hissss hisssssss Hiss hisss Hiss
+hiss Hisssss hissssssss Hiss hisssssss Hisss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisss
+hisss Hissss hissss Hisss hiss Hiss hissss
+Hisssss hiss Hiss hisss Hissss hiss Hiss
+hissss Hiss hiss Hiss hiss Hiss hisssss Hissss
+hiss Hiss hisss Hiss hiss Hiss hiss Hiss
+hisss Hisssss hiss Hiss hisssss Hisss hiss
+Hiss hissss Hiss hiss Hiss hiss Hiss hisss
+Hisssss hiss Hiss hisssss Hisss hiss Hiss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hissssss hisssssss Hiss
+hisss Hiss hiss Hiss hisss Hisss hissss Hisss
+hiss Hisss hiss Hisss hisss Hissss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisss
+Hisss hiss Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssss Hiss hisss Hiss hisssss Hiss
+hisss Hisss hiss Hiss hisssss Hisss hissss
+Hiss hiss Hissss hiss Hiss hisssss Hisss
+hisssssss Hiss hisss Hiss hiss Hisssss hissssssss
+Hiss hissss Hiss hissss Hiss hissss Hiss
+hissss Hiss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hissssss hisss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisss Hisss hiss Hiss hisss
+Hiss hiss Hiss hisss Hiss hiss Hisss hissss
+Hisss hiss Hisss hissss Hisss hiss Hisss
+hisssssss Hiss hisss Hisss hisss Hissss hiss
+Hiss hisss Hiss hiss Hisss hisss Hissss hiss
+Hisss hiss Hissss hisss Hisss hissss Hisss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hisssss Hisss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hisss hissss Hisss hiss Hisssss
+hiss Hisss hiss Hiss hiss Hisss hiss Hisss
+hiss Hiss hiss Hisss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hiss Hisss hisss
+Hissss hissss Hisss hiss Hiss hissssssss
+Hiss hisss Hiss hisssss Hisss hisss Hissss
+hiss Hisss hissss Hiss hisss Hisss hisssssss
+Hiss hisssss Hiss hisss Hisss hiss Hiss hiss
+Hiss hisss Hisss hissss Hiss hiss Hissss
+hiss Hiss hiss Hiss hisss Hisss hiss Hisss
+hissss Hisss hissss Hiss hiss Hissss hisss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hisss hisss Hissss hissss Hiss hiss
+Hissss hiss Hiss hisssss Hisss hisss Hiss
+hisss Hissss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hisssss hiss Hisss hisss Hisss
+hisss Hisss hisssssss Hiss hisss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hiss hiss
+Hissss hissss Hisss hiss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisss Hiss hiss Hisss
+hiss Hiss hiss Hisss hiss Hiss hisssss Hisss
+hiss Hisss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisssssss Hiss hisss Hisss hissss
+Hisss hiss Hisssss hiss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hisss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisss
+Hissss hiss Hisss hissss Hiss hiss Hissss
+hiss Hisss hisss Hissss hisss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hiss hisss Hiss hiss Hisss hisss Hisss hisss
+Hisss hisssssss Hiss hissssss Hiss hiss Hiss
+hisssss Hiss hisss Hiss hisssss Hiss hisss
+Hisss hiss Hiss hisssss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissss Hisssssss
+hisssssss Hiss hisss Hiss hiss Hisss hiss
+Hisss hissss Hisss hiss Hiss hisss Hisssss
+hiss Hiss hisssss Hissss hiss Hiss hisss
+Hiss hiss Hiss hiss Hiss hissss Hissss hiss
+Hiss hissss Hiss hiss Hiss hiss Hiss hisssss
+Hissss hiss Hiss hisss Hiss hiss Hiss hiss
+Hiss hisss Hisssss hiss Hiss hisssss Hisss
+hiss Hiss hisss Hiss hisss Hiss hiss Hiss
+hissssssss Hiss hisss Hisss hiss Hisssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisss
+hisss Hissss hissss Hisss hiss Hiss hisss
+Hisssss hiss Hiss hisssss Hissss hiss Hiss
+hisss Hiss hiss Hiss hiss Hiss hissss Hissss
+hiss Hiss hissss Hiss hiss Hiss hiss Hiss
+hisssss Hissss hiss Hiss hisss Hiss hiss
+Hiss hiss Hiss hisss Hisssss hiss Hiss hisssss
+Hisss hiss Hiss hisss Hisssss hiss Hiss hissss
+Hiss hiss Hiss hiss Hiss hissssssss Hiss
+hissss Hiss hiss Hiss hiss Hiss hisss Hisssss
+hiss Hiss hisssss Hisss hiss Hiss hisss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisssssss Hiss hisss Hiss hiss Hiss hisss
+Hisss hissss Hisss hiss Hisss hiss Hisss
+hisss Hissss hiss Hiss hisss Hiss hiss Hisss
+hisss Hisss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisssss
+Hiss hisss Hisss hiss Hiss hisssss Hisss
+hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hiss
+hiss Hisss hiss Hisss hissss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hisssss Hissss hiss
+Hiss hisss Hiss hiss Hiss hiss Hiss hisssss
+Hisss hiss Hiss hisss Hiss hisss Hiss hiss
+Hiss hissssssss Hiss hisss Hisss hiss Hisssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hisss hissss Hisss hiss Hisssss
+hiss Hisss hiss Hiss hiss Hisss hiss Hisss
+hiss Hiss hiss Hisss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hisss
+Hiss hiss Hisssss hissssssss Hiss hisss Hiss
+hissss Hisss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisss
+hisss Hissss hissss Hisss hiss Hiss hisss
+Hisssss hiss Hiss hisssss Hissss hiss Hiss
+hisss Hiss hiss Hiss hiss Hiss hissss Hissss
+hiss Hiss hissss Hiss hiss Hiss hiss Hiss
+hisssss Hisss hiss Hiss hisss Hisssss hiss
+Hiss hissss Hiss hiss Hiss hiss Hiss hisssss
+Hisss hiss Hiss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hissssss hisss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisss Hissss hiss Hiss hiss
+Hiss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hissss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hiss Hiss hiss Hiss hisss
+Hisss hissss Hiss hisss Hisss hisssssss Hiss
+hisssss Hiss hiss Hissss hiss Hisssss hiss
+Hisss hisssssss Hiss hisss Hiss hiss Hisss
+hiss Hisss hiss Hiss hisssss Hisss hissss
+Hiss hiss Hissss hiss Hisss hissss Hisss
+hisssss Hiss hiss Hisss hisssssss Hiss hisssss
+Hiss hiss Hissss hisssss Hiss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hissss hisss Hisss hiss Hisss
+hisss Hissss hisssssss Hiss hisssss Hisss
+hiss Hisss hiss Hiss hisss Hiss hiss Hisss
+hiss Hisss hiss Hiss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissssssss Hiss hisss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hisss hisss Hisss hiss Hisssss hiss Hisss
+hiss Hisssss hiss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hisss hiss Hiss hisssss Hisss hisss Hiss
+hisss Hissss hissss Hisss hiss Hiss hissssssss
+Hiss hissss Hiss hissss Hisss hiss Hisssss
+hiss Hisss hiss Hisssss hiss Hisss hissss
+Hisss hiss Hisss hisssssss Hiss hisss Hissss
+hiss Hissss hiss Hiss hisss Hiss hiss Hisss
+hisss Hiss hiss Hisssss hisss Hiss hiss Hisssss
+hiss Hiss hisss Hiss hiss Hiss hisss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissssssss Hiss hissss Hisss
+hisss Hisss hiss Hisssss hiss Hisss hiss
+Hisssss hiss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hissss Hiss hissss Hisss hiss
+Hiss hisssss Hisss hisss Hiss hisss Hissss
+hissss Hisss hiss Hiss hissssssss Hiss hisss
+Hissss hiss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hiss hiss Hisssss hisss Hiss
+hiss Hisssss hiss Hiss hisss Hiss hiss Hiss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissss Hiss hissss Hisss
+hiss Hiss hiss Hiss hiss Hissss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hissss
+hiss Hisss hiss Hisssss hiss Hisss hissss
+Hiss hiss Hissss hisssssss Hiss hisss Hiss
+hiss Hisss hiss Hisss hiss Hiss hisssss Hisss
+hissss Hiss hiss Hissss hiss Hisss hissss
+Hisss hisssss Hiss hiss Hisss hisssssss Hiss
+hisssss Hiss hiss Hissss hisssss Hiss hiss
+Hisss hiss Hiss hisss Hiss hiss Hisss hisss
+Hissss hiss Hisss hiss Hissss hisss Hisss
+hiss Hisss hisss Hissss hisssssss Hiss hisssss
+Hisss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hissssssss Hiss hisssss Hiss hiss Hissss
+hiss Hiss hisss Hisssss hissssss Hissss hiss
+Hiss hiss Hiss hisss Hisss hissss Hiss hisss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisss
+Hisss hisss Hisss hisssssss Hiss hisss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissssss
+Hiss hiss Hiss hissss Hiss hiss Hiss hiss
+Hiss hissss Hisss hisss Hisss hiss Hisssss
+hiss Hisss hiss Hisssss hiss Hisss hiss Hiss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissss Hiss hissss Hisss hiss Hiss hisssss
+Hisss hisss Hiss hisss Hissss hisssssss Hiss
+hisss Hissss hiss Hissss hiss Hiss hisss
+Hiss hiss Hisss hisss Hiss hiss Hisssss hisss
+Hiss hiss Hisssss hiss Hiss hisss Hiss hiss
+Hiss hissss Hiss hiss Hiss hissssssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hissss hiss Hissss hiss Hiss hiss Hiss
+hisss Hisss hisssssss Hiss hisss Hisss hissss
+Hisss hiss Hiss hisssss Hisss hisss Hissss
+hiss Hisss hiss Hissss hisss Hiss hisssss
+Hiss hiss Hissss hisssssss Hiss hisssss Hiss
+hisss Hisss hiss Hisssss hiss Hisss hisssssss
+Hiss hisssss Hiss hiss Hissss hisssss Hiss
+hiss Hisss hiss Hiss hisss Hiss hiss Hisss
+hiss Hisss hisss Hissss hisssssss Hiss hissssss
+Hiss hiss Hiss hisss Hiss hiss Hiss hisss
+Hisss hisss Hisss hisss Hisss hisss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hiss Hisss hissss Hisss hiss Hiss hisss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hissss hiss Hisss hissss Hiss hiss
+Hissss hissss Hisss hiss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hisss Hiss hiss Hiss
+hissssssss Hiss hisss Hissss hiss Hissss
+hiss Hiss hisss Hiss hiss Hisss hissss Hiss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hisssss hiss Hisss hiss Hiss hiss Hiss hiss
+Hissss hissss Hiss hiss Hissss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hiss hiss Hisss hiss Hisss hiss Hiss
+hisss Hiss hiss Hisss hiss Hisss hisss Hissss
+hiss Hisss hisss Hissss hiss Hiss hisss Hiss
+hiss Hisss hisss Hissss hiss Hisss hiss Hissss
+hisss Hisss hisssssss Hiss hisssss Hiss hiss
+Hissss hisssss Hiss hiss Hisss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hiss Hissss hisss Hisss hiss Hisss hisss
+Hissss hisssssss Hiss hisssss Hisss hiss
+Hisss hiss Hiss hisss Hiss hiss Hisss hiss
+Hisss hiss Hiss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hissssssss Hiss hissss Hisss hisss Hisss
+hiss Hisssss hiss Hisss hiss Hisssss hiss
+Hisss hisssssss Hiss hissssss Hiss hiss Hiss
+hissss Hiss hiss Hiss hiss Hiss hissss Hiss
+hissss Hisss hiss Hiss hisssss Hisss hisss
+Hiss hisss Hissss hissss Hisss hiss Hiss
+hissssssss Hiss hisss Hissss hiss Hissss
+hiss Hiss hisss Hiss hiss Hisss hisss Hiss
+hiss Hisssss hisss Hiss hiss Hisssss hiss
+Hiss hisss Hiss hiss Hiss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hissss hiss Hiss hiss Hiss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisss
+Hiss hisssss Hisss hissss Hisss hiss Hisss
+hiss Hisss hisss Hissss hiss Hisssss hiss
+Hisss hisssssss Hiss hisssss Hiss hisss Hisss
+hiss Hisssss hiss Hisss hisss Hissss hiss
+Hisss hiss Hissss hisss Hiss hisssss Hiss
+hiss Hissss hisssssss Hiss hisss Hissss hiss
+Hissss hiss Hiss hisssss Hisss hisss Hissss
+hiss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisssss Hiss hiss Hissss hiss Hisssss
+hiss Hisss hisssssss Hiss hisss Hisss hisss
+Hissss hissssss Hissss hiss Hisssss hiss
+Hisss hiss Hiss hisss Hiss hiss Hisss hissss
+Hisss hiss Hisss hisssssss Hiss hisssss Hiss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hisssss Hiss hisss Hiss hisssss Hiss hisss
+Hisss hiss Hiss hisssss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hisss hisss Hissss hiss Hisssss
+hiss Hisss hisssssss Hiss hisss Hiss hisss
+Hiss hiss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hisss hissss Hisss hiss Hiss hisssss
+Hisss hisss Hissss hiss Hisss hisssssss Hiss
+hissss Hiss hissss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisssssss Hiss hisss Hiss hiss
+Hiss hiss Hissss hiss Hisss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hissss Hiss
+hisss Hisss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisssss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisss
+Hiss hisss Hissss hisssssss Hiss hisss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hisss
+Hissss hiss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hiss Hissss hiss Hiss hiss Hisss
+hiss Hisss hissssss Hissss hissss Hiss hisss
+Hisss hiss Hiss hisssss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisssss Hiss hisss Hiss hisssss Hiss hisss
+Hisss hiss Hiss hisssss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hiss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hissss hiss Hissss
+hisssss Hiss hiss Hisss hiss Hiss hisss Hiss
+hiss Hisss hissss Hisss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisssss
+Hiss hiss Hissss hiss Hiss hiss Hisss hiss
+Hisss hissssss Hissss hissss Hiss hisss Hisss
+hiss Hiss hisssss Hisss hissss Hiss hiss
+Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissss Hisssssss
+hisssssss Hiss hisss Hisssss hiss Hiss hissssss
+Hiss hiss Hiss hisssss Hissss hiss Hiss hiss
+Hissss hiss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hisssss
+Hissss hiss Hiss hiss Hisss hisss Hissss
+hissss Hissss hiss Hiss hisssss Hiss hiss
+Hiss hissssss Hiss hiss Hiss hisss Hisssssss
+hisss Hiss hisssss Hiss hisssss Hissss hiss
+Hiss hisss Hiss hiss Hiss hiss Hiss hisss
+Hiss hisss Hiss hiss Hiss hisss Hisssss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hisss
+hiss Hisss hiss Hiss hisss Hisssss hisssssss
+Hiss hisssss Hiss hisss Hiss hisss Hisss
+hiss Hiss hiss Hisss hiss Hissss hiss Hissss
+hisssssss Hiss hisss Hiss hiss Hisssss hissssssss
+Hiss hisssss Hiss hisss Hiss hisss Hiss hissss
+Hisss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hisss Hiss
+hissssss Hiss hissss Hisss hiss Hisss hissss
+Hisss hiss Hisss hiss Hisssss hiss Hisss
+hiss Hissss hiss Hissss hisssssss Hiss hisss
+Hisss hisss Hissss hissssss Hissss hiss Hiss
+hisssss Hisss hiss Hisss hissss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hisss Hiss hisssss Hisss hisss Hisss hisss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisss Hiss hisss Hissss
+hisssssss Hiss hisss Hisss hiss Hiss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hisss Hisssss hiss Hissss hiss Hissss
+hiss Hisssss hiss Hisss hisss Hiss hisss
+Hissss hissss Hiss hisss Hisss hiss Hisss
+hisss Hissss hisssssss Hiss hisss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hissss
+Hisss hiss Hisss hiss Hiss hisss Hisssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisss Hisss hiss Hiss hiss Hisss
+hiss Hissss hiss Hissss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hisssss hiss Hiss hissss Hisssss
+hiss Hiss hisssss Hiss hiss Hiss hisss Hiss
+hisss Hiss hiss Hisss hisss Hisss hisss Hisss
+hissss Hissssss hisss Hisss hisss Hisss hiss
+Hisssss hiss Hisss hisss Hiss hisss Hissss
+hissss Hissssss hiss Hissss hiss Hissss hisssss
+Hiss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hissss Hisss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hissss Hissssss hiss Hisss
+hisss Hissss hiss Hissss hiss Hissss hiss
+Hiss hisss Hiss hiss Hisss hissss Hiss hiss
+Hissss hiss Hisss hissss Hisss hisssss Hiss
+hiss Hisss hissss Hissssss hisss Hiss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hissss
+Hiss hiss Hissss hiss Hiss hiss Hiss hiss
+Hissss hisss Hiss hisss Hissss hisss Hissss
+hiss Hisss hiss Hiss hisss Hiss hiss Hiss
+hisssss Hiss hisss Hiss hisss Hisssss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hiss hiss Hissss
+hiss Hiss hiss Hisss hiss Hisss hissssss
+Hissss hissss Hiss hisss Hisss hiss Hiss
+hisssss Hisss hissss Hiss hiss Hissss hiss
+Hiss hisssss Hisss hisssssss Hiss hisss Hiss
+hiss Hisssss hissss Hisssssss hisssssss Hiss
+hisss Hisss hisss Hissss hiss Hisssss hiss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisss Hisss hiss Hiss hiss Hisss
+hiss Hissss hiss Hissss hissss Hissss hiss
+Hiss hiss Hisss hisss Hissss hissss Hissss
+hiss Hiss hisssss Hiss hiss Hiss hisss Hiss
+hisss Hiss hiss Hiss hisss Hisssss hiss Hiss
+hissssss Hisss hiss Hiss hisssss Hisss hiss
+Hiss hisssss Hisss hiss Hiss hisssss Hiss
+hiss Hiss hisss Hisssss hiss Hiss hisss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hiss hiss Hissssss hisssssss Hiss hisss Hiss
+hiss Hiss hisss Hisss hissss Hisss hiss Hisss
+hiss Hisss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hisssssss Hiss hisss Hisss hiss
+Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssssss Hissss hisss Hiss hisss Hissss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hissss Hiss hissss Hiss hisss Hissss
+hiss Hiss hiss Hiss hisssss Hiss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hissss Hiss
+hiss Hissss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hisss Hissss hissssss Hissss hiss
+Hiss hisssss Hisss hiss Hisss hissss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hisssss Hisss hisss Hisss
+hisss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hisss
+Hissss hisssssss Hiss hissss Hissss hiss
+Hisss hiss Hisssss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hisss hiss Hiss
+hisss Hisss hiss Hiss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hiss Hiss hisss Hisssss
+hiss Hissss hiss Hissss hiss Hisssss hiss
+Hisss hisss Hiss hisss Hissss hissss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hissss hiss Hiss hisss Hissss hiss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hisssss Hiss hisss Hiss
+hissss Hisss hisss Hisss hiss Hiss hisss
+Hiss hiss Hisss hissss Hisss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hiss
+Hissss hisssss Hiss hisss Hiss hissss Hissss
+hiss Hiss hissss Hiss hiss Hissss hissssssss
+Hiss hisssss Hiss hisss Hiss hisssss Hisss
+hiss Hisss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hissss Hiss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssss Hiss hisss Hiss hissss Hiss
+hisss Hissss hiss Hiss hiss Hiss hisss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hisss
+Hiss hiss Hisssss hissssssss Hiss hisss Hiss
+hissss Hisss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hisss hiss Hisss hiss Hiss hisssss Hisss
+hiss Hisss hisss Hissss hissss Hiss hiss
+Hissss hiss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hissssss hisss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissss Hiss hisss Hiss hiss
+Hiss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hissss Hissss hiss Hiss hiss Hiss hiss
+Hissss hiss Hiss hisss Hiss hiss Hisss hisss
+Hiss hisss Hissss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hisss Hissss hiss Hissss
+hisssss Hiss hiss Hisss hiss Hiss hisss Hiss
+hiss Hisss hissss Hiss hiss Hissss hiss Hiss
+hiss Hiss hisss Hisss hiss Hisss hisss Hissss
+hissssss Hissss hiss Hiss hisssss Hisss hiss
+Hisss hissss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hiss Hiss hiss Hisss hiss Hisss
+hiss Hiss hiss Hisss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hissss Hiss hisss Hisss
+hiss Hiss hisss Hiss hiss Hisss hiss Hiss
+hisssss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hissss Hisss hiss
+Hisss hiss Hiss hisss Hisssss hisssssss Hiss
+hisss Hiss hisssss Hisss hisss Hisss hisss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisss Hiss hisss Hissss
+hisssssss Hiss hisss Hisss hiss Hiss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hisss Hisssss hiss Hissss hiss Hissss
+hiss Hisssss hiss Hisss hisss Hiss hisss
+Hissss hissss Hiss hisss Hisss hiss Hisss
+hisss Hissss hissss Hisss hiss Hiss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hissss Hiss hissss Hisss hiss Hiss hiss Hiss
+hiss Hissss hissss Hiss hiss Hissss hisssssss
+Hiss hissss Hissss hiss Hisss hiss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisss
+Hiss hisssss Hisss hisss Hisss hisss Hisss
+hissss Hiss hiss Hissss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hisss Hissss hisssssss
+Hiss hisssss Hiss hiss Hissss hisssss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hisss Hisssss hiss Hisss hissssss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisss
+Hissss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hissss
+hisss Hisss hisssssss Hiss hissss Hiss hissss
+Hisss hisss Hiss hisss Hissss hiss Hiss hisssss
+Hisss hiss Hisss hissss Hisss hiss Hisss
+hiss Hiss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hisss Hiss hiss Hisss hisss
+Hisss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisssss
+Hiss hisss Hisss hiss Hiss hisssss Hisss
+hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hisssss Hissss hiss Hiss hisss
+Hiss hissss Hisss hisssss Hiss hiss Hiss
+hisss Hiss hisss Hiss hiss Hisss hisss Hisss
+hisss Hisss hissss Hissssss hisss Hisss hisss
+Hisss hiss Hisssss hiss Hisss hisss Hiss
+hisss Hissss hissss Hissssss hiss Hissss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hisss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hissss
+Hissssss hiss Hisss hisss Hissss hiss Hissss
+hiss Hissss hiss Hiss hisss Hiss hiss Hisss
+hissss Hiss hiss Hissss hiss Hisss hissss
+Hisss hisssss Hiss hiss Hisss hissss Hissssss
+hisss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hiss Hissss hisss Hiss hisss
+Hissss hisss Hissss hiss Hisss hiss Hiss
+hisss Hiss hiss Hiss hisssss Hissss hiss
+Hiss hisssss Hiss hiss Hiss hisss Hisssss
+hiss Hiss hissssssss Hiss hisssss Hissssss
+hissss Hissssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hiss hisss Hisss
+hiss Hiss hisssss Hisss hissss Hiss hiss
+Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissss Hisssssss
+hisssssss Hiss hisss Hisssss hiss Hiss hisssss
+Hissss hiss Hiss hisss Hiss hissss Hisss
+hisssss Hiss hiss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hissss
+Hissssss hisss Hisss hisss Hisss hiss Hisssss
+hiss Hisss hisss Hiss hisss Hissss hissss
+Hissssss hiss Hissss hiss Hissss hisssss
+Hiss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hissss Hisss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hissss Hissssss hiss Hisss
+hisss Hissss hiss Hissss hiss Hissss hiss
+Hiss hisss Hiss hiss Hisss hissss Hiss hiss
+Hissss hiss Hisss hissss Hisss hisssss Hiss
+hiss Hisss hissss Hissssss hisss Hiss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hissss
+Hiss hiss Hissss hiss Hiss hiss Hiss hiss
+Hissss hisss Hiss hisss Hissss hisss Hissss
+hiss Hisss hiss Hiss hisss Hiss hiss Hiss
+hisssss Hissss hiss Hiss hiss Hisss hisss
+Hissss hiss Hisss hiss Hiss hiss Hiss hisssss
+Hissss hiss Hiss hisssss Hiss hiss Hiss hisssss
+Hissss hiss Hiss hiss Hisss hisss Hissss
+hiss Hisssss hiss Hiss hisss Hiss hisss Hiss
+hiss Hiss hissssssss Hiss hisss Hisss hiss
+Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hissss Hissss hisss Hiss
+hiss Hisssss hiss Hisss hisssssss Hiss hisss
+Hissss hiss Hissss hisssss Hiss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hissss Hiss
+hiss Hissss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hisss Hissss hissssss Hissss hiss
+Hiss hisssss Hisss hiss Hisss hissss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hisssss Hisss hisss Hisss
+hisss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hisss
+Hissss hisssssss Hiss hisss Hisss hiss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hiss Hiss hisss Hisssss hiss Hissss hiss
+Hissss hiss Hisssss hiss Hisss hisss Hiss
+hisss Hissss hissss Hiss hisss Hisss hisss
+Hiss hiss Hissss hisssss Hissss hiss Hiss
+hisss Hissss hiss Hisss hisss Hiss hissss
+Hiss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hiss hisss Hiss hissss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissss
+Hisss hissss Hiss hiss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisss Hiss hissss
+Hisss hiss Hiss hisss Hiss hiss Hisss hissss
+Hiss hisss Hisss hisssssss Hiss hisss Hissss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hissssss Hissss hiss Hiss
+hisssss Hisss hiss Hisss hissss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hissss Hiss hissss Hisss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hiss
+Hissss hiss Hissss hiss Hiss hiss Hiss hisss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisss
+Hissss hiss Hisss hisssssss Hiss hisss Hiss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssss Hiss hisss Hisssss hiss Hisss
+hisss Hisss hisss Hisss hisssssss Hiss hisss
+Hiss hisssss Hisss hisssssss Hiss hissss
+Hisss hisss Hisss hiss Hiss hiss Hiss hiss
+Hissss hisss Hissss hiss Hisss hiss Hisss
+hissss Hisss hissss Hiss hiss Hissss hiss
+Hiss hisss Hiss hiss Hisss hiss Hisssss hiss
+Hisss hisss Hissss hiss Hisss hisssssss Hiss
+hisssss Hiss hiss Hissss hiss Hiss hisss
+Hisssss hissssss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hisss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hisss hisss
+Hisss hisss Hiss hiss Hiss hissssssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hisssss hiss Hiss hisssss Hissss
+hiss Hiss hisssss Hiss hiss Hiss hisssss
+Hissss hiss Hiss hisss Hiss hiss Hiss hiss
+Hiss hisssss Hissss hiss Hiss hiss Hissss
+hiss Hissss hiss Hisss hiss Hiss hiss Hiss
+hisssss Hissss hiss Hiss hiss Hiss hisss
+Hiss hiss Hiss hisssss Hissss hiss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisssss Hissss hiss Hiss hisssss Hiss
+hiss Hiss hisss Hisssss hiss Hiss hisss Hiss
+hisss Hiss hiss Hiss hissssssss Hiss hisss
+Hisss hiss Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hisss Hissss hiss Hiss hiss
+Hiss hisssss Hiss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hiss Hisss hisss
+Hissss hissssss Hissss hiss Hiss hisssss
+Hisss hiss Hisss hissss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisssssss Hiss hissss Hiss
+hissss Hisss hiss Hiss hiss Hiss hisss Hisss
+hissss Hiss hiss Hissss hiss Hissss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hisssssss Hiss hisss Hissss hisss Hiss
+hisss Hiss hisss Hiss hiss Hiss hisss Hissss
+hisss Hiss hissssssss Hiss hisss Hiss hisssss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hisss Hisss hisssssss Hiss hisss Hissss hisss
+Hiss hissssss Hiss hiss Hiss hisss Hissss
+hisss Hiss hissss Hiss hiss Hissss hisssss
+Hissss hiss Hiss hisss Hissss hiss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hiss hisss Hiss hissss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissss
+Hisss hissss Hiss hiss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisss Hiss hissss
+Hisss hiss Hiss hisss Hiss hiss Hisss hissss
+Hiss hisss Hisss hisssssss Hiss hisss Hissss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hissssss Hissss hiss Hiss
+hisssss Hisss hiss Hisss hissss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hissss Hisss hisss Hisss hiss Hisssss hiss
+Hisss hissss Hisss hiss Hisss hissss Hisss
+hiss Hisss hiss Hisssss hiss Hisss hiss Hissss
+hiss Hissss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hissss hisss
+Hisss hisssssss Hiss hissssss Hiss hiss Hiss
+hissssssss Hiss hisss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hiss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hisssss
+Hiss hiss Hissss hiss Hisssss hiss Hisss
+hisssssss Hiss hisss Hiss hisss Hiss hiss
+Hiss hissss Hiss hiss Hiss hissssssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hisssss hiss Hiss hisssss Hissss
+hiss Hiss hiss Hisss hisss Hiss hiss Hiss
+hissss Hissss hiss Hiss hiss Hisss hisss
+Hissss hiss Hisss hiss Hiss hiss Hiss hisssss
+Hissss hiss Hiss hiss Hiss hisss Hiss hiss
+Hiss hisss Hisssss hiss Hiss hissssssss Hiss
+hisssss Hissssss hissss Hissssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hisssss Hissss hiss Hiss hisssss
+Hiss hiss Hiss hisssss Hissss hiss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisssss Hissss hiss Hiss hiss Hisss
+hisss Hiss hiss Hiss hiss Hisssss hiss Hiss
+hisss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisss Hissss hiss Hiss hiss Hiss hisssss
+Hiss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hiss Hisss hisss Hissss
+hissssss Hissss hiss Hiss hisssss Hisss hiss
+Hisss hissss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hisss Hiss hisssss Hisss
+hisss Hisss hisss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisss
+Hiss hisss Hissss hisssssss Hiss hisss Hissss
+hisss Hiss hissssss Hiss hiss Hiss hisss
+Hissss hisss Hiss hissssssss Hiss hisss Hisssss
+hiss Hisss hisss Hiss hisss Hissss hisssssss
+Hiss hissss Hiss hissss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisss Hisss hisss Hisss
+hiss Hisssss hiss Hisss hisss Hiss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hissss hisss Hiss hisss Hiss hisss
+Hiss hiss Hiss hisss Hissss hisss Hiss hissss
+Hiss hiss Hissss hisssss Hissss hiss Hiss
+hisss Hissss hiss Hisss hisss Hiss hissss
+Hiss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hiss hisss Hiss hissss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissss
+Hisss hissss Hiss hiss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisss Hiss hissss
+Hisss hiss Hiss hisss Hiss hiss Hisss hissss
+Hiss hisss Hisss hisssssss Hiss hisss Hissss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hissssss Hissss hiss Hiss
+hisssss Hisss hiss Hisss hissss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hissss Hiss hissss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hisss hisss Hisss hiss
+Hisssss hiss Hisss hisss Hiss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hissss Hiss hissss Hiss hisss Hisss
+hiss Hissss hissss Hiss hissss Hiss hissssssss
+Hiss hisss Hisssss hiss Hisss hisss Hiss
+hisss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hisss hiss Hiss hissss Hiss
+hissss Hiss hissss Hissss hiss Hiss hissssssss
+Hiss hisssss Hiss hiss Hiss hiss Hiss hisssss
+Hiss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hissss
+hisss Hisss hiss Hisss hisss Hissss hisssssss
+Hiss hisssss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hiss Hisss hiss Hiss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hissss Hiss hissss Hisss hiss Hiss hiss
+Hiss hisss Hisss hissss Hisss hiss Hisss
+hiss Hisssss hiss Hisss hiss Hissss hiss
+Hissss hisssssss Hiss hisss Hiss hisssss
+Hisss hisss Hiss hisss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisssssss Hiss hisss Hiss
+hisssss Hisss hissss Hisss hiss Hisss hissss
+Hisss hiss Hisss hiss Hisssss hiss Hisss
+hiss Hissss hiss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hisss Hisss hisss
+Hiss hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hiss hisss
+Hiss hiss Hiss hissssssss Hiss hisssss Hiss
+hiss Hiss hiss Hiss hisssss Hiss hiss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hiss Hiss hisss Hisss hisssss
+Hisssss hissssss Hissss hisss Hiss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hiss Hisss hisss Hissss
+hiss Hiss hisss Hiss hiss Hisss hiss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hisssssss
+Hiss hisss Hiss hisss Hiss hiss Hisss hiss
+Hisss hisss Hissss hisssssss Hiss hisss Hiss
+hiss Hiss hisss Hisss hiss Hiss hiss Hisss
+hiss Hisss hissssss Hissss hissss Hiss hiss
+Hissss hiss Hiss hisss Hisssss hisssssss
+Hiss hissss Hisss hisss Hisss hiss Hisssss
+hiss Hisss hisss Hiss hisss Hissss hisssssss
+Hiss hissss Hiss hissss Hiss hissss Hisss
+hisss Hisss hiss Hisssss hiss Hisss hisss
+Hiss hisss Hissss hisss Hiss hissss Hiss
+hissssssss Hiss hisssss Hisss hiss Hisss
+hiss Hisssss hiss Hisss hiss Hisssss hiss
+Hisss hissssss Hissss hisss Hissss hiss Hiss
+hissssssss Hiss hisss Hiss hiss Hiss hissss
+Hiss hisss Hissss hiss Hiss hisss Hissss
+hisss Hisss hisss Hissss hiss Hiss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissss Hisss
+hisss Hisss hiss Hisssss hiss Hisss hisss
+Hiss hisss Hissss hisssssss Hiss hissssss
+Hiss hiss Hiss hisss Hiss hisss Hiss hiss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissssssss Hiss hisssssss Hisss hisss Hisss
+hiss Hissss hissssssss Hiss hisss Hisss hiss
+Hissss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hiss Hiss hiss Hiss hisss Hiss
+hisss Hiss hiss Hiss hissss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissss Hiss hisss Hisss hisss
+Hiss hisss Hiss hiss Hiss hissssssss Hiss
+hisss Hiss hissssss Hiss hisss Hissss hiss
+Hisss hisssssss Hiss hisss Hiss hiss Hiss
+hisss Hisss hiss Hiss hiss Hisss hiss Hisss
+hissssss Hissss hissss Hiss hiss Hissss hiss
+Hiss hisss Hisssss hisssssss Hiss hisss Hisss
+hisss Hissss hissss Hiss hiss Hissss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hiss Hiss hisss Hisss hiss Hiss
+hiss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hissss hiss Hisss hissss
+Hiss hiss Hissss hisss Hissss hiss Hiss hissssssss
+Hiss hisss Hiss hiss Hiss hissss Hiss hisss
+Hissss hiss Hiss hisss Hissss hisss Hisss
+hisss Hissss hiss Hiss hissss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hissss hiss Hissss
+hisssss Hiss hiss Hisss hiss Hiss hisss Hiss
+hiss Hisss hissss Hisss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisss Hissss hiss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisssss Hiss hiss Hiss hisss
+Hisss hisss Hissss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hiss Hissss hiss
+Hisss hisss Hissss hiss Hissss hiss Hissss
+hisss Hiss hisss Hissss hiss Hiss hisss Hiss
+hiss Hisss hissss Hiss hiss Hissss hiss Hiss
+hiss Hiss hisss Hisss hissss Hisss hiss Hiss
+hissssssss Hiss hissss Hisss hisss Hiss hisss
+Hisss hisss Hissss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hiss Hissss hiss
+Hisss hisss Hissss hissss Hisss hiss Hiss
+hissssssss Hiss hisss Hiss hissss Hisss hisss
+Hiss hisss Hiss hiss Hiss hissssssss Hiss
+hisss Hiss hiss Hisssss hisss Hiss hiss Hisssss
+hissssssss Hiss hisss Hiss hiss Hisss hiss
+Hiss hisss Hiss hissss Hisss hissssssss Hiss
+hissss Hisss hisss Hiss hissss Hisss hisss
+Hiss hissss Hiss hiss Hiss hissssssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hiss
+hisss Hisss hisss Hiss hisss Hissss hisss
+Hiss hisss Hissss hisss Hissss hiss Hisss
+hiss Hisssss hiss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hisss Hiss hiss Hisssss
+hissssssss Hiss hisss Hiss hiss Hiss hissss
+Hiss hiss Hiss hisss Hiss hisss Hiss hisss
+Hissss hisss Hiss hissss Hiss hiss Hiss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hiss
+Hiss hisss Hiss hiss Hiss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hisss Hiss hiss Hisss hisss
+Hisss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisssss
+Hiss hisss Hisss hiss Hiss hisssss Hisss
+hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hisss Hisss hiss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hiss Hisss hiss Hissss
+hisssss Hissss hiss Hiss hiss Hisss hisss
+Hissss hiss Hiss hiss Hissss hiss Hiss hissss
+Hissss hiss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hiss Hiss hiss Hisss hiss Hissss
+hisssss Hisss hiss Hiss hisss Hiss hiss Hissss
+hiss Hiss hiss Hisssss hiss Hiss hisss Hiss
+hisss Hiss hiss Hiss hissssssss Hiss hisss
+Hisss hiss Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hisss Hissss hiss Hiss hiss
+Hiss hisssss Hiss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hiss Hisss hisss
+Hissss hissssss Hissss hiss Hiss hisssss
+Hisss hiss Hisss hissss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisssssss Hiss hissss Hiss
+hissss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hisss hisss Hisss hiss Hisssss hiss
+Hisss hisss Hiss hisss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hiss hiss Hiss hisss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hiss Hiss hisss Hiss hiss Hiss hisss
+Hisss hissss Hisss hiss Hisssss hiss Hisss
+hissss Hisss hiss Hisss hiss Hisssss hiss
+Hisss hisss Hissss hiss Hisss hisss Hiss
+hiss Hissss hisssss Hissss hiss Hiss hisss
+Hissss hiss Hisss hisss Hiss hissss Hiss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssssss Hissss hisss Hiss hisss Hissss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hissss Hiss hissss Hiss hisssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hisss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisss
+Hiss hiss Hissss hisssss Hiss hisss Hiss
+hissss Hissss hiss Hiss hissss Hiss hiss
+Hissss hissssssss Hiss hisssss Hiss hisss
+Hiss hisssss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hissss
+Hiss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissss
+Hiss hisss Hiss hiss Hiss hiss Hiss hiss
+Hiss hisss Hisss hiss Hiss hissss Hissss
+hiss Hiss hiss Hiss hiss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hiss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hiss Hiss hissss Hiss hiss
+Hisssss hisss Hiss hissss Hisss hisss Hiss
+hissss Hisss hiss Hiss hissssssss Hiss hisss
+Hiss hiss Hisss hiss Hisss hiss Hiss hisssss
+Hisss hiss Hisss hissss Hisss hisss Hiss
+hisss Hissss hiss Hisssss hiss Hisss hisssssss
+Hiss hisssss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hisss Hisss hissss Hisss hiss Hisssss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hiss hiss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hissss
+Hiss hiss Hissss hiss Hiss hisss Hiss hiss
+Hisss hiss Hisssss hiss Hisss hisss Hissss
+hiss Hisss hissss Hisss hiss Hiss hissssssss
+Hiss hisss Hisssss hiss Hisss hisss Hiss
+hisss Hissss hisssssss Hiss hisss Hissss
+hiss Hissss hisssss Hiss hiss Hisss hiss
+Hiss hisss Hiss hiss Hisss hissss Hiss hiss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hissssss Hissss hiss Hiss
+hisssss Hisss hiss Hisss hissss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hisss Hiss hisssss Hisss hisss Hisss hisss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisss Hiss hisss Hissss
+hisssssss Hiss hissss Hiss hissss Hiss hisss
+Hisss hiss Hissss hissss Hiss hissss Hiss
+hissss Hissss hiss Hiss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hisss Hiss
+hissssss Hiss hissss Hisss hiss Hisss hissss
+Hisss hiss Hisss hiss Hisssss hiss Hisss
+hiss Hissss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hissss Hisss hisss Hisss
+hiss Hisssss hiss Hisss hisss Hiss hisss
+Hissss hisssssss Hiss hissssss Hiss hiss
+Hiss hisss Hisss hiss Hissss hisss Hisss
+hiss Hissss hisss Hiss hisss Hiss hiss Hiss
+hissss Hiss hissss Hiss hissssssss Hiss hisss
+Hiss hisssss Hisss hiss Hisss hisss Hissss
+hisssssss Hiss hisss Hiss hisssss Hisss hisss
+Hissss hiss Hisss hisssssss Hiss hisss Hiss
+hiss Hiss hisss Hisss hisssss Hisssss hiss
+Hisss hissss Hisss hiss Hiss hiss Hiss hisss
+Hisss hissssss Hissss hissss Hiss hiss Hissss
+hiss Hiss hisss Hiss hiss Hisss hiss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hisss
+Hissss hiss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hisssss hiss Hiss hisss Hisss
+hiss Hissss hisss Hisss hiss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hiss Hiss hisss Hiss
+hissssssssss Hiss hisssss Hissss hiss Hiss
+hissss Hissss hiss Hiss hissss Hissss hiss
+Hiss hisss Hissss hiss Hisss hiss Hisss hiss
+Hissss hisss Hiss hisss Hiss hiss Hiss hisss
+Hiss hiss Hissss hiss Hiss hiss Hisssss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisss Hiss hisss Hiss hisss Hiss hisss
+Hissss hiss Hisss hisss Hisss hiss Hissss
+hiss Hiss hisssss Hisss hissss Hisss hiss
+Hisss hiss Hiss hisss Hiss hiss Hisss hissss
+Hiss hisss Hisss hisssssss Hiss hisss Hisss
+hissss Hisss hisssss Hiss hiss Hisss hiss
+Hiss hisssss Hisss hisss Hiss hisss Hissss
+hiss Hiss hisssss Hisss hiss Hisss hissss
+Hisss hissss Hiss hiss Hissss hiss Hiss hiss
+Hiss hisss Hisss hisss Hiss hisss Hissss
+hisssssss Hiss hisss Hiss hisssss Hisss hisss
+Hisss hisss Hisss hissss Hiss hiss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisss Hiss
+hisss Hissss hisssssss Hiss hisss Hisss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hiss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hiss Hisss hissss Hisss hiss
+Hisssss hiss Hisss hissss Hisss hiss Hisss
+hiss Hisssss hiss Hisss hisss Hissss hiss
+Hisss hisss Hiss hiss Hissss hisssss Hissss
+hiss Hiss hisss Hissss hiss Hisss hisss Hiss
+hissss Hiss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hiss hisss Hiss hissss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissss
+Hiss hisss Hiss hiss Hiss hiss Hiss hiss
+Hiss hisss Hisss hiss Hiss hissss Hissss
+hiss Hiss hiss Hiss hiss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hiss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hiss Hiss hissss Hiss hiss
+Hisssss hisss Hiss hissss Hisss hisss Hiss
+hissss Hisss hiss Hiss hissssssss Hiss hisss
+Hisss hisss Hissss hissssss Hissss hiss Hiss
+hisssss Hisss hiss Hisss hissss Hisss hiss
+Hiss hiss Hiss hisss Hisss hissss Hisss hiss
+Hiss hissssssss Hiss hisss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hisss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hiss
+Hiss hiss Hisss hiss Hisss hiss Hisssss hiss
+Hiss hisss Hisss hisss Hissss hissss Hiss
+hiss Hissss hisss Hiss hisss Hissss hiss
+Hiss hiss Hiss hiss Hissss hiss Hisss hissss
+Hisss hissss Hiss hiss Hissss hisssssss Hiss
+hisss Hiss hiss Hiss hisss Hisss hisss Hissss
+hiss Hisss hissss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hisssss Hisss hisss Hisss
+hisss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hisss
+Hissss hisssssss Hiss hisss Hisss hissss
+Hisss hiss Hisssss hiss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hisss hiss
+Hisss hiss Hiss hisssss Hisss hisss Hissss
+hiss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hisssss hiss Hiss hisssss Hisss
+hiss Hiss hisss Hisss hiss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hisssssss Hiss hisssss
+Hissss hiss Hiss hissss Hissss hiss Hiss
+hissss Hissss hiss Hiss hisss Hissss hiss
+Hisss hiss Hiss hisss Hiss hiss Hiss hisss
+Hiss hiss Hissssss hiss Hiss hiss Hissss
+hiss Hiss hiss Hisssss hiss Hiss hisss Hiss
+hisss Hiss hiss Hiss hissssssss Hiss hisss
+Hisss hiss Hisssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hisss Hiss hisss Hiss hisss
+Hiss hisss Hissss hiss Hisss hisss Hisss
+hiss Hissss hiss Hiss hisssss Hisss hissss
+Hisss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hissss Hiss hisss Hisss hisssssss Hiss
+hisss Hisss hissss Hisss hisssss Hiss hiss
+Hisss hiss Hiss hisssss Hisss hisss Hiss
+hisss Hissss hiss Hiss hisssss Hisss hiss
+Hisss hissss Hisss hissss Hiss hiss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisss Hiss
+hisss Hissss hisssssss Hiss hisss Hiss hisssss
+Hisss hisss Hisss hisss Hisss hissss Hiss
+hiss Hissss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hisss
+Hisss hissss Hisss hiss Hisssss hiss Hisss
+hiss Hiss hiss Hisss hiss Hisss hiss Hiss
+hiss Hisss hiss Hisss hiss Hiss hisssss Hisss
+hisss Hiss hiss Hissss hisssss Hissss hiss
+Hiss hisss Hissss hiss Hisss hisss Hiss hissss
+Hiss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hiss hisss Hiss hissss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hissss
+Hiss hisss Hiss hiss Hiss hiss Hiss hiss
+Hiss hisss Hisss hiss Hiss hissss Hissss
+hiss Hiss hiss Hiss hiss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hiss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hisss hisss Hissss hissssss Hissss
+hiss Hiss hisssss Hisss hiss Hisss hissss
+Hisss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hisssssss Hiss hisss Hiss
+hisssss Hisss hisss Hiss hisss Hissss hiss
+Hisssss hiss Hisss hiss Hiss hiss Hiss hiss
+Hissss hisss Hissss hiss Hisss hissss Hiss
+hisss Hisss hisssssss Hiss hisss Hiss hisssss
+Hisss hiss Hisss hisss Hissss hiss Hisss
+hisss Hissss hiss Hiss hisss Hiss hiss Hisss
+hiss Hissss hisss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hisss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hissss Hiss hiss Hissss hisssssss Hiss
+hisss Hissss hisss Hiss hisss Hiss hiss Hisssss
+hisss Hissss hisss Hiss hisssss Hisss hiss
+Hiss hissssssss Hiss hisss Hisss hissss Hisss
+hiss Hisssss hiss Hisss hiss Hiss hiss Hisss
+hiss Hisss hissssss Hissss hiss Hisssss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hisss
+Hissss hiss Hisss hissss Hiss hisss Hisss
+hiss Hisss hisss Hissss hisssssss Hiss hisss
+Hiss hisssss Hisss hisss Hissss hiss Hisss
+hissss Hiss hisss Hisss hisssssss Hiss hisss
+Hissss hisss Hiss hisss Hiss hiss Hisssss
+hisss Hiss hiss Hisssss hisss Hissss hisss
+Hiss hissss Hiss hiss Hiss hissssssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisss Hissss hiss Hissss
+hiss Hiss hisss Hiss hiss Hisss hissss Hiss
+hiss Hissss hisssss Hiss hiss Hisss hisssssss
+Hiss hisssss Hiss hiss Hissss hisssss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hisss Hiss hiss Hiss hisss
+Hisss hisssss Hisssss hiss Hisss hissss Hisss
+hiss Hiss hiss Hiss hisss Hisss hissssss
+Hissss hissss Hiss hiss Hissss hiss Hiss
+hisss Hiss hiss Hisss hiss Hisssss hiss Hisss
+hisss Hissss hiss Hisss hisssssss Hiss hisss
+Hisssss hiss Hisss hisss Hisss hisss Hisss
+hisssssss Hiss hissss Hisss hiss Hissss hiss
+Hiss hisss Hiss hiss Hisss hisss Hiss hisss
+Hissss hiss Hiss hissssss Hiss hiss Hisss
+hisss Hissss hiss Hisss hisss Hissss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hisss
+Hissss hissss Hiss hiss Hissss hiss Hisss
+hisssss Hiss hiss Hiss hiss Hisss hiss Hisss
+hissssss Hissss hiss Hiss hisss Hiss hisss
+Hiss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssss Hiss hiss Hiss hisss
+Hiss hisss Hiss hiss Hiss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hiss hiss Hissss
+hiss Hiss hiss Hisss hiss Hisss hissssss
+Hissss hissss Hiss hisss Hisss hiss Hiss
+hisssss Hisss hissss Hiss hiss Hissss hiss
+Hiss hisssss Hisss hisssssss Hiss hisss Hiss
+hiss Hisssss hissssssss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hiss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssss Hiss hisss Hiss hisssss Hiss
+hiss Hissss hiss Hiss hiss Hisss hiss Hisss
+hissssss Hissss hissss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hissss Hiss hiss Hissss
+hiss Hiss hisssss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissss Hisssssss hisssssss
+Hiss hisss Hisss hisss Hissss hiss Hisssss
+hiss Hiss hissssss Hiss hiss Hiss hissss
+Hisss hiss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hiss hisss Hissss hiss Hiss hissssss
+Hiss hiss Hisss hisss Hissss hiss Hisss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisss
+Hiss hisss Hissss hissss Hiss hiss Hissss
+hiss Hisss hisssss Hiss hiss Hiss hiss Hisss
+hiss Hisss hissssss Hissss hiss Hiss hisss
+Hiss hisss Hiss hisss Hissss hiss Hisss hissss
+Hiss hiss Hissss hissss Hissss hiss Hiss
+hisssss Hiss hiss Hiss hissss Hissss hiss
+Hiss hissss Hiss hiss Hiss hiss Hiss hissssssss
+Hiss hisss Hiss hisss Hiss hiss Hiss hissss
+Hissss hiss Hiss hisss Hisssssss hisss Hiss
+hiss Hisssss hisssss Hisss hiss Hiss hisss
+Hisssss hiss Hiss hisssss Hiss hisss Hiss
+hisss Hiss hissss Hisss hisss Hisssss hiss
+Hisss hissssss Hissss hissss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hisss Hiss
+hiss Hisss hisss Hisss hisss Hisss hisssssss
+Hiss hissssss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisssss Hiss hiss Hissss hiss
+Hiss hiss Hisss hiss Hisss hissssss Hissss
+hissss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hisss Hisss hiss Hisss hiss Hiss
+hisss Hisssss hiss Hiss hisssssss Hiss hisss
+Hiss hiss Hissss hiss Hiss hissss Hissss
+hiss Hiss hisss Hiss hissss Hisss hiss Hisss
+hiss Hisss hiss Hiss hiss Hiss hisssss Hiss
+hisssss Hisssss hissss Hissssss hissss Hisss
+hisss Hiss hisssss Hissssss hissss Hissss
+hiss Hiss hiss Hiss hiss Hisss hiss Hiss
+hisss Hisss hiss Hiss hiss Hiss hissss Hiss
+hiss Hiss hiss Hiss hisssss Hissss hiss Hiss
+hiss Hisssss hiss Hiss hisss Hiss hiss Hiss
+hisss Hiss hisssss Hissss hiss Hiss hisss
+Hisssss hiss Hiss hiss Hiss hiss Hisssss
+hisss Hiss hiss Hissss hiss Hiss hiss Hisssssss
+hisss Hiss hiss Hisssss hisss Hisss hiss
+Hisss hiss Hiss hisss Hisssss hiss Hiss hiss
+Hiss hiss Hisssss hisss Hiss hiss Hissss
+hiss Hiss hiss Hisssss hiss Hiss hissssssss
+Hiss hisssss Hissssss hissss Hissssss hisss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hiss Hissss hiss Hiss hiss Hisss
+hiss Hisss hissssss Hissss hissss Hiss hisss
+Hisss hiss Hiss hisssss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissss Hisssssss
+hisssssss Hiss hisss Hisssss hiss Hiss hisss
+Hiss hiss Hisssss hisss Hisss hiss Hisss
+hiss Hiss hisss Hisssss hiss Hiss hiss Hiss
+hiss Hisssss hissssssss Hiss hisssss Hissss
+hiss Hiss hissss Hissss hiss Hiss hissss
+Hissss hiss Hiss hisss Hissss hiss Hisss
+hiss Hiss hiss Hissss hiss Hiss hiss Hisssss
+hiss Hiss hisss Hiss hisss Hiss hiss Hiss
+hissssssss Hiss hisss Hisss hiss Hisssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisss Hisss hisss Hiss hiss Hiss hissssss
+Hissss hiss Hiss hisssss Hisss hiss Hisss
+hissss Hisss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hissss hisss
+Hisss hisssssss Hiss hisss Hiss hisssss Hisss
+hisss Hiss hisss Hissss hiss Hisssss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hisss
+Hissss hiss Hisss hissss Hiss hisss Hisss
+hisssssss Hiss hisss Hissss hisss Hiss hisss
+Hiss hiss Hisssss hisss Hissss hisss Hiss
+hissssssss Hiss hisss Hisssss hiss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hisss
+Hissss hisss Hiss hisss Hiss hiss Hisssss
+hisss Hiss hiss Hisssss hisss Hissss hisss
+Hiss hissss Hiss hiss Hissss hisssss Hissss
+hiss Hiss hisss Hissss hiss Hisss hisss Hiss
+hissss Hiss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssssss Hissss hisss
+Hiss hisss Hissss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hissss Hiss hissss
+Hiss hisssss Hiss hisss Hiss hissss Hisss
+hisss Hisss hiss Hiss hisss Hiss hiss Hisss
+hissss Hisss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hiss hiss Hissss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hissss Hiss hisss Hisss hiss Hissss
+hissss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hissss Hiss hisss Hissss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hisss Hisssss
+hisss Hiss hisss Hissss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisssss
+Hisss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisssssss Hiss hisss Hisss
+hissss Hisss hiss Hisssss hiss Hisss hisss
+Hissss hiss Hisss hissss Hiss hisss Hisss
+hiss Hiss hisss Hiss hiss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisss Hiss hiss Hisss
+hiss Hisssss hiss Hisss hisss Hissss hiss
+Hisss hiss Hiss hisssss Hisss hissss Hisss
+hiss Hisss hisssssss Hiss hisss Hisss hisss
+Hissss hissss Hiss hiss Hissss hiss Hiss
+hisssss Hisss hissss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hiss Hisss hisss Hissss hisssssss
+Hiss hisss Hissss hiss Hissss hiss Hiss hisss
+Hiss hiss Hisss hissss Hiss hiss Hissss hisssss
+Hiss hiss Hisss hisssssss Hiss hisss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisssss
+Hisss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisssssss Hiss hissss Hiss
+hissss Hisss hiss Hisssss hiss Hisss hissss
+Hiss hisss Hisss hiss Hiss hisss Hiss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hiss
+Hisss hisss Hissss hisssssss Hiss hisss Hisss
+hisss Hissss hisssss Hiss hiss Hisss hiss
+Hisssss hiss Hisss hiss Hiss hiss Hiss hiss
+Hissss hissss Hisss hiss Hisss hissss Hiss
+hisss Hisss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissss Hissss hiss Hisss
+hiss Hisssss hiss Hisss hissss Hiss hiss
+Hissss hisssssss Hiss hisss Hiss hiss Hiss
+hiss Hissss hiss Hisss hisss Hissss hiss
+Hiss hiss Hiss hisss Hisss hisssssss Hiss
+hisss Hisss hissss Hisss hiss Hiss hiss Hiss
+hiss Hissss hisss Hiss hisss Hissss hissss
+Hisss hiss Hisss hiss Hiss hisss Hisssss
+hisssssss Hiss hissss Hiss hissss Hisss hisss
+Hiss hisss Hissss hiss Hiss hisssss Hisss
+hiss Hisss hissss Hisss hiss Hisss hiss Hiss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hissss Hiss hiss Hissss hiss Hisss hisss
+Hissss hisss Hissss hiss Hiss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hisss Hiss hiss Hisss hisss
+Hisss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisssss
+Hiss hisss Hisss hiss Hiss hisssss Hisss
+hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hissss Hisssss hiss Hiss hissss
+Hissss hiss Hiss hiss Hisss hisss Hissss
+hisss Hiss hiss Hiss hiss Hiss hissssss Hiss
+hiss Hiss hisss Hiss hisss Hiss hiss Hisss
+hisss Hisss hisss Hisss hissss Hissssss hiss
+Hissss hiss Hissss hisssss Hiss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hissss Hisss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hissss Hissssss hisss Hisss hisss Hisss hiss
+Hisssss hiss Hisss hisss Hiss hisss Hissss
+hiss Hiss hisss Hiss hiss Hiss hisssss Hissss
+hiss Hiss hisss Hiss hissss Hisss hisss Hissss
+hiss Hiss hissss Hiss hiss Hiss hiss Hiss
+hisssss Hissss hiss Hiss hiss Hisss hiss
+Hisssss hissss Hiss hisss Hiss hisss Hisssss
+hiss Hiss hisss Hiss hisss Hiss hiss Hiss
+hissssssss Hiss hisss Hisss hiss Hisssss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisss Hisss hissss Hisss hisss Hiss hissss
+Hisss hiss Hissssss hiss Hiss hissss Hisss
+hiss Hisss hiss Hiss hisss Hiss hiss Hisss
+hisss Hissss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hiss Hissss hiss Hiss hiss
+Hisss hiss Hisss hisssssss Hiss hisss Hiss
+hiss Hisssss hissssssss Hiss hisssss Hiss
+hisss Hiss hissss Hissss hiss Hiss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisss Hisss hissss Hisss
+hisss Hiss hissss Hisss hiss Hissssss hiss
+Hiss hiss Hisss hissss Hisss hiss Hisssss
+hiss Hisss hissss Hiss hisss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hiss Hissss hissss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssss Hiss hisss Hiss hisss Hisss
+hissss Hisss hisss Hiss hissss Hisss hiss
+Hissssss hiss Hiss hiss Hisss hisss Hissss
+hiss Hisss hissss Hisss hiss Hisssss hiss
+Hisss hissss Hisss hiss Hisss hiss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisssssss Hisss hisss Hisss hiss Hissss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hissssss hisss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hisss Hissss hiss Hiss hiss
+Hiss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hissss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hiss Hiss hiss Hiss hisss
+Hisss hissss Hiss hisss Hisss hisssssss Hiss
+hisssss Hiss hiss Hissss hiss Hisssss hiss
+Hisss hisssssss Hiss hisss Hisss hissss Hisss
+hisssss Hiss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hiss Hisss hissss Hisss hiss
+Hisss hiss Hiss hiss Hisss hisssssss Hiss
+hissss Hisss hisss Hisss hiss Hisssss hiss
+Hisss hisss Hiss hisss Hissss hisssssss Hiss
+hisss Hiss hiss Hiss hisss Hisss hisssss
+Hisssss hiss Hiss hisssss Hisss hiss Hisss
+hissss Hisss hissss Hiss hiss Hissss hissss
+Hisss hiss Hisss hiss Hiss hisss Hisssss
+hisssssss Hiss hisss Hisssss hiss Hisss hisss
+Hissss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hisss Hisss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hiss Hiss
+hiss Hisss hiss Hisss hiss Hiss hisss Hiss
+hiss Hisss hiss Hisss hissss Hisss hiss Hisssss
+hiss Hisss hissss Hisss hiss Hisss hiss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hisssssss
+Hiss hisss Hiss hisss Hiss hiss Hisss hisss
+Hissss hiss Hisss hiss Hisss hisss Hissss
+hiss Hiss hisss Hiss hiss Hisss hissss Hiss
+hisss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hisssss Hiss hiss Hissss hisssss
+Hiss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hissss Hiss hissss Hisss
+hiss Hisssss hiss Hisss hissss Hiss hisss
+Hisss hiss Hiss hisss Hisssss hissss Hisss
+hiss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hisss hissss Hiss
+hissssssss Hiss hissss Hiss hissss Hisss
+hiss Hiss hiss Hiss hisss Hisss hiss Hisss
+hissss Hisss hiss Hiss hisssss Hisss hiss
+Hiss hiss Hiss hiss Hissss hiss Hisss hisss
+Hissss hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hisss Hiss hiss Hiss hisss Hisss hiss
+Hiss hiss Hisss hiss Hisss hissssss Hissss
+hissss Hiss hiss Hissss hiss Hiss hisss Hisssss
+hisssssss Hiss hisss Hisss hisss Hissss hissss
+Hiss hiss Hissss hiss Hiss hisssss Hisss
+hissss Hiss hiss Hissss hiss Hiss hiss Hiss
+hisss Hisss hiss Hiss hiss Hisss hiss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisss Hissss
+hiss Hisss hissss Hiss hiss Hissss hiss Hisss
+hisss Hissss hisssssss Hiss hissssss Hiss
+hiss Hiss hisss Hiss hiss Hiss hisss Hisss
+hisss Hissss hiss Hiss hisss Hissss hisss
+Hisss hisss Hissss hiss Hiss hissssssss Hiss
+hisss Hissss hiss Hissss hiss Hiss hisss
+Hiss hiss Hisss hissss Hiss hiss Hissss hisssss
+Hiss hiss Hisss hisssssss Hiss hisss Hisss
+hissss Hisss hiss Hisssss hiss Hisss hiss
+Hiss hiss Hisss hiss Hisss hiss Hiss hiss
+Hisss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisss Hissss hiss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hisss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hissss
+Hisss hiss Hisss hiss Hiss hisss Hisssss
+hiss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hiss hisssss Hisss hisss Hiss
+hisss Hissss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hisss hissss Hiss hissssssss Hiss
+hisss Hiss hisssss Hisss hissss Hisss hiss
+Hisss hissss Hisss hiss Hisss hiss Hisssss
+hiss Hisss hiss Hissss hiss Hissss hiss Hiss
+hiss Hiss hisss Hisss hissss Hiss hisss Hisss
+hisss Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hisss Hiss hiss Hisss hisss
+Hisss hisss Hisss hisssssss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hisss Hiss hisss
+Hisss hissss Hisss hisss Hiss hissss Hisss
+hiss Hissssss hiss Hiss hissss Hisss hiss
+Hisss hiss Hiss hisss Hiss hiss Hisss hisss
+Hissss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisss Hissss hiss Hisss hiss Hiss hiss
+Hiss hiss Hissss hiss Hiss hiss Hisss hiss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hisss Hiss hiss Hisssss hissssssss Hiss hisssss
+Hiss hisss Hiss hissss Hissss hiss Hiss hissssssss
+Hiss hisss Hiss hiss Hisss hiss Hiss hissssssss
+Hiss hisss Hiss hissss Hisss hissssssss Hiss
+hissss Hisss hisss Hiss hissss Hisss hisss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisssss Hiss hisss Hisss hiss Hiss hisssss
+Hisss hissss Hiss hiss Hissss hiss Hiss hisssss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissss Hisssssss hisssssss Hiss hisss Hisssss
+hiss Hiss hissss Hisssss hiss Hiss hiss Hisss
+hiss Hisss hiss Hiss hisss Hisssss hiss Hiss
+hiss Hisss hiss Hissss hisss Hiss hiss Hissss
+hiss Hiss hisss Hiss hiss Hiss hiss Hiss
+hisss Hisss hiss Hissss hisss Hisss hiss
+Hisss hiss Hiss hisss Hisssss hiss Hiss hiss
+Hisss hiss Hissss hisss Hiss hiss Hissss
+hiss Hiss hisss Hiss hiss Hiss hiss Hiss
+hisssss Hiss hisss Hiss hisss Hisssss hiss
+Hiss hisss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisss Hisss hissss Hisss hisss Hiss hissss
+Hisss hiss Hissssss hiss Hiss hiss Hisss
+hissss Hisss hiss Hisssss hiss Hisss hissss
+Hiss hisss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hissss Hissss hiss Hiss
+hisss Hiss hiss Hisssss hissssssss Hiss hisssss
+Hiss hisss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hiss Hisss hiss Hissss hissss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisssss Hiss hisss Hiss hisss Hisss
+hissss Hisss hisss Hiss hissss Hisss hiss
+Hissssss hiss Hiss hiss Hisss hisss Hissss
+hiss Hisss hissss Hisss hiss Hisssss hiss
+Hisss hissss Hisss hiss Hisss hiss Hisssss
+hiss Hisss hisss Hissss hiss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissssssss Hiss
+hisss Hiss hissss Hisss hisss Hisss hiss
+Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisss Hiss hiss Hissssss
+hisss Hiss hiss Hiss hissssss Hiss hiss Hiss
+hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hiss hisss Hiss hiss Hisss hisss Hisss hisss
+Hisss hisssssss Hiss hissssss Hiss hiss Hiss
+hisssss Hiss hisss Hiss hisssss Hiss hisss
+Hisss hiss Hiss hisssss Hisss hissss Hiss
+hiss Hissss hiss Hiss hisssss Hisss hisssssss
+Hiss hisss Hiss hiss Hisssss hissss Hisssssss
+hisssssss Hiss hisss Hisssss hiss Hiss hissss
+Hisssss hiss Hiss hissss Hissss hiss Hiss
+hiss Hisss hisss Hissss hisss Hiss hiss Hiss
+hiss Hiss hisss Hiss hiss Hissssss hissss
+Hissss hiss Hiss hiss Hisss hisss Hissss
+hisss Hiss hiss Hiss hiss Hiss hisssss Hiss
+hisss Hiss hisss Hisssss hiss Hiss hissssssss
+Hiss hissss Hisss hisss Hiss hissss Hisss
+hisss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisss Hisss hissss Hisss
+hisss Hiss hissss Hisss hiss Hissssss hiss
+Hiss hissss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hiss
+Hiss hiss Hisss hiss Hisss hisssssss Hiss
+hisss Hiss hiss Hisssss hisss Hiss hiss Hisssss
+hissssssss Hiss hisssss Hiss hisss Hiss hissss
+Hissss hiss Hiss hissssssss Hiss hisss Hiss
+hiss Hisss hiss Hiss hissssssss Hiss hissss
+Hiss hisss Hisss hissssssss Hiss hissss Hisss
+hisss Hiss hissss Hisss hisss Hiss hissss
+Hiss hiss Hiss hissssssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisss Hisss hissss Hisss hisss Hiss hissss
+Hisss hiss Hissssss hiss Hiss hiss Hisss
+hisss Hissss hiss Hisss hissss Hisss hiss
+Hisssss hiss Hisss hissss Hisss hiss Hisss
+hiss Hisssss hiss Hisss hisss Hissss hiss
+Hisss hiss Hiss hisss Hiss hiss Hiss hissssssss
+Hiss hisss Hisss hiss Hisssss hisss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hisss Hisss hisssss Hiss
+hiss Hiss hiss Hiss hiss Hissss hisss Hiss
+hisss Hissss hissss Hisss hiss Hisss hiss
+Hiss hisss Hisssss hisssssss Hiss hissss
+Hiss hissss Hisss hisss Hiss hisss Hissss
+hiss Hiss hisssss Hisss hiss Hisss hissss
+Hisss hiss Hisss hiss Hiss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hissss Hiss hiss
+Hissss hiss Hisss hisss Hissss hisssssss
+Hiss hisss Hiss hisssss Hisss hisss Hiss
+hisss Hissss hiss Hisssss hiss Hisss hiss
+Hiss hiss Hiss hiss Hissss hisss Hissss hiss
+Hisss hissss Hiss hisss Hisss hisssssss Hiss
+hisss Hisss hisss Hissss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hissss hisss Hisss hissss Hisss hiss Hisss
+hiss Hiss hiss Hiss hisss Hisss hiss Hiss
+hiss Hisss hiss Hiss hisssss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisssssss Hiss hissss Hiss hissss Hisss hiss
+Hisssss hiss Hisss hissss Hiss hisss Hisss
+hiss Hiss hisss Hisssss hisss Hiss hiss Hissss
+hisssss Hissss hiss Hiss hisss Hissss hiss
+Hisss hisss Hiss hissss Hiss hisss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssssss
+Hissss hisss Hiss hisss Hissss hiss Hiss
+hisss Hiss hiss Hisss hisss Hissss hiss Hisss
+hissss Hiss hiss Hissss hisssssss Hiss hissss
+Hiss hissss Hiss hisssss Hiss hisss Hiss
+hissss Hisss hisss Hisss hiss Hiss hisss
+Hiss hiss Hisss hissss Hisss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hiss hiss
+Hissss hisssss Hiss hisss Hiss hisss Hisss
+hissss Hisss hisss Hiss hissss Hisss hiss
+Hissssss hiss Hiss hissss Hisss hiss Hisss
+hiss Hiss hisss Hiss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hissss hiss Hisss hiss Hiss hiss Hiss
+hiss Hissss hiss Hiss hiss Hisss hiss Hisss
+hiss Hiss hiss Hisss hiss Hiss hisssss Hiss
+hisss Hiss hissss Hissss hiss Hiss hissss
+Hiss hiss Hissss hisssss Hissss hiss Hiss
+hisss Hissss hiss Hisss hissss Hiss hisss
+Hiss hisss Hisss hissss Hisss hisss Hiss
+hissss Hisss hiss Hissssss hiss Hiss hiss
+Hisss hissss Hisss hiss Hisssss hiss Hisss
+hissss Hiss hisss Hisss hiss Hiss hiss Hiss
+hisss Hisss hissss Hiss hisss Hiss hisssss
+Hisss hiss Hisss hiss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hiss Hiss hiss
+Hiss hisss Hisss hisss Hiss hissss Hiss hisss
+Hisss hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hissss Hiss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hissss Hiss
+hiss Hissss hisssssss Hiss hisss Hiss hiss
+Hisssss hissssssss Hiss hisss Hiss hissss
+Hisss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hisssss
+Hiss hiss Hiss hiss Hiss hisssss Hiss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hisss
+Hiss hisss Hissss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hisss Hissssss hiss
+Hiss hiss Hisss hisss Hissss hisssss Hiss
+hiss Hisss hiss Hisssss hiss Hisss hiss Hiss
+hiss Hiss hiss Hissss hissss Hisss hiss Hisss
+hissss Hiss hisss Hisss hiss Hissssss hiss
+Hiss hisssssss Hiss hissss Hiss hissss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hissss Hissss hiss Hisss hiss Hisssss
+hiss Hisss hisssssss Hiss hissss Hissss hiss
+Hisss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hiss Hiss hisss Hisss hissss Hiss hisss
+Hisss hisssssss Hiss hisssss Hiss hiss Hissss
+hiss Hisssss hiss Hisss hisssssss Hiss hissss
+Hiss hisss Hissss hiss Hiss hiss Hiss hisss
+Hisss hiss Hisss hisss Hissss hiss Hiss hiss
+Hiss hisss Hisss hissss Hiss hiss Hissss
+hisssssss Hiss hisssss Hiss hiss Hissss hisssss
+Hiss hiss Hisss hiss Hiss hiss Hiss hisss
+Hisss hisssssss Hiss hissss Hisss hiss Hissss
+hiss Hiss hisssss Hisss hissss Hisss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hiss
+Hiss hiss Hiss hisss Hisss hiss Hisss hisss
+Hissss hiss Hisss hiss Hissss hissssssss
+Hiss hissss Hiss hissss Hisss hiss Hiss hiss
+Hiss hiss Hissss hissss Hiss hiss Hissss
+hisssssss Hiss hisssss Hiss hiss Hissss hiss
+Hisssss hiss Hisss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hisss hissss Hiss hissssssss Hiss hisss Hisss
+hiss Hiss hiss Hisss hiss Hiss hiss Hiss
+hisss Hisss hiss Hiss hiss Hiss hisss Hisss
+hissssss Hissss hisssssss Hiss hisss Hiss
+hiss Hisss hiss Hisss hiss Hiss hisss Hisssss
+hisssssss Hiss hisss Hiss hisss Hiss hiss
+Hisss hisss Hissss hiss Hisss hisss Hissss
+hiss Hisss hiss Hiss hiss Hiss hisss Hisss
+hisss Hiss hisss Hissss hisssssss Hiss hisssssss
+Hissss hiss Hiss hiss Hiss hisss Hisss hiss
+Hiss hisssss Hisss hiss Hisss hissss Hisss
+hiss Hiss hiss Hiss hisss Hisss hisss Hissss
+hiss Hiss hissss Hissss hiss Hiss hissss
+Hissss hiss Hiss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisss Hisss hissss Hisss
+hisss Hiss hissss Hisss hiss Hissssss hiss
+Hiss hissss Hisss hiss Hisss hiss Hiss hisss
+Hiss hiss Hisss hisss Hissss hiss Hisss hiss
+Hiss hiss Hiss hisss Hisss hisss Hissss hiss
+Hisss hiss Hiss hiss Hiss hiss Hissss hiss
+Hiss hiss Hisss hiss Hisss hisssssss Hiss
+hisss Hiss hiss Hisssss hissssssss Hiss hisssssss
+Hisss hisss Hisss hiss Hissss hissss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hisssss Hiss hisss Hiss
+hisss Hisss hissss Hisss hisss Hiss hissss
+Hisss hiss Hissssss hiss Hiss hiss Hisss
+hisss Hissss hiss Hisss hissss Hisss hiss
+Hisssss hiss Hisss hissss Hisss hiss Hisss
+hiss Hisssss hiss Hisss hisss Hissss hiss
+Hisss hisssssss Hiss hisss Hiss hiss Hisssss
+hissssssss Hiss hisssssss Hisss hisss Hisss
+hiss Hissss hissss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisssss
+Hiss hisss Hiss hisss Hisss hissss Hisss
+hisss Hiss hissss Hisss hiss Hissssss hiss
+Hiss hiss Hisss hissss Hisss hiss Hisssss
+hiss Hisss hissss Hiss hisss Hisss hiss Hiss
+hiss Hiss hisss Hisss hisssssss Hiss hisss
+Hiss hiss Hisssss hissssssss Hiss hissss
+Hiss hissss Hiss hissss Hiss hissss Hiss
+hisss Hisss hiss Hissss hissss Hiss hiss
+Hiss hissssssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hissssssss Hiss hissssssss Hiss hisss
+Hiss hiss Hissssss hisss Hiss hiss Hiss hissssssssss
+Hiss hissssssss Hiss hissssssss Hiss hissssssss
+Hiss hisss Hiss hiss Hissssss hisss Hiss
+hiss Hiss hissssssssss Hiss hissssssss Hiss
+hissssssss Hiss hissssssss Hiss hisss Hisss
+hissss Hisss hissss Hisss hiss Hisss hiss
+Hisssss hiss Hisss hiss Hisss hisss Hissss
+hiss Hiss hiss Hiss hisss Hisss hisssssss
+Hiss hissss Hisss hissss Hiss hiss Hiss hisss
+Hiss hisss Hiss hissss Hisss hisss Hiss hiss
+Hiss hiss Hiss hissss Hiss hiss Hisss hiss
+Hissss hissss Hiss hiss Hiss hisssss Hiss
+hiss Hissssss hisss Hiss hiss Hiss hissssss
+Hiss hiss Hiss hisssss Hiss hiss Hiss hisss
+Hisss hisssss Hisssss hiss Hiss hisss Hiss
+hiss Hisss hissss Hiss hiss Hissss hisssssss
+Hiss hisssss Hiss hisss Hiss hissss Hiss
+hisss Hissss hiss Hiss hiss Hiss hisss Hisss
+hissss Hiss hiss Hissss hiss Hisss hiss Hissss
+hissss Hiss hiss Hiss hisssss
\ No newline at end of file
diff --git a/cfg.mk b/cfg.mk
index 9ba2134..3c5b4a9 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1114,7 +1114,7 @@ exclude_file_name_regexp--sc_prohibit_close = \
(\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/vir(cgroup|pci)mock\.c)$$)
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
- (^tests/(qemuhelp|nodeinfo|virpcitest)data/|\.diff$$)
+ (^tests/(qemuhelp|nodeinfo|virpcitest)data/|\.diff$$|build-aux/bracket-spacing.pl)
_src2=src/(util/vircommand|libvirt|lxc/lxc_controller|locking/lock_daemon)
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
@@ -1159,7 +1159,7 @@ exclude_file_name_regexp--sc_require_config_h_first = \
^(examples/|tools/virsh-edit\.c$$)
exclude_file_name_regexp--sc_trailing_blank = \
- /qemuhelpdata/|/sysinfodata/.*\.data|/nodeinfodata/.*\.cpuinfo$$
+ /qemuhelpdata/|/sysinfodata/.*\.data|/nodeinfodata/.*\.cpuinfo$$|build-aux/bracket-spacing.pl
exclude_file_name_regexp--sc_unmarked_diagnostics = \
^(docs/apibuild.py|tests/virt-aa-helper-test)$$
--
2.1.0
3
2
Just as we allow stopping filesystem pools when they were unmounted
externally, do not fail to stop an iscsi pool when someone else
closed the session externally.
Reported at:
https://bugzilla.redhat.com/show_bug.cgi?id=1171984
---
v2: Do not report errors when returning success (use probe=true)
refrain from making controversial claims in the commit message
src/storage/storage_backend_iscsi.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c
index 197d333..9e2d01e 100644
--- a/src/storage/storage_backend_iscsi.c
+++ b/src/storage/storage_backend_iscsi.c
@@ -449,8 +449,13 @@ virStorageBackendISCSIStopPool(virConnectPtr conn ATTRIBUTE_UNUSED,
virStoragePoolObjPtr pool)
{
char *portal;
+ char *session;
int ret = -1;
+ if ((session = virStorageBackendISCSISession(pool, true)) == NULL)
+ return 0;
+ VIR_FREE(session);
+
if ((portal = virStorageBackendISCSIPortal(&pool->def->source)) == NULL)
return -1;
--
2.0.5
2
2
[libvirt] [PATCH] polkit: Allow password-less access for 'libvirt' group
by Cole Robinson 30 Apr '15
by Cole Robinson 30 Apr '15
30 Apr '15
Many users, who admin their own machines, want to be able to access
system libvirtd via tools like virt-manager without having to enter
a root password. Just google 'virt-manager without password' and
you'll find many hits. I've read at least 5 blog posts over the years
describing slightly different ways of achieving this goal.
Let's finally add official support for this.
Install a polkit-1 rules file granting password-less auth for any user
in the new 'libvirt' group. Create the group on RPM install
https://bugzilla.redhat.com/show_bug.cgi?id=957300
---
daemon/50-libvirt.rules | 9 +++++++++
daemon/Makefile.am | 13 +++++++++++++
libvirt.spec.in | 15 +++++++++++++--
3 files changed, 35 insertions(+), 2 deletions(-)
create mode 100644 daemon/50-libvirt.rules
diff --git a/daemon/50-libvirt.rules b/daemon/50-libvirt.rules
new file mode 100644
index 0000000..01a15fa
--- /dev/null
+++ b/daemon/50-libvirt.rules
@@ -0,0 +1,9 @@
+// Allow any user in the 'libvirt' group to connect to system libvirtd
+// without entering a password.
+
+polkit.addRule(function(action, subject) {
+ if (action.id == "org.libvirt.unix.manage" &&
+ subject.isInGroup("libvirt")) {
+ return polkit.Result.YES;
+ }
+});
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 300b9a5..e200ac1 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -53,6 +53,7 @@ EXTRA_DIST = \
libvirtd.init.in \
libvirtd.upstart \
libvirtd.policy.in \
+ 50-libvirt.rules \
libvirtd.sasl \
libvirtd.service.in \
libvirtd.socket.in \
@@ -233,6 +234,8 @@ policyauth = auth_admin_keep_session
else ! WITH_POLKIT0
policydir = $(datadir)/polkit-1/actions
policyauth = auth_admin_keep
+rulesdir = $(datadir)/polkit-1/rules.d
+rulesfile = 50-libvirt.rules
endif ! WITH_POLKIT0
endif WITH_POLKIT
@@ -263,9 +266,19 @@ if WITH_POLKIT
install-data-polkit::
$(MKDIR_P) $(DESTDIR)$(policydir)
$(INSTALL_DATA) libvirtd.policy $(DESTDIR)$(policydir)/org.libvirt.unix.policy
+if ! WITH_POLKIT0
+ $(MKDIR_P) $(DESTDIR)$(rulesdir)
+ $(INSTALL_DATA) $(srcdir)/$(rulesfile) $(DESTDIR)$(rulesdir)
+endif ! WITH_POLKIT0
+
uninstall-data-polkit::
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
rmdir $(DESTDIR)$(policydir) || :
+if ! WITH_POLKIT0
+ rm -f $(DESTDIR)$(rulesdir)/$(rulesfile)
+ rmdir $(DESTDIR)$(rulesdir)
+endif ! WITH_POLKIT0
+
else ! WITH_POLKIT
install-data-polkit::
uninstall-data-polkit::
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 20af502..c71ef25 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1645,9 +1645,9 @@ then
fi
%if %{with_libvirtd}
+%pre daemon
%if ! %{with_driver_modules}
%if %{with_qemu}
-%pre daemon
%if 0%{?fedora} || 0%{?rhel} >= 6
# We want soft static allocation of well-known ids, as disk images
# are commonly shared across NFS mounts by id rather than name; see
@@ -1661,11 +1661,21 @@ if ! getent passwd qemu >/dev/null; then
useradd -r -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu
fi
fi
-exit 0
%endif
%endif
%endif
+ %if %{with_polkit}
+ %if 0%{?fedora} || 0%{?rhel} >= 6
+# 'libvirt' group is just to allow password-less polkit access to
+# libvirtd. The uid number is irrelevant, so we use dynamic allocation
+# described at the above link.
+getent group libvirt >/dev/null || groupadd -r libvirt
+ %endif
+ %endif
+
+exit 0
+
%post daemon
%if %{with_systemd}
@@ -1939,6 +1949,7 @@ exit 0
%if 0%{?fedora} || 0%{?rhel} >= 6
%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
%{_datadir}/polkit-1/actions/org.libvirt.api.policy
+%{_datadir}/polkit-1/rules.d/50-libvirt.rules
%else
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
%endif
--
2.3.6
5
7
[libvirt] [PATCH] qemu: Unlock NW filter lock earlier when not necessary
by Erik Skultety 30 Apr '15
by Erik Skultety 30 Apr '15
30 Apr '15
The lock is dropped always at the end of an API, but for example when
attaching devices, there's no point in having the NW filter locked if the
device being attached isn't a network interface. It's always a nice
practice to drop unnecessary locks as soon as possible.
---
src/qemu/qemu_driver.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
BZ 1181074 reported the daemon to hang (not completely true btw) after trying
to attach /dev/ttyX to a running domain. When going through the code I realized
we acquire a read lock for NW filter, although the device itself is not a network
interface and then releasing it at the end. First clue was that this lock which
won't be unlocked as the thread is blocked in reading header of /dev/ttyX causes
the freeze. As it turned out, the problem resides in calling virsh list afterwards
(Peter already does have some patches prepared), but I think the NW filter might
be released earlier in this case with no harm done.
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 74dcb0a..04887e0 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -8764,6 +8764,7 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
int ret = -1;
unsigned int affect, parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
+ bool nwfilter_locked = false;
virQEMUCapsPtr qemuCaps = NULL;
qemuDomainObjPrivatePtr priv;
virQEMUDriverConfigPtr cfg = NULL;
@@ -8773,6 +8774,7 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
VIR_DOMAIN_AFFECT_CONFIG, -1);
virNWFilterReadLockFilterUpdates();
+ nwfilter_locked = true;
cfg = virQEMUDriverGetConfig(driver);
@@ -8819,6 +8821,11 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
if (dev == NULL)
goto endjob;
+ if (dev->type != VIR_DOMAIN_DEVICE_NET) {
+ virNWFilterUnlockFilterUpdates();
+ nwfilter_locked = false;
+ }
+
if (flags & VIR_DOMAIN_AFFECT_CONFIG &&
flags & VIR_DOMAIN_AFFECT_LIVE) {
/* If we are affecting both CONFIG and LIVE
@@ -8884,11 +8891,12 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
virDomainDefFree(vmdef);
if (dev != dev_copy)
virDomainDeviceDefFree(dev_copy);
+ if (nwfilter_locked)
+ virNWFilterUnlockFilterUpdates();
virDomainDeviceDefFree(dev);
virDomainObjEndAPI(&vm);
virObjectUnref(caps);
virObjectUnref(cfg);
- virNWFilterUnlockFilterUpdates();
return ret;
}
@@ -8908,6 +8916,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
virDomainDefPtr vmdef = NULL;
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
bool force = (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) != 0;
+ bool nwfilter_locked = false;
int ret = -1;
unsigned int affect;
virQEMUCapsPtr qemuCaps = NULL;
@@ -8920,6 +8929,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
VIR_DOMAIN_DEVICE_MODIFY_FORCE, -1);
virNWFilterReadLockFilterUpdates();
+ nwfilter_locked = true;
cfg = virQEMUDriverGetConfig(driver);
@@ -8966,6 +8976,11 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
if (dev == NULL)
goto endjob;
+ if (dev->type != VIR_DOMAIN_DEVICE_NET) {
+ virNWFilterUnlockFilterUpdates();
+ nwfilter_locked = false;
+ }
+
if (flags & VIR_DOMAIN_AFFECT_CONFIG &&
flags & VIR_DOMAIN_AFFECT_LIVE) {
/* If we are affecting both CONFIG and LIVE
@@ -9031,11 +9046,12 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
virDomainDefFree(vmdef);
if (dev != dev_copy)
virDomainDeviceDefFree(dev_copy);
+ if (nwfilter_locked)
+ virNWFilterUnlockFilterUpdates();
virDomainDeviceDefFree(dev);
virDomainObjEndAPI(&vm);
virObjectUnref(caps);
virObjectUnref(cfg);
- virNWFilterUnlockFilterUpdates();
return ret;
}
--
1.9.3
3
2
There's no APIC on aarch64. It's replaced by GIC (Generic Interrupt Controller).
Michal Privoznik (2):
Introduce GIC feature
qemu: Implement GIC
docs/formatdomain.html.in | 9 ++++++
docs/schemas/domaincommon.rng | 11 ++++++-
src/conf/domain_conf.c | 34 +++++++++++++++++++++-
src/conf/domain_conf.h | 2 ++
src/qemu/qemu_command.c | 13 +++++++++
.../qemuxml2argvdata/qemuxml2argv-aarch64-gic.args | 6 ++++
.../qemuxml2argvdata/qemuxml2argv-aarch64-gic.xml | 26 +++++++++++++++++
tests/qemuxml2argvtest.c | 2 ++
8 files changed, 101 insertions(+), 2 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic.xml
--
2.0.5
2
6
30 Apr '15
Currently, if CPUs are brought online or offline during the lifetime of
a libvirtd instance, the output of commands such as `virsh capabilities'
will not reflect the actual topology, eg. displaying empty <cpu> tags
for CPUs that have been brought offline and not displaying at all CPUs
that have been brought online.
This happens because the list of CPUs in a node is queried using
libnuma, which maintains its internal cache.
This patch changes the code so that the required information is
extracted from sysfs instead, making the data displayed to the user
always fresh.
Andrea Bolognani (2):
nodeinfo: Export nodeGetCPUValue() after renaming it.
numa: Rewrite virNumaGetNodeCPUs() to query CPUs dynamically.
src/libvirt_private.syms | 1 +
src/nodeinfo.c | 28 +++++----
src/nodeinfo.h | 6 +-
src/util/virnuma.c | 158 ++++++++++++++++++++++++-----------------------
4 files changed, 102 insertions(+), 91 deletions(-)
--
2.1.0
3
6
[libvirt] [PATCH] qemu: Make sure permissions are set on VNC auto socket
by Cole Robinson 30 Apr '15
by Cole Robinson 30 Apr '15
30 Apr '15
This can cause permissions failures if qemu.conf user/group is changed.
Fix this by filling in the VNC auto socket path in the same code area
that we fill in default listen address, ports, etc.
https://bugzilla.redhat.com/show_bug.cgi?id=1151762
---
src/qemu/qemu_command.c | 10 ++--------
src/qemu/qemu_process.c | 11 ++++++++++-
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ba15dc9..45fc63c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7544,7 +7544,6 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
static int
qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
virCommandPtr cmd,
- virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
virDomainGraphicsDefPtr graphics)
{
@@ -7561,12 +7560,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
goto error;
}
- if (graphics->data.vnc.socket || cfg->vncAutoUnixSocket) {
- if (!graphics->data.vnc.socket &&
- virAsprintf(&graphics->data.vnc.socket,
- "%s/%s.vnc", cfg->libDir, def->name) == -1)
- goto error;
-
+ if (graphics->data.vnc.socket) {
virBufferAsprintf(&opt, "unix:%s", graphics->data.vnc.socket);
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_COLON)) {
@@ -7944,7 +7938,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
break;
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
- return qemuBuildGraphicsVNCCommandLine(cfg, cmd, def, qemuCaps, graphics);
+ return qemuBuildGraphicsVNCCommandLine(cfg, cmd, qemuCaps, graphics);
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
return qemuBuildGraphicsSPICECommandLine(cfg, cmd, qemuCaps, graphics);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 605b3c6..5de46e2 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4479,7 +4479,16 @@ int qemuProcessStart(virConnectPtr conn,
goto cleanup;
}
- if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC ||
+ if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ !graphics->data.vnc.socket &&
+ cfg->vncAutoUnixSocket) {
+ if (virAsprintf(&graphics->data.vnc.socket,
+ "%s/%s.vnc", cfg->libDir, vm->def->name) < 0)
+ goto cleanup;
+ }
+
+ if ((graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ !graphics->data.vnc.socket) ||
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
if (graphics->nListens == 0) {
if (VIR_EXPAND_N(graphics->listens, graphics->nListens, 1) < 0)
--
2.3.6
2
3
[libvirt] [PATCH v2] polkit: Allow password-less access for 'libvirtadm' group
by Cole Robinson 29 Apr '15
by Cole Robinson 29 Apr '15
29 Apr '15
Many users, who admin their own machines, want to be able to access
system libvirtd via tools like virt-manager without having to enter
a root password. Just google 'virt-manager without password' and
you'll find many hits. I've read at least 5 blog posts over the years
describing slightly different ways of achieving this goal.
Let's finally add official support for this.
Install a polkit-1 rules file granting password-less auth for any user
in the new 'libvirtadm' group. Create the group on RPM install
https://bugzilla.redhat.com/show_bug.cgi?id=957300
---
v2:
- Name the group libvirtadm (danpb)
- Name the source file libvirt.rules and rename on install (eblake)
daemon/Makefile.am | 13 +++++++++++++
daemon/libvirt.rules | 9 +++++++++
libvirt.spec.in | 15 +++++++++++++--
3 files changed, 35 insertions(+), 2 deletions(-)
create mode 100644 daemon/libvirt.rules
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 300b9a5..974feed 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -53,6 +53,7 @@ EXTRA_DIST = \
libvirtd.init.in \
libvirtd.upstart \
libvirtd.policy.in \
+ libvirt.rules \
libvirtd.sasl \
libvirtd.service.in \
libvirtd.socket.in \
@@ -233,6 +234,8 @@ policyauth = auth_admin_keep_session
else ! WITH_POLKIT0
policydir = $(datadir)/polkit-1/actions
policyauth = auth_admin_keep
+rulesdir = $(datadir)/polkit-1/rules.d
+rulesfile = libvirt.rules
endif ! WITH_POLKIT0
endif WITH_POLKIT
@@ -263,9 +266,19 @@ if WITH_POLKIT
install-data-polkit::
$(MKDIR_P) $(DESTDIR)$(policydir)
$(INSTALL_DATA) libvirtd.policy $(DESTDIR)$(policydir)/org.libvirt.unix.policy
+if ! WITH_POLKIT0
+ $(MKDIR_P) $(DESTDIR)$(rulesdir)
+ $(INSTALL_DATA) $(srcdir)/$(rulesfile) $(DESTDIR)$(rulesdir)/50-libvirt.rules
+endif ! WITH_POLKIT0
+
uninstall-data-polkit::
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
rmdir $(DESTDIR)$(policydir) || :
+if ! WITH_POLKIT0
+ rm -f $(DESTDIR)$(rulesdir)/50-libvirt.rules
+ rmdir $(DESTDIR)$(rulesdir) || :
+endif ! WITH_POLKIT0
+
else ! WITH_POLKIT
install-data-polkit::
uninstall-data-polkit::
diff --git a/daemon/libvirt.rules b/daemon/libvirt.rules
new file mode 100644
index 0000000..e70c09b
--- /dev/null
+++ b/daemon/libvirt.rules
@@ -0,0 +1,9 @@
+// Allow any user in the 'libvirtadm' group to connect to system libvirtd
+// without entering a password.
+
+polkit.addRule(function(action, subject) {
+ if (action.id == "org.libvirt.unix.manage" &&
+ subject.isInGroup("libvirtadm")) {
+ return polkit.Result.YES;
+ }
+});
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 20af502..10a28a2 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1645,9 +1645,9 @@ then
fi
%if %{with_libvirtd}
+%pre daemon
%if ! %{with_driver_modules}
%if %{with_qemu}
-%pre daemon
%if 0%{?fedora} || 0%{?rhel} >= 6
# We want soft static allocation of well-known ids, as disk images
# are commonly shared across NFS mounts by id rather than name; see
@@ -1661,11 +1661,21 @@ if ! getent passwd qemu >/dev/null; then
useradd -r -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu
fi
fi
-exit 0
%endif
%endif
%endif
+ %if %{with_polkit}
+ %if 0%{?fedora} || 0%{?rhel} >= 6
+# 'libvirtadm' group is just to allow password-less polkit access to
+# libvirtd. The uid number is irrelevant, so we use dynamic allocation
+# described at the above link.
+getent group libvirtadm >/dev/null || groupadd -r libvirtadm
+ %endif
+ %endif
+
+exit 0
+
%post daemon
%if %{with_systemd}
@@ -1939,6 +1949,7 @@ exit 0
%if 0%{?fedora} || 0%{?rhel} >= 6
%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
%{_datadir}/polkit-1/actions/org.libvirt.api.policy
+%{_datadir}/polkit-1/rules.d/50-libvirt.rules
%else
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
%endif
--
2.3.6
3
5
29 Apr '15
The first four patches only cleanup the flags checking in our APIs by
introducing new macros to check exclusive flags and requirements.
Patch 5/7 uses the new macros to do better flags checking for
virDomainSetvcpusFlags API.
Patch 6/7 introduces macro to check virsh options requirements.
The last patch uses the requirement macro to cleanup virsh setvcpus code
and fixes a bug with --maximum option.
Because only the last patch actually fixes a bug issue, I'm not sure whether
this patch series should wait for next release cycle.
Luyao Huang (1):
tools: fix the wrong check when use virsh setvcpus --maximum
Pavel Hrdina (6):
internal: introduce macro helpers to reject exclusive flags
internal: introduce macro helpers to check flag requirements
use new macro helpers to check exclusive flags
use new macro helpers to check flag requirements
qemu: use new macros for setvcpus to check flags and cleanup the code
virsh: introduce new macros to help check flag requirements
src/internal.h | 87 +++++++++++
src/libvirt-domain-snapshot.c | 56 +++-----
src/libvirt-domain.c | 286 +++++++++++--------------------------
src/qemu/qemu_driver.c | 33 +----
src/storage/storage_backend_disk.c | 10 +-
src/storage/storage_backend_fs.c | 11 +-
tools/virsh-domain.c | 30 +---
tools/virsh.h | 52 +++++++
8 files changed, 256 insertions(+), 309 deletions(-)
--
2.0.5
3
14
[libvirt] [python PATCH] examples: Add example to make guest agent lifecycle event useful
by Peter Krempa 29 Apr '15
by Peter Krempa 29 Apr '15
29 Apr '15
This example allows to use the guest agent event and metadata to track
vCPU count set via the guest agent (agent-based onlining/offlining) and
keep it persistent accross domain restarts.
The daemon listens for the agent lifecycle event, and if it's received
it looks into doman's metadata to see whether a desired count was set
and issues the guest agent command.
---
MANIFEST.in | 2 +
examples/README | 2 +
examples/guest-vcpus/guest-vcpu-daemon.py | 131 ++++++++++++++++++++++++++++++
examples/guest-vcpus/guest-vcpu.py | 76 +++++++++++++++++
4 files changed, 211 insertions(+)
create mode 100755 examples/guest-vcpus/guest-vcpu-daemon.py
create mode 100755 examples/guest-vcpus/guest-vcpu.py
diff --git a/MANIFEST.in b/MANIFEST.in
index dd05221..2cd1b46 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -11,6 +11,8 @@ include examples/domsave.py
include examples/domstart.py
include examples/esxlist.py
include examples/event-test.py
+include examples/guest-vcpus/guest-vcpu-daemon.py
+include examples/guest-vcpus/guest-vcpu.py
include examples/topology.py
include generator.py
include libvirt-lxc-override-api.xml
diff --git a/examples/README b/examples/README
index 1d4b425..0cb4513 100644
--- a/examples/README
+++ b/examples/README
@@ -12,6 +12,8 @@ esxlist.py - list active domains of an VMware ESX host and print some info.
also demonstrates how to use the libvirt.openAuth() method
dhcpleases.py - list dhcp leases for a given virtual network
domipaddrs.py - list IP addresses for guest domains
+guest-vcpus - two helpers to make the guest agent event useful with agent based
+ vCPU state modification
The XML files in this directory are examples of the XML format that libvirt
expects, and will have to be adapted for your setup. They are only needed
diff --git a/examples/guest-vcpus/guest-vcpu-daemon.py b/examples/guest-vcpus/guest-vcpu-daemon.py
new file mode 100755
index 0000000..e5a389e
--- /dev/null
+++ b/examples/guest-vcpus/guest-vcpu-daemon.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python
+
+import libvirt
+import threading
+from xml.dom import minidom
+import time
+
+uri = "qemu:///system"
+customXMLuri = "guest-cpu.python.libvirt.org"
+connectRetryTimeout = 5
+
+class workerData:
+ def __init__(self):
+ self.doms = list()
+ self.conn = None
+ self.cond = threading.Condition()
+
+ def notify(self):
+ self.cond.acquire()
+ self.cond.notify()
+ self.cond.release()
+
+ def waitNotify(self):
+ self.cond.acquire()
+ self.cond.wait()
+ self.cond.release()
+
+ def addDomainNotify(self, dom):
+ self.doms.append(dom)
+ self.notify()
+
+ def closeConnectNotify(self):
+ conn = self.conn
+ self.conn = None
+ conn.close()
+ self.notify()
+
+ def setConnect(self, conn):
+ self.conn = conn
+
+ def hasConn(self):
+ return self.conn is not None
+
+ def hasDom(self):
+ return len(self.doms) > 0
+
+ def getDom(self):
+ return self.doms.pop()
+
+ def setDoms(self, doms):
+ self.doms = doms
+
+
+def virEventLoopNativeRun():
+ while True:
+ libvirt.virEventRunDefaultImpl()
+
+def handleAgentLifecycleEvent(conn, dom, state, reason, opaque):
+ if state == libvirt.VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_STATE_CONNECTED:
+ opaque.addDomainNotify(dom)
+
+def handleConnectClose(conn, reason, opaque):
+ print('Disconnected from ' + uri)
+ opaque.closeConnectNotify()
+
+def handleLibvirtLibraryError(opaque, error):
+ pass
+
+def processAgentConnect(dom):
+ try:
+ cpus = dom.metadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, customXMLuri,
+ libvirt.VIR_DOMAIN_AFFECT_LIVE)
+ doc = minidom.parseString(cpus)
+ ncpus = int(doc.getElementsByTagName('ncpus')[0].getAttribute('count'))
+ except:
+ return
+
+ try:
+ dom.setVcpusFlags(ncpus, libvirt.VIR_DOMAIN_AFFECT_LIVE | libvirt.VIR_DOMAIN_VCPU_GUEST)
+ print("seting vcpus for domain " + dom.name() + " count " + str(ncpus))
+ except:
+ print("failed to set vcpu count for domain " + dom.name())
+
+def work():
+ data = workerData()
+
+ print("Using uri: " + uri)
+
+ while True:
+ if not data.hasConn():
+ try:
+ conn = libvirt.open(uri)
+ except:
+ print('Failed to connect to ' + uri + ' Retry in ' + str(connectRetryTimeout)) + ' seconds'
+ time.sleep(connectRetryTimeout)
+ continue
+
+ print('Connected to ' + uri)
+
+ data.setConnect(conn)
+ conn.registerCloseCallback(handleConnectClose, data)
+ conn.setKeepAlive(5, 3)
+ conn.domainEventRegisterAny(None,
+ libvirt.VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE,
+ handleAgentLifecycleEvent,
+ data)
+
+ data.setDoms(conn.listAllDomains(libvirt.VIR_CONNECT_LIST_DOMAINS_ACTIVE))
+
+ while data.hasConn() and data.hasDom():
+ processAgentConnect(data.getDom())
+
+ data.waitNotify()
+
+def main():
+ libvirt.virEventRegisterDefaultImpl()
+ libvirt.registerErrorHandler(handleLibvirtLibraryError, None)
+
+ worker = threading.Thread(target=work)
+ worker.setDaemon(True)
+ worker.start()
+
+ eventLoop = threading.Thread(target=virEventLoopNativeRun)
+ eventLoop.setDaemon(True)
+ eventLoop.start()
+
+ while True:
+ time.sleep(1)
+
+if __name__ == "__main__":
+ main()
diff --git a/examples/guest-vcpus/guest-vcpu.py b/examples/guest-vcpus/guest-vcpu.py
new file mode 100755
index 0000000..965b09c
--- /dev/null
+++ b/examples/guest-vcpus/guest-vcpu.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+import libvirt
+import sys
+import getopt
+import os
+
+customXMLuri = "guest-cpu.python.libvirt.org"
+
+def usage():
+ print("usage: "+os.path.basename(sys.argv[0])+" [-hcl] domain count [uri]")
+ print(" uri will default to qemu:///system")
+ print(" --help, -h Print(this help message")
+ print(" --config, -c Modify persistent domain configuration")
+ print(" --live, -l Modify live domain configuration")
+ print("")
+ print("Sets the vCPU count via the guest agent and sets the metadata element " +
+ "used by guest-vcpu-daemon.py example")
+
+uri = "qemu:///system"
+flags = 0
+live = False;
+config = False;
+
+try:
+ opts, args = getopt.getopt(sys.argv[1:], "hcl", ["help", "config", "live"])
+except getopt.GetoptError as err:
+ # print help information and exit:
+ print(str(err)) # will print something like "option -a not recognized"
+ usage()
+ sys.exit(2)
+for o, a in opts:
+ if o in ("-h", "--help"):
+ usage()
+ sys.exit()
+ if o in ("-c", "--config"):
+ config = True
+ flags |= libvirt.VIR_DOMAIN_AFFECT_CONFIG
+
+ if o in ("-l", "--live"):
+ live = True
+ flags |= libvirt.VIR_DOMAIN_AFFECT_LIVE
+
+if len(args) < 2:
+ usage()
+ sys.exit(1)
+elif len(args) >= 3:
+ uri = args[2]
+
+domain = args[0]
+count = int(args[1])
+
+conn = libvirt.open(uri)
+dom = conn.lookupByName(domain)
+
+if flags == 0 or config:
+ confvcpus = dom.vcpusFlags(libvirt.VIR_DOMAIN_AFFECT_CONFIG)
+
+ if confvcpus < count:
+ print("Persistent domain configuration has only " + str(confvcpus) + " vcpus configured")
+ sys.exit(1)
+
+if flags == 0 or live:
+ livevcpus = dom.vcpusFlags(libvirt.VIR_DOMAIN_AFFECT_LIVE)
+
+ if livevcpus < count:
+ print("Live domain configuration has only " + str(livevcpus) + " vcpus configured")
+ sys.exit(1)
+
+
+if flags == 0 or live:
+ dom.setVcpusFlags(count, libvirt.VIR_DOMAIN_AFFECT_LIVE | libvirt.VIR_DOMAIN_VCPU_GUEST)
+
+meta = "<ncpus count='" + str(count) + "'/>"
+
+dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, meta, "guestvcpudaemon", customXMLuri, flags)
--
2.3.5
2
1
The phyp driver stuffed it into a DomainDefPtr during its attachdevice
routine, but the value is never advertised via capabilities so it should
be safe to drop.
Have the phyp driver use OSTYPE_LINUX, which is what it advertises via
capabilities.
---
docs/schemas/capability.rng | 3 ++-
src/conf/domain_conf.c | 3 +--
src/conf/domain_conf.h | 1 -
src/phyp/phyp_driver.c | 2 +-
tests/vircapstest.c | 2 +-
5 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng
index 5f3ec70..88e08d2 100644
--- a/docs/schemas/capability.rng
+++ b/docs/schemas/capability.rng
@@ -262,7 +262,8 @@
<element name='os_type'>
<choice>
<value>xen</value> <!-- Xen 3.0 pv -->
- <value>linux</value> <!-- same as 'xen' - legacy -->
+ <value>linux</value> <!-- same as 'xen' - meant to be legacy,
+ but is also used by phyp driver -->
<value>hvm</value> <!-- unmodified OS -->
<value>exe</value> <!-- For container based virt -->
<value>uml</value> <!-- user mode linux -->
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 479b4c2..6565350 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -120,8 +120,7 @@ VIR_ENUM_IMPL(virDomainOS, VIR_DOMAIN_OSTYPE_LAST,
"xen",
"linux",
"exe",
- "uml",
- "aix")
+ "uml")
VIR_ENUM_IMPL(virDomainBoot, VIR_DOMAIN_BOOT_LAST,
"fd",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 25d3ee6..7a374d7 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -233,7 +233,6 @@ typedef enum {
VIR_DOMAIN_OSTYPE_LINUX,
VIR_DOMAIN_OSTYPE_EXE,
VIR_DOMAIN_OSTYPE_UML,
- VIR_DOMAIN_OSTYPE_AIX,
VIR_DOMAIN_OSTYPE_LAST
} virDomainOSType;
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index e9a31d0..c558c48 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -1720,7 +1720,7 @@ phypDomainAttachDevice(virDomainPtr domain, const char *xml)
if (domain_name == NULL)
goto cleanup;
- def->os.type = VIR_DOMAIN_OSTYPE_AIX;
+ def->os.type = VIR_DOMAIN_OSTYPE_LINUX;
dev = virDomainDeviceDefParse(xml, def, phyp_driver->caps, NULL,
VIR_DOMAIN_DEF_PARSE_INACTIVE);
diff --git a/tests/vircapstest.c b/tests/vircapstest.c
index 5a43d63..0c79af8 100644
--- a/tests/vircapstest.c
+++ b/tests/vircapstest.c
@@ -250,7 +250,7 @@ test_virCapsDomainDataLookupQEMU(const void *data ATTRIBUTE_UNUSED)
VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_PPC64LE,
VIR_DOMAIN_VIRT_QEMU, "/usr/bin/qemu-system-ppc64", "pseries");
- CAPS_EXPECT_ERR(VIR_DOMAIN_OSTYPE_AIX, VIR_ARCH_NONE, -1, NULL, NULL);
+ CAPS_EXPECT_ERR(VIR_DOMAIN_OSTYPE_LINUX, VIR_ARCH_NONE, -1, NULL, NULL);
CAPS_EXPECT_ERR(-1, VIR_ARCH_PPC64LE, -1, NULL, "pc");
CAPS_EXPECT_ERR(-1, VIR_ARCH_MIPS, -1, NULL, NULL);
CAPS_EXPECT_ERR(-1, VIR_ARCH_AARCH64, VIR_DOMAIN_VIRT_KVM,
--
2.3.5
2
3
[libvirt] [PATCH 0/5] Use synchronous block job events in qemu_migration
by Michael Chapman 29 Apr '15
by Michael Chapman 29 Apr '15
29 Apr '15
This patch series converts qemu_migration to use the synchronous block job
event code introduced in commit 630ee5ac.
It fixes two problems:
- Drive mirroring has been broken since that commit, since the event
indicating mirror readiness isn't processed while the VM object is locked.
- Migration did not wait until the drive mirrors were properly cancelled,
and this could cause disk corruption.
Patch 1 moves qemuBlockJobEventProcess into a separate source file so it can
be used by both qemu_driver and qemu_migration. Patch 2 introduces new
qemuBlockJobSync* help functions to manage a synchronous block job. Patch 3
ensures that a thread waiting on a synchronous block job event is woken up
should the domain crash. Patches 4 and 5 use the new synchronous block job
helpers in qemu_driver and qemu_migration respectively.
Michael Chapman (5):
qemuBlockJobEventProcess: move to new source file
qemuBlockJobSync*: introduce sync block job helpers
qemuProcessStop: wake up pending sync block jobs
qemuDomainBlockJobAbort: use sync block job helpers
qemu: migration: use sync block job helpers
po/POTFILES.in | 1 +
src/Makefile.am | 1 +
src/qemu/qemu_blockjob.c | 331 ++++++++++++++++++++++++++++++++++
src/qemu/qemu_blockjob.h | 49 ++++++
src/qemu/qemu_driver.c | 174 +++---------------
src/qemu/qemu_migration.c | 439 ++++++++++++++++++++++++++++------------------
src/qemu/qemu_process.c | 7 +
7 files changed, 676 insertions(+), 326 deletions(-)
create mode 100644 src/qemu/qemu_blockjob.c
create mode 100644 src/qemu/qemu_blockjob.h
--
2.1.0
2
6
29 Apr '15
get_standard_deviation() is to get Standard Deviation, and
param_to_tuple_nolength() allow do not pass lengh when use
param_to_tuple().
Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
utils/utils.py | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/utils/utils.py b/utils/utils.py
index c3e46f6..954b2bf 100644
--- a/utils/utils.py
+++ b/utils/utils.py
@@ -31,6 +31,7 @@ import string
import subprocess
import hashlib
import libvirt
+import math
from xml.dom import minidom
from urlparse import urlparse
@@ -896,3 +897,30 @@ def validate_remote_blk_type(hostname, username, password,
else:
logger.info("lspci and lsmod return nothing")
return 1
+
+def get_standard_deviation(cb1, cb2, opaque1, opaque2, number = 1000):
+ """ pass two callback functions and opaque return Standard Deviation,
+ this function will be useful when need equal some quick change
+ value (like memory, cputime), default loop times are 1000,
+ and notice callback functions cb1 and cb2 should allways success
+ """
+ D = 0
+ for i in range(number):
+ a = cb1(opaque1)
+ b = cb2(opaque2)
+ D += (int(a) - int(b))**2
+ return math.sqrt(D/number)
+
+def param_to_tuple_nolength(paramlist):
+ """paramlist contains numbers which can be divided by '-', '^' and
+ ',', return tuple only have True or False value
+ """
+ d = []
+ a = paramlist.split(',')
+ for i in range(len(a)):
+ if a[i].find('^') >= 0:
+ continue
+ d += a[i].split('-')
+ lengh = max(d)
+
+ return param_to_tuple(paramlist, int(lengh) + 1)
--
1.8.3.1
4
6
29 Apr '15
Add sanity checks for some unsupported/invalid configs of memory devices.
Peter Krempa (3):
qemu: conf: Reject memory device if it would exceed configured max
size
qemu: command: Validate that memory devices slot ID is in range
qemu: Validate available slot count for memory devices
src/conf/domain_conf.c | 11 +++++++++++
src/qemu/qemu_command.c | 19 ++++++++++++++++++-
src/qemu/qemu_command.h | 1 +
src/qemu/qemu_driver.c | 6 ++++++
src/qemu/qemu_hotplug.c | 8 +++++++-
5 files changed, 43 insertions(+), 2 deletions(-)
--
2.3.5
2
5