diff --git a/README.md b/README.md index b9c522a3..2fefb66c 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ All you need to provide is PostgreSQL, Microsoft SQL Server or any MySQL variant ## Latest Release -[Community Edition: v3.7.0](https://github.com/documize/community/releases) +[Community Edition: v3.8.0](https://github.com/documize/community/releases) -[Enterprise Edition: v3.7.0](https://www.documize.com/downloads) +[Enterprise Edition: v3.8.0](https://www.documize.com/downloads) > *We provide frequent product updates for both cloud and self-hosted customers.* > @@ -50,7 +50,7 @@ For all database types, Full-Text Search support (FTS) is mandatory. ## Technology Stack -- Go (v1.13.4) +- Go (v1.14.3) - Ember JS (v3.12.0) ## Authentication Options diff --git a/edition/community.go b/edition/community.go index b0d1a048..0d8108dd 100644 --- a/edition/community.go +++ b/edition/community.go @@ -40,9 +40,9 @@ func main() { // Specify the product edition. rt.Product = domain.Product{} rt.Product.Major = "3" - rt.Product.Minor = "7" + rt.Product.Minor = "8" rt.Product.Patch = "0" - rt.Product.Revision = "200204130935" + rt.Product.Revision = "200521110906" rt.Product.Version = fmt.Sprintf("%s.%s.%s", rt.Product.Major, rt.Product.Minor, rt.Product.Patch) rt.Product.Edition = domain.CommunityEdition rt.Product.Title = fmt.Sprintf("%s Edition", rt.Product.Edition) diff --git a/embed/bindata.go b/embed/bindata.go index 5f3ff341..6d85cc12 100644 --- a/embed/bindata.go +++ b/embed/bindata.go @@ -24,12 +24,11 @@ // bindata/onboard/dmz_section_meta.json // bindata/onboard/dmz_space.json // bindata/onboard/dmz_space_label.json -// bindata/public/assets/.DS_Store -// bindata/public/assets/assetMap-008e1502d1228b4a70335f8af41f1a35.json +// bindata/public/assets/assetMap-a45900b8f69eb159feb8ca100a41909d.json // bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json // bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js // bindata/public/assets/documize-4ee544cff593a82f6c42f144efb818da.css -// bindata/public/assets/documize-9296c7094ce7ee195933e0cccd1beff3.js +// bindata/public/assets/documize-59e28465e64f60780e745ce5f305c872.js // bindata/public/assets/font/MaterialIcons-Regular.eot // bindata/public/assets/font/MaterialIcons-Regular.ttf // bindata/public/assets/font/MaterialIcons-Regular.woff @@ -108,8 +107,6 @@ // bindata/public/assets/theme-sunflower-41d93b240ec10c3f8357bcb205c7ab80.css // bindata/public/assets/vendor-b2be9a3c3aa09c32b38be5ba5d34b312.js // bindata/public/assets/vendor-edb876ab3653e1c4ec07d79685459500.css -// bindata/public/codemirror/.DS_Store -// bindata/public/codemirror/addon/.DS_Store // bindata/public/codemirror/addon/comment/comment.js // bindata/public/codemirror/addon/comment/continuecomment.js // bindata/public/codemirror/addon/dialog/dialog.css @@ -467,7 +464,6 @@ // bindata/public/codemirror/mode/z80/z80.js // bindata/public/favicon.ico // bindata/public/manifest.json -// bindata/public/pdfjs/.DS_Store // bindata/public/pdfjs/LICENSE // bindata/public/pdfjs/build/pdf.js // bindata/public/pdfjs/build/pdf.worker.js @@ -915,7 +911,6 @@ // bindata/public/sections/wysiwyg@2x.png // bindata/public/sections/zendesk.png // bindata/public/sections/zendesk@2x.png -// bindata/public/tinymce/.DS_Store // bindata/public/tinymce/langs/readme.md // bindata/public/tinymce/license.txt // bindata/public/tinymce/plugins/advlist/plugin.min.js @@ -965,12 +960,10 @@ // bindata/public/tinymce/plugins/visualblocks/plugin.min.js // bindata/public/tinymce/plugins/visualchars/plugin.min.js // bindata/public/tinymce/plugins/wordcount/plugin.min.js -// bindata/public/tinymce/skins/.DS_Store // bindata/public/tinymce/skins/content/dark/content.min.css // bindata/public/tinymce/skins/content/default/content.min.css // bindata/public/tinymce/skins/content/document/content.min.css // bindata/public/tinymce/skins/content/writer/content.min.css -// bindata/public/tinymce/skins/ui/.DS_Store // bindata/public/tinymce/skins/ui/oxide/content.inline.min.css // bindata/public/tinymce/skins/ui/oxide/content.min.css // bindata/public/tinymce/skins/ui/oxide/content.mobile.min.css @@ -1119,7 +1112,7 @@ func bindataCrossdomainXml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/crossdomain.xml", size: 585, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/crossdomain.xml", size: 585, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1139,7 +1132,7 @@ func bindataDbErrorHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/db-error.html", size: 2985, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/db-error.html", size: 2985, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1159,7 +1152,7 @@ func bindataFavicon32x32Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/favicon-32x32.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/favicon-32x32.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1179,7 +1172,7 @@ func bindataFaviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1199,12 +1192,12 @@ func bindataFaviconPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/favicon.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/favicon.png", size: 1174, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _bindataIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x5b\x73\xab\x38\x12\x7e\x3e\xf3\x2b\xbc\xae\x4a\xcd\x43\x86\x18\x73\x31\xb0\x1b\xcf\x16\xb1\x71\x2e\xbe\xc6\xb7\x5c\x5e\x52\x92\x68\x81\x12\x40\x04\x04\xb6\x33\x35\xff\x7d\x0b\x63\x3b\x24\xf6\xd9\x3d\xfb\xe4\x52\xf7\xf7\x7d\xea\x6e\xb5\x5a\xe6\xf2\x1f\xdd\x71\x67\xfe\x34\x71\x6a\xbe\x08\x83\x3f\x7f\xbb\x2c\x7f\x7e\x5c\xfa\x80\xdc\x3f\x7f\xfb\xf1\xe3\xb7\xcb\x10\x04\xaa\x45\x28\x84\x76\xdd\xe5\x24\x0b\xd9\x07\x34\x08\x8f\x28\xf3\x1a\x10\xe5\x2c\xe1\x51\x08\x91\xa8\xd7\x08\x8f\x04\x44\xa2\x5d\x3f\x33\xae\xce\x14\x25\xe4\x6e\x16\xc0\x24\x01\xca\xd6\x67\x8a\x72\xa6\xda\x67\x8a\xb2\x17\x28\x0c\x4a\xe7\x4c\x51\x62\xee\x0e\xff\x3b\xb0\x17\x73\x37\x3d\xe0\x03\x4e\x90\x60\x3c\x9a\x6f\x62\x38\x80\x51\x26\xf8\x01\x51\x89\xe9\x00\x88\x13\xee\x66\xa4\xe0\x1d\x60\x09\xe7\x62\x31\x1d\x1c\x20\x67\x4a\xef\xe0\x43\x31\xbb\xe1\xa9\xa8\xf8\x3e\x1d\x23\x14\x42\x1a\x23\x52\xd9\x3d\x66\x07\xc0\xae\x06\x33\x20\x59\xc2\xc4\x66\xc2\x03\x46\x36\x37\x80\x5c\x48\x0e\xf8\x4e\x89\x91\xf6\x20\xa9\x44\x49\x53\x88\x79\x22\xa4\x71\x14\x6c\x0e\x7a\x4e\x88\x21\x71\x46\xcb\x1d\x79\x5b\xd8\x9e\x63\xcf\x17\x53\x67\xf6\x69\x33\xba\x25\xfa\xc5\x9e\x4c\x06\xb7\x1d\x7b\x7e\x3b\x1e\xbd\xcc\x9d\xe1\x64\x60\xcf\x9d\x97\x87\xa9\x3d\x99\x38\xd3\x12\x4e\x51\x90\xc2\x0e\x7d\x77\xbf\x70\xa6\x4f\x2f\xb7\xa3\xb9\x73\x3d\xdd\x92\x4a\x8c\x48\xb2\x3d\xe4\x20\x32\x1e\x0d\x9e\x5e\xae\x07\xb7\xc3\xa1\x33\x7d\xe9\x8c\x87\x93\xf1\xc8\x19\xcd\x67\x15\xc2\x3e\x08\x28\x42\xb6\x85\x40\xc4\x3f\x24\xbd\x8d\x1b\x25\x09\x5f\x1d\x45\x81\x22\x16\xa2\xfd\xc9\x6c\xeb\x43\x59\x10\x14\x8b\x2f\x82\x12\x09\x98\x14\xb2\x04\x79\x50\xd5\x84\x08\xe1\x00\xdc\x23\xd5\x2c\x65\x91\x37\x49\xf8\x7a\x73\xc2\x05\x5d\xa0\x28\x0b\xc4\x04\xa5\xa9\xf0\x13\x9e\x79\x7e\xfa\xb3\x44\xa4\x94\x85\x71\x00\x12\xca\x84\xff\x25\x99\x4c\xf8\x10\x09\x56\x76\xe3\x94\x67\xe2\x4b\x3b\xfa\x17\x01\xf7\x58\xb5\xdb\x32\x01\x36\x15\x90\xd8\x5f\x88\x9f\x49\xf3\xc0\x85\x24\xfd\x4a\xb8\xa5\x76\x90\x00\x72\x37\x15\xd2\x3e\xd9\xaf\x9c\xaf\x31\x0b\xee\x79\xc1\x97\x3a\xb1\x88\x04\x99\x0b\xee\xdc\x87\x10\x76\xc9\x9e\xe9\x85\x27\x60\x9e\x2f\x0e\xdb\x32\xfe\x19\x02\x0d\x58\x5c\x2c\xf4\xbd\xf6\xfa\x67\x1a\xe9\x1b\xac\xca\xb8\xbe\x61\xaf\x50\x0a\x33\xb1\x09\xf6\xf0\xca\x31\xb8\xe5\x19\xcc\x7c\xbe\x1a\x20\x0c\xc1\x4f\x11\xdb\xed\x0e\x39\x57\x03\xdc\x4b\xec\xe6\xc9\xd6\x9f\x86\xa8\xec\x9e\x2a\x62\x4c\xe9\x76\x8f\x03\x6a\x4c\xe9\x11\x26\xfa\x06\x89\xaa\x75\xb5\x27\x93\x6a\x39\x07\xe3\xeb\x97\xa9\x33\x1b\x0f\x96\x27\xee\x55\xe1\xb4\x3b\xf3\xdb\xa5\xf3\x72\xed\x8c\x9c\xea\xcd\xfa\x86\x5a\xde\x3a\x0f\x2f\x83\xf1\xb8\xbf\x98\xcc\x4e\x02\xe6\x53\x7b\x34\xbb\x2d\xf8\xff\xd3\xbf\xbd\xc6\xd3\x91\x3d\x38\x02\x16\xa3\xfb\xe7\x03\x38\x87\x24\xad\x36\xa2\x7a\x61\x5c\xc8\x67\xca\x15\xc2\x96\x4e\x09\x69\x55\xab\x70\x72\xba\x95\xcc\x28\x2b\xca\x5e\x1e\x7d\x31\xc6\xec\x38\x0e\x76\x3d\x7e\x1d\x70\x8c\x82\x6a\x58\x46\xb7\x5e\x6b\x14\x8f\x4b\xf9\xb6\x10\x1f\x25\x29\x88\x76\x3d\x13\x54\x32\xeb\x9f\x0e\x5f\x88\x58\x82\xf7\x8c\xe5\xed\xfa\xa3\xb4\xb0\xa5\x0e\x0f\x63\x24\x18\x0e\xa0\xf2\xdc\xdc\x3a\x6d\x70\x3d\x28\x79\x82\x89\x00\xfe\xec\xee\xb2\xbc\x6c\x94\xeb\x83\x62\x9c\xf0\x18\x12\xb1\x69\xd7\x5d\x5c\xd4\xa5\x22\xf3\xd7\x5f\x17\xdd\xab\xc2\xf6\xf7\xdf\x5f\xa2\xab\x52\x7c\x94\xfa\xdf\x29\x85\xed\xa7\x14\x70\x59\x51\x82\xaf\x1c\xa7\x34\x7e\x23\x95\x2f\x6c\x31\x3b\x78\x52\xc1\xef\x53\x39\x81\x75\x21\x25\x09\x8b\xbf\x6d\x70\x20\x7c\x87\xe7\x0c\x56\xc5\xd1\x54\xb0\x2b\xe6\x0a\xbf\xed\x42\xce\x08\x48\xdb\xc5\x1f\x35\x16\x31\xc1\x50\x20\xa5\x04\x05\xd0\x6e\x5e\xc8\x7f\xd4\x42\xb4\x66\x61\x16\x56\x4d\x59\x5a\xcc\x46\x82\x82\x62\xfe\xb6\x23\xbe\x0f\x2f\x60\xd1\x5b\x2d\x81\xa0\x5d\x0f\x51\xc4\x28\xa4\xa2\x5e\xf3\x13\xa0\xed\x7a\x63\x6f\xb8\x78\x4d\x79\x54\xff\x86\x4e\x7d\x9e\x08\x92\x89\x1a\x23\x45\x36\x3b\x0a\x45\x79\xb1\xbe\x60\x84\xff\x3b\x6f\x2b\xc7\x9b\x94\x68\xb1\x89\xa1\x5d\x67\x21\xf2\xa0\x11\x47\xde\x77\xba\xa4\x2a\x6b\x55\xb9\x88\x23\xaf\x14\x49\xd9\x07\xa4\xed\xfa\xd6\x7a\x2c\x99\x6e\xe7\x95\x0f\xf0\x19\x39\x4a\x53\x10\x69\x23\x87\xc8\xe5\x89\x04\x2e\x36\x8d\x16\xc2\x6a\x4b\x57\xa1\x49\x34\x20\xb2\xe1\x1a\x56\xcb\xd4\x35\xdd\xd2\x65\xf9\x82\xa4\x69\xbd\xc6\x22\x01\x5e\x71\x4b\x8a\xdc\x90\xa2\xb7\x24\x9e\x8d\x6f\x84\x75\x6f\xb8\x66\x66\xf0\x21\x21\x0b\x3c\xc8\x67\x37\xe6\xd5\x72\xf9\xfa\x3e\xce\x42\xf5\xb5\xf7\xd4\x71\x3e\xcc\xf0\x66\x9d\xb6\x6b\xa9\x8f\xf4\xa6\x22\x35\x96\xd3\x73\xb6\xe4\x64\x89\x63\x77\x79\xb5\x99\x0a\x97\xd1\xfb\x66\xc7\x7b\x5e\x98\xc3\x9e\xf6\xae\x3a\xaf\xb2\xe9\xf0\xc6\xac\xdb\x13\xdd\x0c\xee\x22\x96\x85\xc6\xe0\x5d\x1e\x74\xbc\x91\x3b\x3b\x0f\xcf\xdf\x1f\x9d\xa1\x93\xf3\xfe\xc2\xc9\xfa\xe3\x0f\x99\xae\xe2\x27\x1b\xbc\x76\xbb\x5e\xfb\xe5\xac\xf7\x13\x43\xd2\x00\x74\x4d\x23\x94\xea\x96\x8a\x4c\x85\xb6\x88\xa6\xd0\xa6\xa6\x01\xc5\x66\xd3\x74\xd1\xcf\xf2\x86\x1e\xd6\x1e\xa6\x22\xea\xe3\xdc\x5b\x7b\xd1\x33\xea\x91\x06\x5c\xc7\xcf\xf8\x7a\xb4\xe9\x8f\x7c\xf9\xdc\xca\xf2\xf1\xdb\x08\x1b\x33\x7e\xc8\x7b\xd1\x6f\xad\xef\xb4\xfc\xf5\xfe\x6e\x99\xf4\x27\xb6\xd2\x15\x13\xde\xcc\x53\x5f\x19\x75\xfb\x96\x36\xcb\x48\x98\xbd\x53\x8f\xc5\x74\xde\x99\xcb\xc1\x5b\x88\x51\xba\x78\xf5\xbd\xe1\xe2\x01\xee\xef\xfc\xc7\xdb\xbb\x38\xec\x8f\xdc\xa1\x8d\x3f\x5a\x8f\xb9\xf1\x9c\x0e\x9f\xa7\xd7\x33\xfb\x90\x77\x79\x6f\x76\x7d\x23\x60\x2d\x1a\xaf\x28\x47\xa5\x75\xdb\x99\x3f\x56\x2c\x72\xf9\xea\x62\x5b\x83\x21\x8a\x63\x16\x79\xb5\x76\xed\xaf\xc2\x55\xab\xd5\x50\x1c\xff\xb3\xf6\xfb\x51\x85\x2c\xc5\x6a\x11\x43\xb6\x34\x02\x06\x40\xd3\xd2\x2d\x55\x05\x99\x10\xe2\x36\x31\x50\xaa\x5e\xbc\xa6\xbf\xff\xb1\x93\x28\x9b\xa9\xa2\xb2\xeb\x2e\xac\x60\xb0\x90\x4a\x54\x84\x64\x8b\xa8\x0a\x56\x4d\x0c\x3a\x46\xba\xab\x6a\x58\x6d\x2a\x55\x0d\x51\x3c\x8d\xbb\xf7\xeb\x54\x3c\xbf\x72\x62\x5f\xc5\x8a\xff\xf5\x90\x40\x44\xa0\xa2\xb7\xf5\x48\x9f\x2e\xa9\xe5\x62\xc3\x55\x2d\xb5\xe9\x02\x31\x15\xc3\x44\x26\x42\x84\xca\xaa\xec\x62\x8c\x35\xaa\x1f\xeb\x52\x9e\x40\x2a\x8e\x34\x4b\xb3\x64\xca\x84\x60\x85\x34\x0d\xb7\xd9\x22\x56\x8b\x62\x62\xc8\xae\xa5\xb9\x4d\x8b\xa8\x3a\x22\xf4\x58\x0f\x27\x28\x3f\x0e\x71\x6b\x95\x14\xa4\xb4\x54\x2a\x5b\x9a\x65\x1a\x0a\x6a\x19\xb8\x05\xa8\x65\x10\x6c\xc9\x54\x6d\x22\x38\xa1\xe6\xa3\x24\x3f\x15\xde\xce\x2e\x19\x2d\x8c\x74\x30\x54\x0d\x4c\xa0\x54\x03\x0d\x4c\xcb\xa5\xd8\x68\x21\xd4\x34\x2d\xf3\x44\x1d\xd3\x2c\xa2\x01\x5f\x41\x72\xa4\x79\xf0\x48\x5a\xd3\xb5\x54\xac\x68\x32\x90\xa6\x4c\x54\x6a\xaa\xba\x81\x09\x56\x64\x9d\x18\x08\x9b\xf2\x09\x55\x16\xe4\xa7\x24\xb7\x66\x09\xab\x58\x07\x30\x55\xd3\x42\x86\x8c\x2c\x03\xcb\x4d\x85\x58\x32\xd6\x4d\xb9\x89\x30\x54\xa2\xfc\xfb\x5f\xc5\x25\x68\x94\xfd\xbe\xfd\xc8\xfb\x71\xd9\xd8\x7d\xf0\x5d\x62\xee\x6e\x4a\xdb\xe1\x9e\xa4\x09\x39\x9a\x82\xbf\xd0\xa7\xa7\x86\x81\xf5\x31\x37\xbb\x8a\xfe\x76\xff\x44\x45\xe4\x8a\x67\xcb\x9e\x2e\xef\xf5\x7e\x6f\x6d\xdd\x3e\xd2\xd1\xf9\xbd\xd7\xdf\x58\x63\x2d\x56\x22\x57\x3e\x0c\x83\x7b\x47\xbc\x3d\x4c\xa7\x2d\x6b\xa3\xbe\x3d\xde\x18\x39\xcd\xd6\x9d\x27\xf5\x5a\xcd\x06\xd6\x5d\xd2\xcf\xb0\xa1\x8d\xb3\xa8\xb9\x9a\xce\xec\x50\x9d\x74\xaf\x67\xfd\xd7\x1c\x16\x42\xd6\x9d\x79\x60\x5d\x3f\xcb\xd7\xd6\xf3\xda\x50\x8d\xa8\x3f\x41\xab\xab\xde\xa4\x87\xe6\x59\x77\xc0\x57\xdb\x61\x50\x2d\xc2\xc9\x6c\xff\x9f\xbb\x7d\x2a\x5f\x22\x56\x79\x78\xee\x3d\x8d\x6f\xec\x9e\x6c\x76\x6f\xa8\x3a\xcf\xde\x09\x88\x77\xd5\x5e\xc5\x0f\x59\x3e\x0e\x1f\x47\xba\xef\x3f\x7c\xac\xb4\xcf\xe1\x17\xb5\x22\xaa\xf5\xd4\xd7\xb0\xf5\x2e\x3a\x1f\x5d\x3a\xeb\xcb\x1e\x9e\x7d\xd0\x67\x74\x43\xf3\xd7\x78\xe3\x8e\xde\x9f\xd5\x55\x7a\x35\xef\xf6\x20\x4f\xf5\xa1\x9b\xa6\xc1\xbd\x2b\xae\xae\x36\xf3\xb8\xb3\x31\xb5\x81\xff\x6e\x5e\x4d\xd5\xd8\xee\x7a\xc3\xde\xf2\x6e\x1c\xdd\x9d\x4f\xef\x8f\xf2\x2d\x0e\xbd\x3c\xec\xcb\x46\xf9\xd5\xff\x9f\x00\x00\x00\xff\xff\x99\x88\x4b\x32\x0d\x10\x00\x00") +var _bindataIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x59\x73\xab\x3a\x12\x7e\x3e\xf7\x57\x78\x5c\x95\xba\x0f\xb9\xc4\x98\xc5\xc0\x4c\x7c\xa7\x88\x8d\x1d\xc7\x6b\xbc\x65\x79\x49\x49\xa2\x01\x25\x80\x08\x08\x2f\x39\x75\xfe\xfb\x14\xc6\x26\x38\x76\x66\xce\x3c\xb9\xd4\xfd\xf5\xa7\xfe\x5a\xad\x96\xb9\xfe\x47\x7b\xdc\x9a\x3f\x4d\xac\x8a\xc7\x03\xff\xef\x3f\xae\xf3\x9f\x1f\xd7\x1e\x20\xfb\xef\x3f\x7e\xfc\xf8\xe3\x3a\x00\x8e\x2a\x21\x0a\xa0\x59\xb5\x19\x49\x03\xfa\x01\x35\xc2\x42\x87\xba\x35\x08\x57\x34\x66\x61\x00\x21\xaf\x56\x08\x0b\x39\x84\xbc\x59\xbd\xd0\x6e\x2e\x24\x29\x60\x76\xea\xc3\x24\x06\x87\x6e\x2e\x24\xe9\x42\x36\x2f\x24\xe9\x40\x90\x19\xa4\xd6\x85\x24\x45\xcc\x1e\xfe\x77\x60\x27\x62\x76\x52\xe0\x7d\x46\x10\xa7\x2c\x9c\x6f\x23\x28\xc0\x28\xe5\xac\x40\x94\x72\x2a\x00\x51\xcc\xec\x94\x64\x71\x05\x2c\x66\x8c\x2f\xa6\x83\x02\x72\x21\x75\x0a\x1f\x8a\xe8\x2d\x4b\x78\xc9\xf7\xe9\x18\xa1\x00\x92\x08\x91\xd2\xee\x11\x2d\x00\xfb\x1a\xcc\x80\xa4\x31\xe5\xdb\x09\xf3\x29\xd9\xde\x02\xb2\x21\x2e\xf0\xad\x1c\x23\x1c\x40\x42\x8e\x12\xa6\x10\xb1\x98\x0b\xe3\xd0\xdf\x16\x7c\x56\x80\x21\xb6\x46\xcb\x7d\xf0\xae\xb0\x1d\xcb\x9c\x2f\xa6\xd6\xec\xd3\xa6\xb5\x73\xf4\x8b\x39\x99\x0c\x7a\x2d\x73\xde\x1b\x8f\x5e\xe6\xd6\x70\x32\x30\xe7\xd6\xcb\xc3\xd4\x9c\x4c\xac\x69\x0e\x77\x90\x9f\xc0\x1e\x7d\x77\xbf\xb0\xa6\x4f\x2f\xbd\xd1\xdc\xea\x4e\x77\x41\x39\x86\xc7\xe9\x01\x52\x90\x8c\x47\x83\xa7\x97\xee\xa0\x37\x1c\x5a\xd3\x97\xd6\x78\x38\x19\x8f\xac\xd1\x7c\x56\x0a\x38\x24\x01\x59\xca\x26\xe7\x88\x78\x85\xe8\x5d\xde\x28\x8e\xd9\xfa\x24\x0b\x14\xd2\x00\x1d\x4e\x66\x57\x1f\x87\xfa\x7e\xb6\x38\x22\x14\x88\x4f\x85\x80\xc6\xc8\x85\x32\x27\x84\x08\xfb\x60\x9f\xb0\xa6\x09\x0d\xdd\x49\xcc\x36\xdb\x33\x2e\x68\x83\x83\x52\x9f\x4f\x50\x92\x70\x2f\x66\xa9\xeb\x25\xdf\x09\x11\x12\x1a\x44\x3e\x08\x28\xe5\xde\x91\x98\x94\x7b\x10\x72\x9a\x77\xe3\x94\xa5\xfc\xa8\x1d\xbd\x2b\x9f\xb9\xb4\xdc\x6d\x29\x07\xd3\xe1\x10\x9b\x47\x81\x9f\xa2\x99\x6f\x43\x9c\x1c\x07\xf4\x1c\xd3\x8f\x01\xd9\xdb\x52\xd0\x41\xec\x71\xcc\x71\xce\x9c\xb9\xae\x7f\x54\x27\x1a\x12\x3f\xb5\xc1\x9e\x7b\x10\xc0\x5e\xec\x85\x9a\x79\x7c\xea\x7a\xbc\xd8\x96\xb2\xcf\x14\x1c\x9f\x46\xd9\x42\x3d\x70\x6f\xbe\xe3\x48\xde\x60\x9d\xe7\xf5\x05\x7b\x83\x12\x98\xf1\xad\x7f\x80\x97\x8e\xc1\xce\xcf\x60\xe6\xb1\xf5\x00\x61\xf0\xbf\x45\xec\xb6\x2b\x34\x97\x13\x3c\x50\xec\xe7\xc9\xce\x9f\x04\x28\xef\x9e\x32\x62\xec\x38\xbb\x3d\x0a\xd4\xd8\x71\x4e\x30\xe1\x17\x48\x58\xae\xab\x39\x99\x94\xcb\x39\x18\x77\x5f\xa6\xd6\x6c\x3c\x58\x9e\xb9\x57\x99\xd3\x6c\xcd\x7b\x4b\xeb\xa5\x6b\x8d\xac\xf2\xcd\xfa\x82\x5a\xf6\xac\x87\x97\xc1\x78\xdc\x5f\x4c\x66\x67\x01\xf3\xa9\x39\x9a\xf5\xb2\xf8\xff\xe9\xdf\x5d\xe3\xe9\xc8\x1c\x9c\x00\xb3\xd1\xfd\xfd\x00\x5e\x41\x9c\x94\x1b\x51\xbe\xd2\xaf\xc4\x0b\xe9\x06\x21\xa4\x13\x59\xd2\xcb\x55\x38\x3b\xdd\xf2\xc8\x30\xcd\xca\x9e\x1f\x7d\x36\xc6\xcc\x28\xf2\xf7\x3d\xde\xf5\x19\x46\x7e\x39\x2d\xad\x5d\xad\xd4\xb2\xc7\x25\x7f\x5b\x88\x87\xe2\x04\x78\xb3\x9a\x72\x47\xd0\xab\x9f\x0e\x8f\xf3\x48\x80\xf7\x94\xae\x9a\xd5\x47\x61\x61\x0a\x2d\x16\x44\x88\x53\xec\x43\xe9\xb9\xe9\x59\x4d\xb0\x5d\xc8\xe3\x38\xe5\x3e\xfc\xdd\xde\xab\xbc\xae\xe5\xeb\x82\x31\x8a\x59\x04\x31\xdf\x36\xab\x36\xce\xea\x52\xa2\xf9\xf9\xf3\xaa\x7d\x93\xd9\x7e\xfd\x3a\xca\xae\x1c\xe2\xa1\xc4\xfb\x1a\x92\xd9\xbe\x0d\x01\x9b\x66\x25\x38\x8e\xb1\x72\xe3\x97\xa0\xfc\x85\xcd\x66\x07\x8b\x4b\xf8\x83\x94\x33\x58\x1b\x12\x12\xd3\xe8\xcb\x06\x45\xc0\x57\xf8\x8a\xc2\x3a\x3b\x9a\x12\x76\x4d\x6d\xee\x35\x6d\x58\x51\x02\xc2\x6e\xf1\x57\x85\x86\x94\x53\xe4\x0b\x09\x41\x3e\x34\xeb\x57\xe2\x5f\x95\x00\x6d\x68\x90\x06\x65\x53\x9a\x64\xb3\x91\x20\x3f\x9b\xbf\xcd\x90\x1d\xd2\xf3\x69\xf8\x56\x89\xc1\x6f\x56\x03\x14\x52\x07\x12\x5e\xad\x78\x31\x38\xcd\x6a\xed\x60\xb8\x7a\x4d\x58\x58\xfd\x82\x4e\x3c\x16\x73\x92\xf2\x0a\x25\x99\x9a\x7d\x88\x83\x56\xd9\xfa\x8a\x12\xf6\xef\x55\x53\x3a\xdd\x24\x47\xf3\x6d\x04\xcd\x2a\x0d\x90\x0b\xb5\x28\x74\xbf\x86\x0b\xb2\xb4\x91\xa5\xab\x28\x74\x73\x92\x84\x7e\x40\xd2\xac\xee\xac\xa7\x94\xc9\x6e\x5e\x79\x00\x9f\x99\xa3\x24\x01\x9e\xd4\x56\x10\xda\x2c\x16\xc0\xc6\xba\xd6\x40\x58\x6e\xa8\x32\xd4\x89\x02\x44\xd4\x6c\xcd\x68\xe8\xaa\xa2\x1a\xaa\x28\x5e\x91\x24\xa9\x56\x68\xc8\xc1\xcd\x6e\x49\xa6\x0d\x49\x6a\x43\x60\xe9\xf8\x96\x1b\xf7\x9a\xad\xa7\x1a\x1b\x12\xb2\xc0\x83\xd5\xec\x56\xbf\x59\x2e\x5f\xdf\xc7\x69\x20\xbf\x76\x9e\x5a\xd6\x87\x1e\xdc\x6e\x92\x66\x25\xf1\x90\x5a\x97\x84\xda\x72\x7a\x49\x97\x8c\x2c\x71\x64\x2f\x6f\xb6\x53\x6e\x53\xe7\xbe\xde\x72\x9f\x17\xfa\xb0\xa3\xbc\xcb\xd6\xab\xa8\x5b\xac\x36\x6b\x77\x78\x3b\x85\xbb\x90\xa6\x81\x36\x78\x17\x07\x2d\x77\x64\xcf\x2e\x83\xcb\xf7\x47\x6b\x68\xad\x58\x7f\x61\xa5\xfd\xf1\x87\xe8\xac\xa3\x27\x13\xdc\x66\xb3\x5a\xf9\x6d\xd5\x87\x89\x21\x28\x00\xaa\xa2\x10\xc7\x51\x0d\x19\xe9\x92\xd3\x20\x8a\xe4\xd4\x15\x05\x1c\xac\xd7\x75\x1b\x7d\xa7\x1b\x3a\x58\x79\x98\xf2\xb0\x8f\x57\xee\xc6\x0d\x9f\x51\x87\xd4\xa0\x1b\x3d\xe3\xee\x68\xdb\x1f\x79\xe2\xa5\x91\xae\xc6\x6f\x23\xac\xcd\x58\xa1\x7b\xd1\x6f\x6c\xee\x94\xd5\xeb\xfd\xdd\x32\xee\x4f\x4c\xa9\xcd\x27\xac\xbe\x4a\x3c\x69\xd4\xee\x1b\xca\x2c\x25\x41\xfa\xee\xb8\x34\x72\xe6\xad\xb9\xe8\xbf\x05\x18\x25\x8b\x57\xcf\x1d\x2e\x1e\xe0\xfe\xce\x7b\xec\xdd\x45\x41\x7f\x64\x0f\x4d\xfc\xd1\x78\x5c\x69\xcf\xc9\xf0\x79\xda\x9d\x99\x85\xee\xfc\xde\xec\xfb\x86\xc3\x86\xd7\x5e\xd1\x0a\xe5\xd6\x5d\x67\xfe\x58\xd3\xd0\x66\xeb\xab\x5d\x0d\x86\x28\x8a\x68\xe8\x56\x9a\x95\x9f\x99\xab\x52\xa9\xa0\x28\xfa\x67\xe5\xcf\x93\x0a\xa9\x06\x48\xba\xd2\x50\xa1\xa1\x38\x0d\x51\xd3\x45\xd0\x14\x95\x80\xea\xc8\xa2\x4a\x74\x4d\xba\x7a\x4d\xfe\xfc\x6b\x4f\x91\x37\x53\x89\x65\xdf\x5d\x58\xc2\x60\x20\x99\xc8\x08\x89\x06\x91\x25\x2c\xeb\x18\x54\x8c\x54\x5b\x56\xb0\x5c\x3f\xe2\xe0\xd9\xd3\xb8\x7f\xbf\xce\xe5\xf3\x3b\x27\x76\x4c\x96\xfd\xaf\x87\x18\x42\x02\x25\xbe\x9d\x47\xf8\x74\x09\x0d\x1b\x6b\xb6\x6c\xc8\x75\x1b\x88\x2e\x69\x3a\xd2\x11\x22\x8e\x28\x8b\x36\xc6\x58\x71\xd4\x53\x5e\x87\xc5\x90\xf0\x13\xce\xdc\x2c\xe8\x22\x21\x58\x22\x75\xcd\xae\x37\x88\xd1\x70\x30\xd1\x44\xdb\x50\xec\xba\x41\x64\x15\x11\xe7\x94\x0f\xc7\x68\x75\x9a\xe2\xce\x2a\x48\x48\x6a\xc8\x8e\x68\x28\x86\xae\x49\xa8\xa1\xe1\x06\xa0\x86\x46\xb0\x21\x3a\x72\x1d\xc1\x19\x36\x0f\xc5\xab\x73\xe9\xed\xed\x82\xd6\xc0\x48\x05\x4d\x56\x40\x07\xc7\x51\x40\x01\xdd\xb0\x1d\xac\x35\x10\xaa\xeb\x86\x7e\xa6\x8e\x49\x1a\x3a\x3e\x5b\x43\x7c\xc2\x59\x78\x04\xa5\x6e\x1b\x32\x96\x14\x11\x48\x5d\x24\xb2\xa3\xcb\xaa\x86\x09\x96\x44\x95\x68\x08\xeb\xe2\x19\x56\xea\xaf\xce\x51\xee\xcc\x02\x96\xb1\x0a\xa0\xcb\xba\x81\x34\x11\x19\x1a\x16\xeb\x12\x31\x44\xac\xea\x62\x1d\x61\x28\x65\xf9\xeb\x5f\xd9\x25\xa8\xe5\xfd\xbe\xfb\xc8\xfb\x71\x5d\xdb\x7f\xf0\x5d\x63\x66\x6f\x73\x5b\x71\x4f\x92\x98\x9c\x4c\xc1\xdf\xe8\xd3\x73\xc3\xc0\xf8\x98\xeb\x6d\x49\x7d\xbb\x7f\x72\x78\x68\xf3\x67\xc3\x9c\x2e\xef\xd5\x7e\x67\x63\xf4\x1e\x9d\xd1\xe5\xbd\xdb\xdf\x1a\x63\x25\x92\x42\x5b\x2c\x86\xc1\xbd\xc5\xdf\x1e\xa6\xd3\x86\xb1\x95\xdf\x1e\x6f\xb5\x95\x93\x6e\x5a\x4f\x72\x57\x4e\x07\xc6\x5d\xdc\x4f\xb1\xa6\x8c\xd3\xb0\xbe\x9e\xce\xcc\x40\x9e\xb4\xbb\xb3\xfe\xeb\x0a\x16\x5c\x54\xad\xb9\x6f\x74\x9f\xc5\xae\xf1\xbc\xd1\x64\x2d\xec\x4f\xd0\xfa\xa6\x33\xe9\xa0\x79\xda\x1e\xb0\xf5\x6e\x18\x94\x8b\x70\x56\xed\xff\x73\xb7\xcf\xe9\xf5\xa2\x9b\x3e\xea\x44\x8f\x3a\xb0\x8e\xe2\xcb\xf3\x99\x48\xfa\xdb\xf0\xbe\xef\xdd\xde\x7c\x6c\xac\x5e\xff\x81\x10\xc3\xc0\x6b\x98\x7f\xac\x0b\xbd\x4f\xa3\x8e\x31\xc3\xae\xf4\x4c\xdb\x9b\xc1\xec\x6d\xb2\x59\x68\x37\x1f\x2d\x13\x5a\xe9\xe3\x6a\xec\x8e\x66\x5d\xa6\x85\xe2\x7b\x28\x5b\xd1\x6d\x0f\xcf\x74\xcd\x95\x07\x6c\x38\x68\xbb\xfe\xa3\x34\x91\xd2\xcd\x65\x43\xa2\x93\x18\x2d\x15\xfa\x7c\x89\xd8\xd0\x79\x37\xd5\x4e\x1b\x99\x27\x7a\xb3\x43\xcf\x0f\xfb\xba\x96\x7f\xf5\xff\x27\x00\x00\xff\xff\x41\xfe\xea\x0b\x0d\x10\x00\x00") func bindataIndexHtmlBytes() ([]byte, error) { return bindataRead( @@ -1219,7 +1212,7 @@ func bindataIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/index.html", size: 4109, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/index.html", size: 4109, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1239,7 +1232,7 @@ func bindataMailDocumentApproverHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/document-approver.html", size: 7010, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/document-approver.html", size: 7010, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1259,7 +1252,7 @@ func bindataMailEmailHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/email.html", size: 7545, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/email.html", size: 7545, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1279,7 +1272,7 @@ func bindataMailInviteExistingUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/invite-existing-user.html", size: 6937, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/invite-existing-user.html", size: 6937, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1299,7 +1292,7 @@ func bindataMailInviteNewUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/invite-new-user.html", size: 8277, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/invite-new-user.html", size: 8277, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1319,7 +1312,7 @@ func bindataMailPasswordResetHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/password-reset.html", size: 7737, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/password-reset.html", size: 7737, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1339,7 +1332,7 @@ func bindataMailShareSpaceExistingUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/share-space-existing-user.html", size: 6875, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/share-space-existing-user.html", size: 6875, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1359,7 +1352,7 @@ func bindataMailShareSpaceNewUserHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/mail/share-space-new-user.html", size: 7176, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/mail/share-space-new-user.html", size: 7176, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1379,7 +1372,7 @@ func bindataManifestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1399,7 +1392,7 @@ func bindataOfflineHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/offline.html", size: 28734, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/offline.html", size: 28734, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1419,7 +1412,7 @@ func bindataOnboardDmz_categoryJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_category.json", size: 2216, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_category.json", size: 2216, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1439,7 +1432,7 @@ func bindataOnboardDmz_category_memberJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_category_member.json", size: 5881, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_category_member.json", size: 5881, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1459,7 +1452,7 @@ func bindataOnboardDmz_docJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_doc.json", size: 23877, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_doc.json", size: 23877, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1479,7 +1472,7 @@ func bindataOnboardDmz_doc_attachmentJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_doc_attachment.json", size: 22013, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_doc_attachment.json", size: 22013, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1499,7 +1492,7 @@ func bindataOnboardDmz_doc_linkJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_doc_link.json", size: 3584, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_doc_link.json", size: 3584, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1519,7 +1512,7 @@ func bindataOnboardDmz_sectionJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_section.json", size: 6093422, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_section.json", size: 6093422, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1539,7 +1532,7 @@ func bindataOnboardDmz_section_metaJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_section_meta.json", size: 6093846, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_section_meta.json", size: 6093846, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1559,7 +1552,7 @@ func bindataOnboardDmz_spaceJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_space.json", size: 1666, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_space.json", size: 1666, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1579,47 +1572,27 @@ func bindataOnboardDmz_space_labelJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/onboard/dmz_space_label.json", size: 505, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/onboard/dmz_space_label.json", size: 505, mode: os.FileMode(493), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _bindataPublicAssetsDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x99\x4f\x6c\x14\x55\x1c\xc7\x7f\xdf\x65\x81\xf7\xe4\x4f\x5f\x11\xb6\x2d\xb0\xb0\x5a\xaa\x05\x17\x6d\x0b\xa5\x20\x7f\xb2\xb4\xa5\x50\x51\x41\xb7\x65\x4b\x8b\x2c\xb3\x3b\x0f\x3a\x71\x76\xa6\xec\xcc\xee\x42\x6b\x49\xa3\x46\x2f\x42\xa2\x51\xa3\x1e\x54\xc2\x4d\x88\x27\x39\xe8\xc1\x8b\x91\x90\x98\xa8\x31\x4d\x10\x23\x17\x0f\x1e\xbc\x60\xf4\xe2\xc9\x98\x99\x79\x0b\x4b\xa5\x7a\x32\x18\x98\x4f\xb2\xf9\xce\xfb\xbd\x3f\x33\xbf\xbe\xef\xcc\xcb\x7b\x25\x22\x74\x97\xf4\x76\xa2\x46\x22\x62\x14\xa8\x58\x40\xb7\x85\xa9\xdf\xdf\x88\x28\x8d\x7a\xe3\x11\x09\xca\x55\x9c\xb1\x9c\x69\xe7\x88\xe8\xf2\xed\xc7\x0a\x09\x09\x09\x09\x09\x09\xb9\xc3\x20\x10\x36\xcb\xba\x1f\x12\x12\x72\x0f\xe3\x7d\x1f\x12\x4a\x53\x4a\xa7\x02\x85\xaa\x8f\x28\x8d\xd6\xf4\x11\x4a\x13\x4a\x53\x4a\xa7\x02\x85\x6a\x17\x51\x1a\x55\xca\x94\x0a\xa5\x09\xa5\x29\xa5\x53\x81\xaa\x8f\x16\xd4\xe6\x03\xea\xce\x50\x3b\x14\x08\xa5\x09\xa5\xa9\xff\xe6\x6f\x13\x12\x72\x37\x10\xf5\x7f\x47\xc9\x26\x8b\xdc\xda\xfd\x7b\x6e\xcc\x34\x1c\xb7\xad\xed\x0a\x22\x73\xa2\x73\xe7\xcd\x67\x1e\x8b\xd8\x73\xe9\x51\xbb\x92\x76\x35\xb7\xe4\x74\x6b\xc5\x11\xaf\xb4\x5f\x73\x47\x73\xea\x7a\xc0\xb6\xcd\x1b\xd7\x5a\xee\x80\x21\x2b\x59\xb1\xb4\xc7\xb6\x5c\xcd\xb0\x64\xd1\xef\x6c\xe8\x32\xa7\x15\x0f\x65\x0c\x4b\xb7\x2b\xdd\x76\xc9\xd2\x9d\x91\x9a\x0a\xee\x91\x15\x0d\x13\x13\x1d\x5b\x92\x89\xcd\x6d\x93\xc9\xc4\x44\x7b\xfb\xc6\xce\x64\xa2\x6b\x73\xe7\xe4\x24\x67\x0d\x2d\xed\xdb\xfb\x8f\x14\x4e\x8e\x4f\xbc\x30\x79\xea\x9d\x20\x8d\xea\x67\x81\xea\x66\xe4\xf7\x6e\x6d\x7e\xa6\x53\xee\x09\xf2\x8b\x9c\xac\xe6\xf7\x7d\x35\x3f\xce\x17\xc4\xfa\x76\xef\xe9\xcf\x0a\x51\x72\xe4\xb3\xd2\xd4\x5c\xa3\x2c\x7b\x35\x57\x3a\x59\x51\xe7\x8c\xda\x95\xfe\xbc\x6d\xed\x2f\xca\xb2\x21\x2b\x99\xbc\x6d\x96\x0a\x96\x93\x15\xf5\x79\xcd\xcc\x97\x4c\xcd\x95\x3b\x4d\x33\x6d\x8c\x4b\x67\xc8\x95\x27\x5c\xef\x6a\xd8\xb1\x8b\x6e\x8f\xdf\x70\xc8\xc8\xdb\x96\x17\xcb\x8a\x25\x5e\xff\x7d\x63\xae\x61\x5b\xce\x01\x59\x74\x0c\xdb\xe2\xfc\xfc\xc2\x65\xcb\x57\x37\xb7\xae\xef\xe8\xda\xb6\x73\x7a\xd1\xe2\x3a\x51\xbf\x84\xf3\x61\x43\x97\x96\x6b\x1c\x35\x64\x71\xb0\x62\xe8\xee\xe8\x41\xcd\xc9\x4b\x4b\x37\xac\x63\x99\xb2\xe1\x18\x39\x53\x0e\x58\x5a\x41\xd6\x47\xba\x38\x9f\x16\x8b\xeb\x16\xc5\x1a\x62\x4d\x4c\x34\xb3\xa1\x52\xce\x38\x5e\x32\xdc\x93\x7e\x94\xaf\x8c\xad\xe2\xe2\x22\x3b\xa4\x6b\xae\x7c\xca\xd6\xbd\x11\xf5\xa0\xfd\xca\xd8\x83\x8c\x8d\x78\xf1\x9e\xa2\xd4\x5c\x15\xe6\x2d\xb1\x87\xb9\xd0\xd8\x80\x63\x8c\xcb\x20\xb2\x8e\x27\xb9\x70\xf8\xc0\xf3\x86\xa5\xba\x3e\xc6\xdb\x99\xd0\xf9\xa0\xa9\xe5\xa4\x19\x84\x36\xf2\x4d\x4c\xec\xe5\x99\x72\x90\x56\x10\xdc\xc2\xb7\xb2\x7a\x24\xf9\x50\xde\x2e\x14\xa4\xe5\x3a\x41\x78\x47\x2c\xc5\xc4\x65\x76\xd8\xbb\xf7\x93\x9a\xe3\xee\x1b\x93\xd6\xcd\xa7\xea\x65\xec\xa0\x57\xb3\x53\xd7\xa5\xce\x9a\x53\xad\xc1\x6c\xfa\xe9\x36\xa7\xda\x82\x92\xf0\x16\x8d\x26\x4a\xd2\x0e\xea\xa3\x61\xca\x93\x45\x15\x7a\x8d\x4e\xd3\x19\x7a\x8f\xce\xd1\xc7\xf4\x09\x7d\x4e\x97\xe8\x2b\xfa\x9a\xbe\xa1\x6f\xe9\x2a\xfd\x40\x3f\xd2\x35\xfa\x99\xae\xd3\xaf\xf4\x1b\xfd\x0e\x02\xc7\x7d\x58\x80\x06\x24\xf0\x00\x9a\xb1\x06\x6b\xd1\x81\x0d\xe8\xc4\x26\x6c\x45\x2f\x76\x61\x37\xf6\xe0\x69\x64\x30\x84\x61\x8c\x20\x0f\x13\x05\x8c\xe1\x38\xc6\xf1\x12\x5e\xc6\x2b\x78\x15\x6f\xe3\x03\x7c\x88\xb3\x38\x8f\x0b\xb8\x88\xcf\xf0\x45\xf0\x6c\x91\xaa\x21\x9f\xb8\xd5\x8f\xf8\x72\x86\x21\xd5\x0b\x17\x39\x7c\x3b\x43\xc6\xfb\x76\xef\x59\x73\x47\x0c\x79\x75\x61\xe0\xc2\xfb\x97\x2e\x5b\xd5\xdc\x9a\x6c\xdf\xb4\x35\x75\x63\x02\x67\xcc\xd9\x2d\xb6\xaa\xf5\x92\x6f\x9f\xc0\x1f\xbe\x6f\xaa\xbe\xf0\x67\x71\x3a\xd6\xd0\xd8\xb4\x7c\x05\x8f\x0f\x1a\x96\x2e\x4f\xcc\x66\x70\x31\xdf\xf3\x0e\xf3\x5b\xaf\x4e\xc4\xe3\xc2\x33\x4d\x50\x5c\xd3\x12\xe7\x02\xe2\x22\xe3\x7e\x71\x6d\x4b\x3c\x2e\x22\xaa\x6e\xfd\xa3\x71\x2e\xe6\x08\x4d\xd5\x75\x6c\xe0\x71\x31\x57\xe8\x6a\xa0\xae\xcd\x9c\x8b\xa8\x70\x78\x50\xbb\x6d\x3b\x8f\x8b\x79\x62\x2f\x67\xd3\x4d\x0d\x8d\x31\xde\xcd\x7b\xb9\xf7\x4e\x09\x9a\xcd\x79\xb3\xfa\xee\x2c\x7d\x44\x9f\xd2\x25\xfa\x8e\xae\xd0\x35\xfa\x89\x7e\xa1\xeb\xf4\x07\xfd\x89\x28\x16\x23\x86\x46\xac\xc0\x4a\xc4\xf1\x10\x5a\xb1\x0e\x8f\x20\x89\x4e\x74\x61\x0b\x1e\xf7\xdd\xd6\xe7\xbb\xed\x19\xa4\x31\x88\x03\xc8\xe0\x08\x72\xd0\x21\x71\x14\x36\x8e\xc3\x81\x8b\x12\x4e\x61\x0a\x2f\xfa\xde\x3b\x8d\x33\x78\x1d\x6f\xe0\x4d\xbc\x85\xf7\x71\x6e\x86\xeb\xfa\x67\xb8\xee\x42\xad\xeb\xca\xe9\xa2\x65\xda\xd6\xb1\x9b\x5b\xc0\x90\x7b\x91\x39\x81\x34\x7a\xfb\xff\x5d\xb3\x9f\xff\x87\x84\x84\xdc\xc5\x20\xda\x9b\xee\xed\xfe\x87\xd5\x20\xa2\x0e\x02\x8e\x54\x3b\xfc\xcb\x41\x00\x6a\xfe\x61\xf8\xbf\x3b\x08\x08\xd7\xff\x70\xfd\x0f\xa1\xbf\x02\x00\x00\xff\xff\xe7\x28\x66\xd0\x04\x20\x00\x00") +var _bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xd2\x51\x4e\xe3\x4c\x0c\x07\xf0\x77\x4e\x51\xf5\xf9\x0b\xcc\x8c\x3d\x33\x36\x77\xf8\x0e\x61\x7b\x3c\x82\x0a\x9a\x2a\x09\x5d\x69\x57\xdc\x7d\x55\xba\xec\x16\x48\x79\x8a\xec\x7f\xfc\xb3\xa5\xe4\xd7\xcd\x66\xb3\x95\x79\xf6\x65\xde\xde\x6f\x4e\xd5\xdf\xfa\xee\xed\xf1\xbf\x1c\x6e\x77\xf3\xb8\xdf\xde\x7f\xe9\x0f\xd6\x00\x22\x27\x2e\xe8\x64\x29\x48\x67\xe0\xd8\x1c\xa8\x69\x47\x64\x3d\x0f\xfe\xf7\x11\x7d\x59\xc6\xe1\xf1\xf9\x30\x4e\xcb\xd0\x65\x5e\x74\x1c\x97\xdb\xdd\x7c\xc9\xaf\xbc\x31\x34\x8c\x8d\xac\x31\xf5\x10\x34\x05\x74\xa6\x10\x98\xc9\xad\x13\xa6\xea\x27\xe2\xe3\xa2\x36\xda\xcb\xf3\xe3\x4f\xbf\xb5\xf9\x52\x7f\x6f\x0f\xe8\x9e\x11\xad\xf7\xcc\x20\x94\x7a\x31\x4c\x3d\x22\x7a\x57\x8a\xd4\xe4\x6d\xee\x0a\xb9\x5b\x15\x33\x7b\x22\x2c\xd9\x0b\xf6\x12\x2a\x05\xaf\x98\xcd\x73\x87\x90\x8d\x6a\xfa\x7a\xe3\xf2\xe0\xcf\x3e\xe8\x24\xc7\xcf\x67\x5e\x24\x43\x92\x54\xa0\x07\x46\xa6\x9a\xa4\x54\x2d\x2e\xa5\x9a\x72\xe8\x10\xc5\xfb\xca\xa5\xe7\x71\x1b\xf7\xdd\x27\xdf\xdb\xba\xfe\x2f\x1e\x4a\xd3\xda\x80\x21\x36\x37\x4a\x95\x84\x44\xac\x07\x08\x4d\x55\xb1\xe7\xab\x2b\xfa\x38\xf9\xbc\xac\xf2\xe7\x68\xa0\x60\xa6\xc9\x62\x6d\xb1\x18\x97\xae\x56\x43\x63\x6c\x91\x0d\xb2\xd8\xf5\xeb\x1f\x64\x3a\x5e\xb3\xff\x64\x43\x2d\x2a\xd9\x2b\xa0\x93\xf7\x8e\x8e\x4e\xdc\xba\xd6\x22\x12\x89\x69\xed\x23\x9e\x81\xf9\xf1\xe9\xe8\xd3\xaa\x7d\x8e\x06\x05\xcd\xee\x04\xc4\x52\x83\x70\xd5\x10\x93\x71\xd0\x4c\x21\x8a\xfa\x37\xf4\xcb\xbe\x3f\x8d\x3f\xae\xe9\xef\xe9\x80\xb1\x31\x68\xc2\xe0\x16\x83\x41\x27\xc8\x55\x4d\x53\xc8\x56\x45\x29\xac\x2c\x38\xfa\xbe\x8d\x9f\xdd\x73\x73\xf0\xa6\x54\x8b\x28\x94\x0c\x1e\x0d\xdd\x42\x6d\x95\x0b\x65\xcc\x9c\xc3\x37\xdc\x6e\x45\xd3\xa4\xce\x02\x06\x22\x81\x0d\x92\x02\xa9\x67\x95\xdc\x00\x15\xe2\xdb\xbf\x7c\xb3\xd9\xbc\x9e\xc0\xed\x61\xf2\x83\xef\xdb\x49\xb9\xdb\xde\xbc\xfe\x0e\x00\x00\xff\xff\x27\x9e\x1d\x1b\x54\x04\x00\x00") -func bindataPublicAssetsDs_storeBytes() ([]byte, error) { +func bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJsonBytes() ([]byte, error) { return bindataRead( - _bindataPublicAssetsDs_store, - "bindata/public/assets/.DS_Store", + _bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJson, + "bindata/public/assets/assetMap-a45900b8f69eb159feb8ca100a41909d.json", ) } -func bindataPublicAssetsDs_store() (*asset, error) { - bytes, err := bindataPublicAssetsDs_storeBytes() +func bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJson() (*asset, error) { + bytes, err := bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJsonBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/.DS_Store", size: 8196, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xd1\xdd\x4e\xe3\x4a\x0c\x07\xf0\x7b\x9e\xa2\xea\xf5\x09\xcc\x8c\xe7\xc3\xe6\x1d\xce\x43\xd8\x1e\x5b\x50\x41\x53\x25\xa1\x2b\xed\x8a\x77\x5f\x95\x2e\xbb\x05\x52\xae\x22\xfb\x1f\xff\x6c\x25\xbf\x6e\x36\x9b\x2d\xcf\xb3\x2d\xf3\xf6\x7e\x73\xaa\xfe\xd6\x77\x6f\x8f\xff\xf9\x70\xbb\x9b\xc7\xfd\xf6\xfe\x4b\x7f\xd0\x0e\x10\x29\x51\xcd\x86\x9a\x02\x3b\x01\xc5\x6e\x80\x5d\x3c\x67\x92\xf3\xe0\x7f\x1f\xd1\x97\x65\x1c\x1e\x9f\x0f\xe3\xb4\x0c\xce\xf3\x22\xe3\xb8\xdc\xee\xe6\x4b\x7e\xe5\x8d\xa1\xe7\xd8\x51\x3b\xa1\x87\x20\x29\x64\x23\x0c\x81\x08\x4d\x1d\x73\x6a\x76\x22\x3e\x2e\xea\xa3\xbe\x3c\x3f\xfe\xb4\x5b\x9d\x2f\xf5\xf7\xf6\x90\xcd\x4a\xce\xea\x5e\x08\x18\x93\x57\xcd\xc9\x63\xce\xe6\x82\x11\x3b\xbf\xcd\x5d\x21\x77\xab\xe2\xe9\x4b\x68\x0b\x94\xd5\x9a\x59\xa4\x42\x00\x16\x54\xb5\x47\x31\x77\xf8\x7a\xe3\xf2\x60\xcf\x36\xc8\xc4\xc7\xcf\x67\x5e\x24\x43\xe2\x54\xc1\x03\x65\xc2\x96\xb8\x36\xa9\xc6\xb5\xa9\x50\x70\x88\x6c\xbe\x72\xe9\x79\x5c\xc7\xbd\xdb\x64\x7b\x5d\xd7\xff\xc5\x43\xed\xd2\x3a\x10\xc4\x6e\x8a\xa9\x21\x23\xb3\x7a\x80\xd0\x45\x24\x7b\xb9\xba\xc2\xc7\xc9\xe6\x65\x95\x3f\x47\x03\x06\x55\x49\x1a\x5b\x8f\x55\xa9\xba\x68\x0b\x9d\x72\x8f\xa4\x50\x58\xaf\x5f\xff\xc0\xd3\xf1\x9a\xfd\x27\x1b\x5a\x15\x2e\xd6\x20\x1b\x9a\x7b\xb6\x6c\x48\xdd\xa5\x55\xe6\x88\x84\x6b\x3f\xf1\x0c\xcc\x8f\x4f\x47\x9b\x56\xed\x73\x34\x08\x48\x31\x43\x40\xe2\x16\x98\x9a\x84\x98\x94\x82\x14\x0c\x91\xc5\xbe\xa1\x5f\xf6\xfe\x34\xfe\xb8\xa6\xbf\xa7\x43\x8e\x9d\x40\x52\x0e\xa6\x31\x28\x38\x42\x69\xa2\x92\x42\xd1\xc6\x82\x61\x65\xc1\xd1\xf6\x7d\xfc\xec\x9e\x9b\x83\x75\xc1\x56\x59\xa0\x16\xb0\xa8\xd9\x34\xb4\xde\xa8\x62\xc9\x85\x4a\xf8\x86\xdb\xad\x68\x92\xc4\x88\x41\x81\x39\x90\x42\x12\x40\xb1\x22\x5c\x3a\x64\x81\x98\x4e\x43\x37\x9b\xcd\xeb\x09\xdc\x1e\x26\x3b\xd8\xbe\x9f\x94\xbb\xed\xcd\xeb\xef\x00\x00\x00\xff\xff\xe7\x9a\x38\x68\x54\x04\x00\x00") - -func bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35JsonBytes() ([]byte, error) { - return bindataRead( - _bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35Json, - "bindata/public/assets/assetMap-008e1502d1228b4a70335f8af41f1a35.json", - ) -} - -func bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35Json() (*asset, error) { - bytes, err := bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35JsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/assets/assetMap-008e1502d1228b4a70335f8af41f1a35.json", size: 1108, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/assetMap-a45900b8f69eb159feb8ca100a41909d.json", size: 1108, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1639,7 +1612,7 @@ func bindataPublicAssetsAssetmapCd33192964e8c20af9391de38dbf449bJson() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json", size: 39, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json", size: 39, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1659,7 +1632,7 @@ func bindataPublicAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs() ( return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js", size: 0, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js", size: 0, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1679,27 +1652,27 @@ func bindataPublicAssetsDocumize4ee544cff593a82f6c42f144efb818daCss() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/documize-4ee544cff593a82f6c42f144efb818da.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/documize-4ee544cff593a82f6c42f144efb818da.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x73\x13\x39\xbe\x38\x8e\x3f\xcf\xab\x70\x34\xff\xca\xba\x4f\x14\x27\x01\x66\x76\x8f\x67\x3d\x14\x03\xec\x2e\xe7\x00\xc3\x21\xb0\xfb\xad\xe2\x4f\x51\x4a\xb7\x62\x6b\xd2\x96\xbc\x2d\x39\x21\x93\xf8\xbd\xff\x4a\xfa\x48\x6a\xa9\x5b\x6d\xb7\x93\xcc\xc0\x6c\xcd\x13\x88\x5b\xf7\xdb\xe7\x7e\x41\x4b\x49\x07\x52\x55\x2c\x57\x68\xa7\xa0\x67\x8c\xd3\x21\x2a\x44\xbe\x9c\xb3\x5f\xe8\x21\x59\x2c\x10\xfe\x80\xe8\xe7\x85\xa8\x94\x44\xb8\x2e\xa9\xa8\x14\xe5\x05\xad\x10\x46\x74\x7e\x4a\xab\x83\x52\x90\xe2\x80\x71\xa6\x18\x29\xd9\x2f\xb4\x8a\x6a\xe7\x82\x9f\xb1\xe9\x21\xe5\x17\xac\x12\x7c\x4e\xb9\x42\x1f\xf1\xd9\x92\xe7\x8a\x09\x3e\xa4\x58\x61\x8e\x45\x76\x5d\x52\x35\x90\x3b\x3f\x9d\xfe\x4c\x73\x35\x82\xc9\xbc\xa9\xc4\x82\x56\xea\x6a\x48\x31\xfa\xf4\x89\xca\x57\xa2\x58\x96\x14\xe1\xeb\x0b\x52\x2e\xe9\x78\xf7\x68\x95\x61\xaa\xeb\x92\x65\xa9\x26\x17\x82\x15\x83\x23\x2c\x27\xcf\xf5\x9c\x46\x4f\x16\x8b\x92\xe5\x44\x0f\x32\xa2\x9f\x15\xe5\xc5\xf0\x7a\x6e\x3a\x78\x53\xd1\x33\xf6\x79\x2c\x5c\xcb\x51\xf8\x19\x2f\x44\xf1\x2a\x5d\xad\x51\x82\xdf\xda\x6d\x18\x2b\x57\x65\x95\xe1\xe1\x11\xe6\xee\x67\x36\x94\x38\x3d\x4a\xb6\x73\x41\xaa\x01\x9b\xc8\x9d\x7a\xfe\x6c\x95\xe1\xf6\x21\x2c\xd5\x8c\x72\xa5\x17\x22\x2a\x79\x48\xb8\xe0\x57\x73\xb1\x94\xf1\xc9\xc0\x29\x48\x36\x5f\x94\xf4\x40\x37\x69\xb6\x3b\x25\x92\x36\x76\x3d\xbb\xbe\xf3\x5e\x9b\x45\xf0\x89\x5f\xbe\xdf\xe7\x8a\x4a\x25\x2a\x3a\xa6\x93\x1f\xe0\x30\xde\x9e\xfc\xf3\xcd\xc8\x5e\x9b\x21\xcd\x70\x30\xbd\xee\x5a\xab\x2c\xd8\x1d\xde\x63\x77\x72\x72\xab\x7d\x09\xee\xea\x52\xb1\x52\x1e\x72\xda\xbe\xa2\xf7\xb5\x5d\x22\xb1\x5d\xe4\x67\xf2\x79\x0c\x5b\xc0\xb8\x19\x44\xd2\xea\x82\xe5\x74\x98\x61\xb2\x58\xbc\xa2\x8a\x74\x15\x97\x22\x27\xe5\x89\x12\x15\x99\xd2\xae\x3a\xc1\x69\xd0\xc7\xc9\x9d\x1e\x47\x5f\x75\xf3\x61\x7c\x46\x43\x9a\x5d\x57\x54\x2d\x2b\x3e\xa0\xa3\x42\xcc\x09\xe3\x13\x7f\xcd\x47\x53\xaa\x4e\x96\xa7\xf0\x79\x98\x61\x3b\x0d\xf9\xa6\xa2\x92\x72\x35\xa4\x23\xc5\xf2\x73\xaa\xb2\xc7\x6a\xc6\xa4\xae\x3d\x44\x7a\xc9\x28\x1b\x2d\x84\x54\x43\xb4\x58\x9e\x96\x2c\x0f\xcf\x86\xc2\x59\x5e\x17\x44\x91\xf1\xff\x9c\xfc\xf4\x7a\xa4\xc1\x14\x9f\xb2\xb3\x2b\x7d\x7d\x72\xc1\x15\xe5\xea\xdd\xd5\x82\x8e\xd1\xcf\x52\x70\xb4\x4a\xad\x01\xe9\xe6\x76\xf0\x01\x93\x03\x3a\x5f\xa8\x2b\x94\xad\x30\xe3\x17\xa4\x64\x85\x5e\x98\x5f\x57\x3d\xb7\x70\x4f\x51\x36\xca\x4b\x4a\xaa\x27\x65\xe9\x57\x16\x6d\x5e\xb6\x8a\xae\xa9\xe8\x71\x4d\xdd\xf7\x0e\xe8\x0a\x77\x90\xf2\x5c\x14\x8c\x4f\xd3\xb7\xf3\x76\x4f\x1e\x00\xed\xfd\xdc\x63\x39\x11\xbf\xd3\x7b\xac\x11\x8d\xc0\xb2\xf3\xfe\xee\xb0\xb3\x21\x12\x66\x93\xd0\x64\xa2\xae\x16\x54\x9c\x0d\xa0\xdd\xf5\x82\x48\x79\x29\xaa\x62\xcc\x31\x9d\x13\x56\x8e\xd9\x6a\x42\x75\x83\xdd\xe6\xa5\xe7\xd9\xcd\x4d\xeb\x23\xcb\x32\x7b\xdb\x12\x97\xd5\x5e\x4a\x94\xed\x84\x30\xe2\x47\x22\xe9\x77\x8f\x46\xe6\x3a\xd0\x21\x42\xa3\x5c\xf0\x9c\xa8\xa1\xc4\x68\xac\x2f\x27\xfc\x62\xd1\x2f\x9e\x65\x2b\x5a\x4a\x7a\xad\x57\x02\x0f\x07\xed\xd6\x2b\xe9\x37\x05\xba\xd2\x1b\xc5\x26\xd7\x4f\x96\x6a\x26\x2a\xf6\x8b\x41\xa5\x63\xf4\x23\x91\x2c\x1f\xa0\x7d\xb1\xda\x69\xbd\x9c\x4d\xaf\x1a\xe1\xeb\x19\x25\x05\xad\xe4\x98\xad\x7e\xd5\x77\x28\x7b\xbc\xc3\x73\x7a\x95\x97\x82\x9c\xaf\x7d\x87\x77\x79\x6d\xf7\x87\x33\xf8\x7d\xbe\xb5\xf3\x5c\x1f\xe9\x57\xf0\x12\x9b\x18\x45\x6d\x81\x51\xc4\x39\xe5\xd9\xe3\x76\x81\x79\x96\x5b\x61\x9a\xfa\x1a\xdc\x0b\xba\x31\x13\x08\xb0\x4d\x37\x5e\xd2\x4b\xb8\x17\xb4\x54\xd7\x81\xa3\x45\xd9\xa8\x14\x53\xb1\x54\xb7\xc1\x4e\x65\x41\xba\xe8\xfe\x3f\x30\xd3\xef\x02\x33\x2d\x25\xad\x38\x99\xd3\x3f\x90\xd3\x56\xc8\xc9\xde\xfc\x2f\x8a\xa1\x72\x31\x5f\x08\x4e\xb9\x92\x87\x44\x29\x92\xcf\x0e\x16\x62\x21\x0c\xab\xdd\xe6\x6b\xa0\x06\xad\xd6\xb4\xba\x33\xcb\xd7\xd9\xc0\x2e\x03\xe1\x6b\xca\x97\x73\x5a\x91\xd3\x52\x37\xc1\x53\xaa\xc6\x7e\xcc\x7a\xcb\x3c\x87\xbc\xca\xfa\xad\x5b\x09\x51\x2a\xb6\xd8\x72\xdd\xae\xd5\xef\x70\xdd\xf9\x52\x2a\xe1\x01\xf2\x81\xa4\x4a\x31\x3e\x6d\x30\xb4\x3f\xff\x7b\x49\xab\xab\x10\xf2\xce\xd9\x67\xc6\xe5\x21\x17\x8a\x9d\x31\x23\x92\x69\x16\xcd\x45\x41\xca\x35\x60\xbc\x0d\x89\xb1\xbc\x2f\x58\xcc\xac\x30\xe6\xa9\x5b\xa7\x83\xc8\x1e\x44\xd7\xd2\x12\x7c\xbd\x01\x12\x4f\x4b\x71\x4a\xca\x93\x8b\x3c\x5d\x01\x41\x39\xca\x30\x93\xcf\xec\x5a\xdf\x54\xe2\x82\x15\xb4\xb2\x2d\xf4\x76\x2f\x15\x2d\x86\x48\xef\xb1\x2b\x44\x38\x71\x70\x35\xd8\x08\x6b\x66\x93\xc9\xa4\x2e\xca\x05\x97\x8a\x70\x25\x51\x36\x7a\x12\x54\x1b\xb9\xe1\x57\x7a\x2e\xff\x6b\xe9\x8b\x2f\x34\x17\x37\xbc\x99\xcb\xcb\x67\x4f\xde\x7c\xa1\x79\xe8\xa1\xcd\x1c\x9e\x3e\x39\xf9\x42\x53\x78\xfa\xe4\x64\x95\x61\xb7\x21\xef\xab\xf2\x79\x55\x89\xe6\x24\x46\x86\x1c\x1b\x22\x47\x16\x3e\x35\xe2\xcb\xd1\xb2\xd2\x37\xcb\xb5\x7d\x4b\x49\x39\xdf\xa2\x75\xa5\xeb\x07\xed\x9f\x96\x8c\x72\xf5\xa2\xd8\xa2\x8b\xdc\x36\x09\x7a\x79\x63\x90\xd8\xff\xd2\xab\x2d\xba\x59\xb8\x36\x41\x3f\x4f\x8a\x39\xe3\xef\x25\xad\xb6\xe8\x87\xb8\x36\xcd\x7e\xde\x58\x42\x64\xdb\xbe\x5c\x3b\x94\x61\x57\xfc\x37\xc2\xca\x65\x45\xc7\x08\x61\x8d\x9b\x4d\x8f\x27\xb4\xba\xa0\xd5\x3f\x84\x54\x1d\x7d\xeb\x9a\xb6\x5f\xe9\xeb\xa2\xac\xd9\xc3\x1b\x51\x35\x7b\x48\xb4\xd5\xb5\x52\xf7\xf0\xd3\x88\xc9\xe7\x66\xbc\x80\x18\x48\x36\xce\x34\xa9\xa5\xab\xbf\x5e\xea\xc1\x86\x0b\x52\x49\xfa\x82\xab\x1e\x0d\x35\xc6\xf0\xb3\xfe\x91\xf1\xe2\xd9\xeb\xcd\x6b\x3e\x35\xf5\x50\xa3\xa5\xdb\xdc\x7e\xed\x83\xa3\xf0\xbd\xbc\x16\x7f\x63\xa5\x4a\x3c\xd9\xa0\xed\xb5\xa6\x3c\xa1\x1a\x9e\x56\x62\xb9\x80\xbf\x57\xb7\xd8\xc1\xba\x27\x94\x65\x7b\x7b\x1b\x6a\x07\x83\xa1\x78\xdb\x9e\x28\x55\xb1\xd3\xa5\xa2\xfa\xaa\xbe\xed\xb3\x81\xa4\xd1\x02\x75\xf5\xf6\x37\x56\x49\x65\xe8\xec\xed\xfa\xf4\xed\x3a\x7b\x7e\x49\x6e\xd5\xb1\x6b\xd6\xd9\xef\x73\x23\xb2\xda\xae\x53\xd3\x26\xd9\xe3\xdf\xf5\xa6\xbf\x32\x24\xd9\xda\x4b\x11\x1c\x0e\x26\x89\xc6\xa9\xeb\xb1\xbb\xd5\x81\x6f\xbc\x1f\xa9\x61\xeb\x8b\xf2\xa6\xa2\x17\x8c\x5e\x8e\xf9\xb2\x2c\x71\xdd\x0a\x7e\xe7\x44\x9a\x65\xbf\xaf\xba\x76\x2e\x27\x32\xc2\x11\xae\xc5\x5b\x5a\xb0\x8a\xe6\xaa\x4f\xcb\xaa\xae\x0b\x3d\x84\x53\x60\x9c\xa9\x61\x76\x6d\x56\xf6\x49\x2e\x17\xb4\x1a\x8e\x46\x23\x52\x4d\x97\x73\x4d\x39\x5a\xfe\x3f\x86\xa9\x93\xeb\x65\x55\x6a\xc0\x69\x30\x8f\xfe\xc3\xe1\x0f\xfd\xb7\x47\x02\xfa\x87\x87\xe4\xfe\x87\x87\x16\x08\xc1\x3b\xd6\x7f\x14\x4c\x6a\x5a\xf7\xa5\x11\x2c\x8c\x77\x8f\xb1\x25\xdb\xde\xd0\x6a\xce\xa4\x64\x82\x3f\x29\x8a\x93\x05\xc9\xe9\x78\xf7\x78\xb5\xc2\x05\x2b\xde\xd2\x9c\xb2\x0b\xaa\x6f\x8c\x5c\xb7\x80\x1d\xcd\xcc\xd1\x49\x17\x72\xc7\x2a\x8d\xdc\x77\xe4\x25\x53\xf9\x0c\x8e\x5c\xba\x23\xb7\xa7\x89\xf0\x35\x83\x73\xd0\xd4\xf9\x9c\x4a\xa9\xf9\x77\xf4\x9e\xeb\x45\x0c\x94\x18\xe4\x82\x73\xcd\x48\x6b\xd2\x35\xbb\xce\x89\xa4\x03\x95\xa6\xe2\xc6\xa7\x15\x25\xe7\x3b\xa9\x2a\x0e\xf3\x8d\xaf\x53\x4b\x80\xa3\x40\xd9\x8e\xbe\x9e\xef\x39\xd0\xd2\xc5\x90\x66\x37\x37\x80\x11\xca\xd2\xff\x80\xdb\x4b\xb3\xc7\x74\x72\xbd\x1a\x0f\x87\x74\x62\xe4\x50\x06\x5d\x0c\x69\x96\xd5\x88\x7b\x22\x9b\xfc\x77\x41\x0d\xff\x4d\xeb\x3a\x01\x39\xde\x3e\x9f\xc9\xee\x2e\x1d\xcd\x88\xfc\xe9\x92\x7b\xc2\x1e\x75\xd6\x46\xd9\xde\xde\x9a\xce\xf4\x40\xe1\xcd\x98\xa4\xfa\x0e\x2b\xa0\xec\xe6\xa6\xd1\xc6\xde\x60\x73\x84\xf1\x35\x46\x98\x66\x3b\x66\xfb\x57\xa9\xed\xd7\x34\xe5\x6f\xb0\xf5\xbf\x9f\x9d\xc4\x74\x44\xca\x52\x5c\xfe\x4d\x54\x73\xa9\xb7\x2a\x39\xc3\xb8\x0a\x4c\x2b\xfe\x16\x9e\x48\x0d\x11\x37\x9c\xc6\xd3\x27\x27\xbf\xc1\x61\x2c\xab\x72\xd2\x5e\x92\x01\xbd\x8f\xe9\xc8\x42\x3d\x1a\x42\xd4\x44\xf5\x08\xde\x3e\x8e\x6a\x8f\x11\x0a\x57\xef\x61\x71\xb0\xf8\xd5\x0a\x13\x83\xaf\xe4\xf8\x5a\x70\x07\x26\x86\x59\x6b\xf1\x21\xb0\xaa\xbb\x8c\x99\x1c\x9a\x06\x3a\xd9\x0a\x0b\xee\xc0\xcb\xfd\x74\xed\x7a\x33\x5d\xeb\xa7\x73\x3f\xdd\xea\x9e\x4c\x97\x4f\x9f\x9c\xdc\x4f\x8f\x4f\x9f\x9c\xf8\x39\x3e\xe7\x79\x75\xb5\x00\xe9\x84\x45\x21\x8d\x5b\x39\xa2\xbe\xca\xbb\xab\x05\xd5\xe7\xe4\x1a\x5b\x5c\x90\x98\x55\x70\xa9\xb3\x1d\x1a\xd0\xdd\x93\x2d\x08\xf4\x40\xf0\xee\x65\x13\x28\x1b\x2d\x60\x54\xb3\xc3\x34\x1b\xa9\x19\xe5\x43\x3a\xf9\xe1\xba\x03\x4f\x51\xdb\x8f\x91\xd3\xfc\xb4\xa0\x7c\x88\xbe\xd1\x15\x0e\x6c\x3f\x07\x56\x80\x73\x2d\x67\xe2\x12\x64\x2d\xa6\xbe\x11\xf9\x5c\x9d\x2c\xf3\x9c\x4a\x39\x44\x27\xe4\x82\x16\x28\x5b\x99\xc5\xeb\x1f\xeb\xcf\x02\xf3\x6e\x7c\x2b\xba\xde\x6f\x0b\xe1\x36\x38\x35\x84\xf5\xe3\xe1\x16\x9d\x76\xdc\xec\xb1\x98\x5c\xaf\x76\x02\x9c\xda\x71\x4d\xc7\xec\x2c\x38\x83\x26\xd7\x8e\xbc\xb4\xfa\x42\xb0\x62\x78\x84\x55\x6d\x75\x83\xbe\x71\xf3\x3a\x30\x70\x61\x74\x26\xf2\xa5\x04\xf9\x79\xbb\xc7\x9a\x97\xef\xd9\xa7\x65\xe6\xd7\xf7\x1a\x71\xf8\x3d\x3b\xae\x59\xfc\xf5\x7d\xc7\x7c\x7f\xcf\xce\x03\xc6\x7f\x7d\xef\xb1\x34\xa0\x67\xef\x86\x6e\x3c\x58\x1a\x79\x40\x8f\xee\x23\x21\xc1\x56\x43\x2c\x3c\x6f\xea\x86\xf9\x7e\x28\x26\x8e\xbe\x5e\x84\x0c\x40\x83\x94\xc8\x2c\xf2\x10\xfa\xdf\x91\xaa\xd8\x7c\x98\x61\x01\xa2\x99\x89\xfd\xbf\xfe\xec\xce\x62\x52\xff\x59\x17\xd6\xb4\x58\xf0\x77\x5d\x6c\x68\xe6\x49\x8c\xec\xec\xd7\xec\x31\x42\x63\xfb\x77\xdd\xc0\x93\xe0\x93\xe0\xef\x46\xb1\xdb\xb2\x49\xe3\x77\x5d\x6d\x0d\x99\x22\xb6\xa1\x52\x6e\x6e\xd6\xf4\xa5\xc7\x89\xa9\x94\x44\xdf\x4d\x2a\xa5\xd1\x06\x7f\x1a\x51\x5e\xc8\x7f\x31\x35\x1b\x9a\xd3\xc0\xe8\x50\x53\x21\xf0\xc3\x1e\x90\x5c\x9e\x82\x76\x68\x78\x84\xe1\x4b\x49\xf9\x54\xcd\x0e\x8e\x33\xa7\x5e\xd1\x20\x48\x60\x54\xdf\x6c\xdc\x22\x8d\xad\x6a\xaa\xeb\x52\x84\xe2\xb0\x2c\x5b\x03\x94\x0c\xa5\x19\xdd\xe7\x84\x44\x6a\xfd\x45\x36\x30\x7d\x66\xaa\xa5\x5f\x48\x42\x42\xd5\xa3\xc7\x85\xa9\x16\xf6\xd8\xf5\x1e\x42\x9c\x97\x65\x81\x74\x6c\x22\x82\x1f\xf5\x7d\xba\x25\x52\x0c\x78\x77\x11\x32\xea\x11\x9b\x2e\x92\x3c\xf9\xe6\xd5\xa6\x39\x79\xbf\xfa\xee\x03\xd4\xc4\x69\xb4\xdb\x01\x63\xbf\x7e\x97\x73\x22\xd7\xa1\x91\x04\xbb\xbf\xb9\x3f\x47\x6f\xc6\x1d\x77\x42\xb2\x9a\x08\xed\x04\x62\x35\xb5\x1b\xfd\xb2\x55\x9c\xba\x34\x44\xf4\x63\x8e\x6b\xe4\xde\xb4\x7a\x10\xd9\x6a\xa7\x1e\x1f\x08\x0a\x94\x0d\x99\x25\x67\x86\xd9\xe4\x87\x6b\x36\x0a\xbb\x9b\x4c\x26\x1d\x88\x7c\x6f\x2f\xea\xe9\x8a\xe7\xae\x04\x65\x43\xdb\xa1\xd2\xf4\xd1\xc8\x72\xec\x8f\xd7\x51\x18\x6a\x64\x99\x79\x63\x97\x21\x45\x49\x47\xa5\x98\x0e\x83\xcf\x8d\x79\x75\x90\x21\x78\xd3\xf2\x56\x59\x36\x6e\x2d\x31\x20\x8c\x40\x59\x35\x8a\x69\xa7\xc7\xe9\x39\x8d\xc3\xc1\x9e\xce\x08\x9f\xc2\x70\xab\xd6\x6c\x5b\xbb\xa8\x21\x4f\x7b\x07\xf5\xd7\x3f\x76\x6f\x13\x25\x1c\x6b\xdc\x93\x06\xd6\x49\x0d\xec\x29\xc9\xcf\x97\x8b\x03\x6b\xd6\x71\x5f\x2a\xd8\x5f\xd3\xe4\xa5\x43\xcd\x5a\x2b\x57\x45\x6f\x35\x6b\x25\x96\xb5\x9c\xbf\x55\x7a\x5a\x89\x4b\x49\xab\x6e\x2d\xac\xad\x80\x32\x0c\xbb\xf8\x92\x9c\xd2\x72\x8c\x7e\x34\x3f\x90\xfd\x78\x72\x25\x15\x9d\xdb\x22\xf8\x31\x68\xd4\x58\xd0\x1c\xc4\x9f\xf0\xfb\x6f\xac\xa4\x46\x26\x8e\x5c\x0d\x2b\xdc\x3b\x76\x0d\xe0\xf8\xeb\x0f\x6f\x97\x9c\x33\x3e\xd5\x1f\xec\x41\xd6\x7d\xda\x0f\x3f\x2e\x95\x12\xdc\x4e\xe3\xad\x3b\x6d\x5b\xf8\x7e\x51\x0a\x52\xbc\xa5\xa4\xb8\xd2\x7d\x18\x37\x86\x6a\x6e\x6b\x81\x44\xb4\xb7\x84\x33\x10\x28\xd4\xcb\x43\xf8\xba\xa2\x8a\x30\x3e\xde\x3d\xc2\xa2\x9a\x8e\xdb\xcf\x43\x54\xd3\x17\xe6\x2a\x07\x1d\x04\x8b\x41\xf8\x5a\x5c\xd0\xea\xb2\x62\x8a\xfe\x54\x4d\x75\x3f\x15\xcd\x2b\x4a\x40\x76\x2f\x03\x6e\x31\x6c\xaa\xf7\x12\x61\xbd\x11\x91\xa4\x23\x5a\x20\xb0\x72\xcd\x69\x03\x83\x7d\xfd\x8e\x72\xc2\x95\x1e\x0e\xce\x6e\xbc\x7b\xac\xf9\xce\x82\x15\x2f\xb8\xa4\x95\x7a\x5e\x52\xbd\xee\xb5\x3b\xd2\x44\x8b\x76\x6e\x07\x67\x7a\x72\xd9\x48\xf0\x21\xca\xe1\xa9\x87\xea\x01\x7d\xdb\xe9\xc4\xbc\x2f\x7d\xcd\xa7\xd4\x8d\xf5\xe3\xd5\x8b\xc2\x2f\xd0\x75\xa2\xff\x93\x1f\x8e\x3e\x8e\xf4\xcd\xf9\x3e\x1e\x51\xcf\x2c\x1b\x71\xfa\x59\x0d\xd1\x08\x9e\xbe\x69\x76\x50\xea\xeb\x80\xb2\xd1\x4c\xcd\x4b\xe3\x85\xb0\xc2\x85\x80\xcb\x39\x0c\x25\x10\xf1\xbd\x4c\xef\x97\xbd\x94\x08\xef\x1e\xb7\x0b\x35\x50\xa6\x45\xba\xcc\x5e\x5e\x84\x77\x8f\xda\xe2\xf1\xe0\x0a\x65\x11\x96\xb6\x4f\x28\x6b\x8b\x1d\x1a\x20\x52\x03\x8a\x92\x2a\x0d\x26\x5b\x43\x9b\xe7\x80\x30\x3a\x51\xa4\x52\xee\x55\xae\x5b\xda\x51\x62\x69\x7e\x57\xe8\xba\xb5\x1d\x67\x2b\x6c\xb0\x45\x30\x47\xf3\xac\x87\xc8\x6e\x4e\xf7\xf4\xde\x2e\x79\xf7\xe4\xfc\xd6\x26\xe6\x16\x0d\x9f\x45\xa2\xbc\xce\x53\xd6\x7b\xad\x1f\x23\xc2\x9d\x6f\xd4\x0e\x54\x5f\x15\x23\x87\x31\xcf\xa3\x47\xb7\xe8\xbf\x50\xba\x83\x99\xb8\xb4\x2f\xf2\x95\x46\x22\xae\x93\x50\x58\x64\x1f\xae\x43\x57\x2d\x79\x11\x6e\x55\x41\xa6\x6f\xdb\xef\x90\x66\xd7\xd4\x08\xad\x28\x57\xcf\xe0\x79\x0c\xe1\xd2\xf1\x58\x76\x14\x82\x07\x30\x46\x74\xfd\xed\x4e\x26\x43\x3e\xe1\x23\x25\x5e\x8a\x4b\x5a\x3d\x25\x92\x0e\xb3\xec\xe6\x06\xa1\xc9\x64\xc2\xd7\x52\xc3\xcd\x99\x8d\x48\x51\x3c\x2d\x89\xbe\xa5\x4c\x1e\x78\xa3\x3f\x4f\x7c\xaf\x07\x58\x9b\xbb\xaf\xe8\x5c\x5c\xd0\xc4\x08\x81\x14\xee\x69\x29\x24\xed\xdc\x59\xd8\x9b\x50\x48\x16\xc2\x55\xb3\x31\x5e\xac\x2d\x1c\x2b\xb0\xd3\x82\xc2\x01\xf2\x41\x18\xbd\x29\xa9\xe6\x5a\x2e\x09\x53\x78\x60\x6b\x0c\x2a\xb8\xaa\xa3\xd1\x08\xa5\x30\x40\x1a\xb8\xb8\xc9\xd4\xd0\xc5\xcc\x57\xb6\xe7\xdb\x82\x20\x92\x1a\x5e\x7f\xc4\xe4\xdf\x8d\x3c\xd3\xc8\x6a\x0c\x67\x2e\xf5\x35\x9d\xd4\xb7\xd4\x02\x1c\x7f\x1b\x86\x12\x8b\x90\xfc\xbb\x2d\xd0\xf1\x1d\xae\x5b\xee\x51\x38\x09\x20\x57\x50\x36\x52\x15\xe1\x92\x19\x31\xb0\x00\xb9\xa5\xb5\x82\x46\x5b\x41\x19\x18\xad\xf7\xac\x02\x48\xa3\x81\xc9\xd2\x10\x0d\xb1\xa8\xba\x4d\x4f\x74\x1d\x59\x8d\x97\x77\x8c\xa8\x76\xa0\x26\x74\xa4\x48\x35\xa5\xca\xe3\xb2\xf6\x45\x82\x66\x2a\xd1\x61\x3c\xe4\x51\x93\x20\xde\x64\x82\x5a\x13\xc4\x80\x89\x0f\x4a\x31\xdd\x96\x18\xfe\xf5\x7c\x22\x36\x92\xbc\xfd\xec\x09\xbb\x4a\x61\xc9\xa5\x98\x6a\x52\x6f\x93\x0a\x3e\x40\xd1\x98\x4f\xf6\x39\xbd\x1c\x3c\x23\x8a\xee\xd4\xa6\xd2\xe4\x67\xf2\x79\x08\x4a\xf9\x99\x52\x0b\x39\x3e\xf4\x7e\x60\x23\xf9\xf0\x80\x2e\x0f\x2e\xa9\x54\x07\xc7\x23\x32\x27\xbf\x08\x4e\x2e\xe5\x28\x17\xf3\x43\x4e\x2f\xe5\xa1\x5c\xce\xe7\xa4\xba\x32\x14\xc9\xe3\xfc\x74\x82\x6a\x5b\x6a\xac\x8c\x53\xc2\xdf\x9f\xbf\x43\xb8\x20\x8a\x80\x8f\x82\xae\x88\xb0\xb4\x14\xb1\x3f\x00\xa5\x01\x3d\x80\x4e\xb7\x38\x7d\x6f\x56\x11\x16\xec\xe1\x31\x90\xbc\x22\x53\xca\x69\x45\xca\x5b\x1b\xae\x7e\xc5\x17\x65\x3d\x47\x34\x27\x9f\xdf\x91\xa9\x1c\x3f\xc4\x60\xa7\xaf\xef\x8b\x62\xaa\xa4\x46\xd2\xd5\x61\xfa\x31\x17\x05\x2d\x47\x76\xcf\x46\xa6\x3a\xca\x9c\x99\x42\xff\x86\xb6\x01\x32\xdc\xfc\x05\xad\x34\xf4\x7e\xce\x8b\x85\x60\x5c\xf5\xef\xa5\xdd\x16\x65\x78\x46\xe4\x3b\x3d\xad\x17\x7c\xb1\x54\x49\x63\x3e\xc2\x8b\x21\xaa\x57\x8a\xb0\xfd\x01\x32\x7d\xdd\xc1\x2b\x98\xde\x86\x2e\xc2\x55\x23\xec\x7f\xd6\xdd\x3c\x6d\xcd\x6f\x43\x8f\x1d\x9b\x81\x70\xaa\xc4\x8e\x73\x3b\x6e\xce\x1e\x7e\x48\x17\x36\x4e\xc8\x56\xc8\xc2\x56\x70\x51\xba\x1b\xd9\xf2\x6c\x4b\x9e\x2a\x86\x42\x6d\x4a\x95\xd6\xa7\x2b\x12\xc5\x96\x90\xc5\x72\x52\x7b\x72\x70\x8c\x0e\x45\x35\x25\xdc\xba\x58\x1c\xd6\x8e\x1c\x02\xa3\x43\x8d\x60\x51\x86\xd9\xe4\x03\xfa\x06\x50\xdf\x81\xf9\x84\xa3\x9f\x83\x1f\x06\x05\xbb\x40\x1f\x77\xce\x44\x35\xd4\x6f\x92\x4c\x8e\xbe\x27\x7f\x7d\xf0\x3d\xd9\xdf\x07\x25\xa5\x9a\x18\x90\x59\x89\xc5\x2f\x82\xd3\x21\xfb\x40\x3e\xd6\x8e\x18\x2d\x27\x0f\x4a\x2a\x5a\x0d\xd0\x3e\x8d\xa9\x16\x8d\xf2\xdf\x89\x73\xca\x35\xc2\xd7\x90\x56\xe2\x39\x55\x33\x51\x8c\xd1\x42\x48\x85\xf0\x82\x54\x64\xfe\xda\x08\x11\xc0\x5f\xc0\x04\x23\xc0\x79\xc9\xf2\x73\x67\xc7\x3f\x27\x9f\x35\x3e\x95\xec\x17\x3a\xfe\xf6\xc8\x34\x29\x4b\x5a\x02\x26\x95\xe3\x63\x8b\xe1\x5f\x2d\x4b\xc5\x16\xba\xc9\x31\x26\x45\xf1\xd6\x10\x95\x2f\x19\x3f\x37\x02\x08\xb2\x54\xe2\x4d\x25\x34\xf4\xfd\xbf\x25\x35\xe0\x09\x03\x5b\xfe\x62\x4e\xa6\xf4\xdd\x6c\x39\x3f\xe5\x84\x95\xa6\xb2\xc6\x2d\xa1\xeb\x80\x39\x18\xcd\xfe\x4a\x47\xf0\x04\x85\x8e\x9d\xd7\xe5\xff\xd6\x5d\xe7\x96\xa8\x8a\x6a\xd1\x26\xe9\xf5\x52\x9f\x02\xcc\x9c\x06\xf2\x04\xdd\x0b\x35\xf7\xbf\x6e\x6d\x40\x2f\x8d\xc8\x24\xae\x41\x6b\xf8\x41\x19\xe1\x5a\xb6\xa3\x80\x4d\x6f\x4f\x41\xd3\x3f\x96\xd2\xd6\xbb\x09\x6c\x34\xbc\xd4\x6a\xc9\x47\x32\x9f\x51\x0d\xbe\x87\x88\x9c\x29\x5a\xbd\xa5\xdc\x98\x01\x18\x22\x0d\xee\xf0\x75\x4e\xf2\x19\xfd\x24\x97\x67\x67\xec\xf3\x18\x3d\xbe\x98\x7c\x7b\xfc\x10\x61\x49\x4b\x9a\x2b\x51\x8d\xd1\x37\xb4\x60\x4a\x54\x07\x0e\x02\xe2\x8a\x96\x44\xb1\x0b\xfa\x69\x59\xc1\xbe\x5a\x41\xd4\x27\xb9\xa0\x65\x99\xcf\x68\x7e\x6e\x8e\x41\x70\x45\x3f\xab\x39\xe5\x4b\x5d\x49\x2a\xa2\x96\xf2\x94\x54\x70\x12\x25\xe3\xe6\x48\x17\x44\x2a\xfa\x49\x23\xd4\x4f\x4c\x9f\x98\xd4\x4d\xe1\xaf\x4f\xb0\x8d\x9f\x66\x84\x17\x25\xad\xc6\x4d\xac\x65\xdd\xfb\xc6\xfa\x7a\x9e\x96\xe2\x74\x98\x8d\x34\x8e\xde\x47\xdf\x9f\x1a\x95\x14\x36\x05\xe6\xcf\xa1\x7e\xe0\xa6\xd7\x4f\xa4\xb8\x50\xe4\xd4\x8f\xf2\x29\x27\xc6\xa0\x01\x6c\xd7\x0a\x46\x3e\x95\x7a\x69\x74\x7e\x4a\x0b\x33\x17\x35\xa3\xfa\x1a\x4b\x06\x71\x38\xe4\xb9\xc6\x3b\xe2\x33\x2b\x34\xcb\xcd\x15\x53\x57\x9f\x9c\x83\xc7\x18\x55\xe4\x12\x61\xc0\x7a\xb4\xf8\x64\xd8\x9d\x4f\x14\xc0\x89\x1c\xa3\x53\xcc\xf0\xe9\xa1\x54\x95\xe0\x53\xcc\x0e\xe9\x1c\xe1\x33\xc1\x95\x7e\x01\x9f\xce\x44\x35\x27\xba\xd2\x5f\x16\x9f\x07\xc7\x47\xfa\x9f\x07\xfa\x9f\x47\xfa\x9f\xef\xf4\x3f\xba\xe0\x81\x2e\x78\xa0\x0b\x1e\xe8\x82\x07\xba\xe0\x81\x2e\x78\xa8\x0b\x1e\xea\x82\x87\xba\xe0\xa1\x2e\x78\xa8\x0b\x1e\xe9\x82\x47\xba\xe0\x91\x2e\x78\xa4\x0b\x1e\xe9\x82\x6f\x75\xc1\xb7\xba\xe0\x5b\x5d\xf0\xad\x2e\xf8\x56\x17\x7c\xa7\x0b\xfe\xac\xff\xf9\x8b\xfe\xe7\xbf\xcd\x5c\x8e\x8e\x16\x9f\xf5\x6c\x61\x92\xd7\xa7\xa2\x2c\xc6\xd7\xf6\x14\xd1\x29\x5a\x61\xa6\x48\xc9\xf2\xfa\x1b\x43\xab\x15\x5e\x94\xcb\x29\xe3\x72\xfc\x01\x91\xe2\xa2\x64\x52\x0d\xf4\x7b\x2d\x19\x3f\x37\x7f\x54\xe6\xf1\x0f\x74\x81\x1c\x98\xaf\xe6\x48\x06\xf9\x8c\x54\x73\xb2\x18\x2c\x2a\xc6\xd5\x60\x56\x0d\x16\x64\x4a\x8d\xc2\x09\x61\x24\x29\xa9\xf2\x59\x45\x17\x25\xc9\xe9\xe0\x52\x54\x45\x2e\x96\x5c\x0d\x2e\x98\x5c\x92\xf2\xb4\x14\xf9\xb9\xb4\x3f\x74\x3f\x9a\x24\x62\x06\xac\x17\x44\x51\xc5\xe6\x74\x60\x8e\x79\xc0\x05\x37\x5d\x32\x3e\x1d\x48\x72\x41\x07\xca\xd8\x2b\x82\x3e\x87\x09\x4e\x4a\x06\x98\x96\xce\x17\x25\x51\x74\x60\x6e\xea\x40\x5f\xe9\x05\x51\x8a\x56\x1c\x66\xab\x84\x28\x25\xfa\x88\xcd\x3d\xbf\x5e\x99\xff\xed\x2d\xd7\x45\xfa\xcf\x0f\xc8\x6e\x9c\x79\x53\x03\x77\xe6\xf6\xe7\xcd\x40\xef\xe6\x00\x36\x70\xb0\xd4\x0f\x54\x6f\xa1\x09\x17\x73\x4e\xd5\xac\x12\xcb\xe9\x6c\x60\x90\x90\xcc\x2b\xb6\x50\x03\xb9\x3c\xb5\x7f\x99\xe5\xfe\x7b\x29\x14\x1d\xdc\x0c\xce\x44\x45\x73\x51\x8a\x6a\xa0\x79\x2a\xf8\xcb\xec\xea\x52\x9f\x89\xde\x3b\xb1\x54\x05\xe5\x6a\xc0\xb8\xf9\xef\x74\x59\x9a\x43\xe1\xcb\xb9\xf9\xff\x66\x40\x4a\x36\xe5\x25\x3d\x53\xf0\x57\x4e\xb9\xa2\x15\xfc\x5d\xb1\xe9\xcc\x7e\xfe\x79\x29\x35\x84\x1a\xdc\xd8\x3d\x83\x77\x0a\x67\x07\xff\x9a\x2d\x46\x1f\x57\x3b\x68\xe9\xf4\xf2\xb5\x1f\xa5\x62\xfc\x6a\x9e\xd3\xc7\xb1\x13\xb2\x59\xd0\x10\x1d\xda\x52\xf7\xff\x68\xce\xf8\xe8\x67\xe9\xc0\x52\x00\x7a\x2f\x19\x2f\xc4\xe5\xc8\xd5\x2b\xc4\x7c\xf4\xfc\x42\x53\x9d\x85\x98\xbf\x34\xe0\x77\xa2\x9f\xaf\x2d\xd6\x70\xe0\xfd\xdb\x97\x13\x74\x78\x88\xf6\x6d\xd3\x52\xd8\xa8\x35\x33\x21\xd5\xbe\x1f\x1a\xf9\x46\x00\x14\x27\x48\x4f\xa2\xfe\x6a\x58\x14\x0d\x67\xc7\xad\x2f\x2b\x7c\xc9\xca\xf2\x19\xd5\x6f\xfc\xaa\x8f\x6c\xd6\xf5\xf0\xdc\xc0\xd8\x57\x84\x93\x29\xad\x46\xf4\x33\xcd\x9f\x8a\xf9\x1c\x88\xb6\x9c\x02\xd2\x83\x3a\x9a\xbd\xc4\xa8\x01\x93\x43\xb6\x02\x38\x8e\x61\x76\x0d\x8c\x2d\x9d\x34\x25\x35\x9e\x50\xfa\x70\xf4\x71\x04\x97\x90\x16\x3f\x19\x28\x68\x44\xb8\x86\xce\xdf\x49\x50\x5e\x5e\x37\x4d\x35\x38\x95\x91\xe5\x53\x72\x1d\x86\x68\x68\x4e\x15\xf3\x89\x21\x27\x9e\x82\xaf\x37\x68\x79\x9d\x8b\x6c\xd3\xb4\x3c\x49\xbd\x37\xdc\x67\xf5\x24\x0d\x25\x16\x52\xc5\x46\x76\xd1\x5c\xb9\x64\x8a\xbe\x83\x3e\x42\x15\x73\x3c\x38\xef\xec\x3e\xa2\x97\xcd\x00\xb4\xbb\x9b\xae\x35\xa4\x58\x80\xce\x11\xbb\x88\xe8\xe4\xea\x52\x3d\xfb\xf9\x35\x05\x69\x9b\x27\xb5\x13\xda\x8e\x58\xbb\x91\xe0\x52\x6c\x6a\x8f\x45\xc3\xb0\x24\x30\x2a\xe9\xea\x26\x45\xe3\xa7\xa8\xfa\x34\x6b\x86\x79\x5b\xfe\x96\xa6\xf6\x77\x43\x05\xa9\xfb\x18\x8b\x54\x77\xba\x46\x6b\x73\x14\xe9\x0e\x62\xf1\xdd\xfb\x85\x46\x3f\xb5\x1e\x19\xd4\xfa\xd6\xba\x21\xad\x55\xc5\x6b\x6f\xf7\x71\xbb\xbc\x71\x3d\x13\x35\xba\xaf\xd3\x71\x86\xa5\x85\x53\x7d\x64\x7d\x7a\xb9\x2b\x30\x80\x7c\xa7\xe9\x23\x50\x15\x7b\x61\x5c\xc8\xec\xa0\x4c\x4f\xc0\xd4\x1a\xd2\xee\x43\x34\x64\x96\xb3\x28\xb5\xb2\x71\x4d\x4b\x0f\xc3\x2e\xa3\x12\x94\x0d\x37\xa9\x08\x1a\x1b\xfb\x5e\x6a\x64\x6f\x5f\xcc\x00\x38\xaa\xd5\x6d\xa5\x30\x8c\x2b\x3a\xad\x0c\xfe\xe8\x90\xc4\xf4\x14\xc0\xdc\x5f\x78\xb0\x0e\xf1\x8b\xaa\xc5\x2f\xa2\x9a\x76\xeb\x93\x43\xee\x13\x6d\x8c\xd6\x70\x17\xaf\x93\x9f\x59\x45\x40\x7c\xbf\x1b\x5a\xa2\x83\xd9\x12\xec\x86\x31\x53\x1f\x52\xef\x5d\xe3\x43\x2d\x20\xcd\x9b\xe4\x15\x55\x63\x84\x22\x95\xab\xee\xf4\x69\x45\x0b\x59\xab\xc2\xd6\x89\xda\xdb\x36\xbb\xaa\xa2\x65\x29\xac\xf1\x7c\x63\x16\x64\xb1\x00\x27\x9e\x68\x48\x68\xe1\x07\x8d\xad\xd5\x3b\x2c\x83\x9b\x32\x00\xd5\xd8\x17\xd3\x1b\x38\x38\x85\x10\x58\xb5\x20\x70\x5c\x19\xab\x08\xdc\xaa\x16\xb8\x85\x07\x64\xce\x5f\x3f\x49\x72\x41\x7f\xaa\xa6\x27\x70\x71\xf5\x5d\x33\x67\x82\x13\x73\x41\x59\x4b\xdd\xb0\x5e\x85\xd1\x31\x1c\xd4\x72\x23\xa2\x93\xe7\x4f\xdf\xbd\xf8\xe9\xf5\xc1\xbb\xb7\xcf\x5f\xbe\xfc\x29\x1c\x39\xdc\xd5\x8e\x97\xdc\x65\x78\x92\x8c\x5d\x97\x7c\xbe\x25\xcb\x29\x97\xf4\xe0\x9c\x5e\xf5\x7c\xb5\x7d\x8d\x4d\x7e\x75\x71\xaa\xba\xb5\x47\x7f\x67\xe4\x15\xd8\x8c\x75\x8e\xc4\xb6\x0a\xca\xb0\xe7\x3e\x34\xd7\x6c\x6c\x3c\x16\x25\xe1\x4f\x4b\xb1\x2c\x0c\x43\x5f\x12\x7e\x42\xcb\x33\x4d\x53\x83\x35\xc7\x5c\x43\x81\x31\x7a\x2d\xd4\x4c\xc3\x5f\xc6\x07\x0b\x52\x29\x96\x2f\x4b\x52\x0d\x0e\x0e\x06\x9a\x9d\xd0\xdc\x95\x81\xce\x96\xdf\x19\x0d\xac\x9a\x2e\x2f\x85\xa4\x83\xf9\xd5\xc0\xd9\x43\x0d\x48\x6e\x18\xbe\xd1\x2d\xcc\x42\x02\x07\x02\x94\xd9\x90\x2f\x7e\x2d\xc3\xa4\x03\x41\xb8\x5a\x03\x58\xd0\x0b\x2e\x15\x29\x4b\xc3\xd1\x4c\xe8\x48\xaf\x37\x34\x04\xf3\x9b\xd1\x54\x3d\x85\x1b\x63\x08\xb8\x6c\xdc\xd1\xec\x68\x4d\xb3\xe3\x2c\x56\xa5\xeb\x97\xf5\x12\xce\x26\x42\x95\x7e\x95\x92\x2a\x57\x5e\x97\xfa\xd3\xdc\xa4\x49\x74\xb4\x48\x93\x63\xaa\xa8\xd1\xbe\x59\x27\x88\xb7\xf4\xdf\x4b\x2a\xd5\xd3\x52\xc8\x65\x45\x53\x9a\xf3\x82\xea\x19\x5f\x00\xba\xac\xa0\x7a\x52\x7d\xae\x8f\xfb\xc0\xde\x19\x64\x89\x01\xdb\x34\xee\xd8\x69\x8e\xd7\xf4\xdc\x46\x3c\xbe\xe3\x9d\xc4\x4e\x15\xf5\x40\xb4\xef\xbe\xac\x5f\xa8\xd5\x6a\xc3\x8f\x96\x73\x49\x0b\x7a\xf5\x27\x3e\x40\x08\x72\xa0\xf9\xf8\xcf\x5f\x3d\xd1\xb1\x01\x34\x9d\xc6\xa6\x61\xa7\x4b\x56\x16\xa8\xbe\xe0\x15\x35\xab\x8c\x6d\x3a\x22\x85\xfe\xdb\x96\xee\x1e\x0e\xeb\x05\x3f\x13\x43\x30\xae\x31\x42\x1e\xb3\x67\x83\x8a\xc2\xb6\x0d\x16\x20\x36\x8e\xf4\xec\x76\x30\x94\xad\x39\xf9\xb8\x1b\xdd\xb3\x17\xcb\xde\x05\x21\xc9\xb9\x5a\xfc\x27\xaa\xf4\x4e\x5e\xbd\x7b\xf3\x0f\x21\x41\x2f\xb4\x0e\xc3\x00\x3f\xa0\xb7\x61\x04\xb6\xfb\xa6\xe9\x1b\x51\x6d\xd5\x14\x8c\xf4\x4d\xd3\x13\x23\xec\xde\xa6\xb1\x04\xf1\x78\x86\xe1\x8f\xd7\x64\xbe\x16\x27\xb6\x5a\xbe\x86\x98\x00\x70\x3d\xdf\xd1\xcf\x6a\x6c\x00\xc5\x60\x6f\xf0\x8e\x6a\xe8\xad\xa8\x54\x7a\x66\x80\x36\x23\x18\xae\x3f\x47\x00\xbc\xbd\x6f\x28\x7b\xdc\x12\x68\xe8\x4b\x13\x7b\x3a\x8c\xe3\x2e\xe2\xfd\xeb\xea\x22\x76\x6d\x68\x74\xd1\xdc\xc7\xae\x4e\xdc\xee\x25\xba\x69\xec\xe7\xfa\x1e\x60\x17\x7d\x2f\x01\x92\x74\xfb\xa7\xa1\xa8\x33\x42\x0d\x5c\xce\x63\xe2\xbc\x3e\x85\xd8\xe8\xa7\x0b\x4e\x50\x5e\x18\x02\x84\x4a\x35\x80\xd0\x82\x4a\x0c\xae\xc4\x32\x02\x10\xee\xa8\x6a\x4e\x3e\x26\x17\xa2\x41\xc3\xb3\x8f\xd8\x06\xbf\x8c\x88\x21\x76\x9c\x01\x84\xf1\x5e\x56\xce\xac\x8e\x8e\xec\x62\x1f\x27\xe0\x11\x6d\xd8\x6e\x87\xca\xa3\xba\x6c\x95\xdd\x01\xd7\x2c\x48\x4e\xc1\x27\xec\x3f\xcd\x3e\xdb\x2c\xad\x9b\x21\x3e\x13\x25\x80\x83\x2d\x4c\xb1\x9d\xc1\x6c\x77\x5d\x57\x43\x83\x19\x3d\xbe\xb4\xe1\x30\x0c\x02\x6c\x86\xf7\x30\x20\x26\x12\x7b\x87\x9e\xa1\xb5\x88\x0b\x65\x96\xe1\xb3\x1e\xa1\xc7\x63\x90\x28\x22\x33\x84\x89\x39\xaf\x97\x1c\x7d\x95\x68\xb5\xca\x7a\xc6\xbc\xd0\xd4\xde\x33\xa2\xc8\x30\xdb\x2a\xde\x84\x35\xb4\xa4\x1a\x3b\x82\x83\xdc\x35\x33\xc1\x2e\x2c\x2b\xbf\x5a\xe1\xba\xe7\x90\xb7\xb4\x07\x83\xb2\xd1\xdc\xc8\x92\x3b\x88\x73\x58\x06\xa6\x4d\xf3\xd2\x93\x99\xb8\x8c\x4d\xc3\x82\x39\x8c\x58\x91\xf6\x05\x86\x9b\x0e\x35\x53\xc4\xa9\x2d\x81\x6a\x10\xff\x05\x08\x54\xfd\x39\xc1\xea\x07\x63\x5a\xb1\x37\x2b\xb0\x98\x50\x63\x24\x8d\x43\x31\xa5\x5d\x48\x36\x3a\x63\xbc\xf8\xf1\x6a\x88\xf4\x14\x79\x06\x85\x30\xd2\x8e\x98\x4c\x26\x72\x6f\x0f\xa1\xdd\xc9\x44\xd8\xff\xe5\xe3\x61\x0b\x90\xb6\x17\x91\xc1\x2a\x87\x68\xc6\x0a\x9a\x30\xdd\x5c\xd7\xa4\x60\x72\x21\x24\x8d\x81\x60\x7d\x3a\xd0\x68\xc8\x5b\xf4\x72\x72\xd3\x63\xc3\xed\xb0\xb4\x61\xd8\x5d\x5f\x8a\x24\xfb\x0f\x3b\x6e\x04\x00\xd9\xb8\xb9\x9a\xc4\x29\x6d\xb0\x74\xd5\x87\xf8\xdc\x80\x35\x7f\x88\x00\x1a\x20\x86\x8b\x51\x32\x7f\x1a\xcd\xc9\x62\xd8\x3e\x31\x8c\x8c\x45\xeb\x99\x71\xbc\x03\x9b\x30\x78\x72\xd6\xab\x2b\x44\x31\x30\x46\xc2\xd6\xd4\x8a\x91\x3d\xe4\x40\xd9\x08\xc0\x6c\xdb\xbc\x1c\xcc\xd2\x3d\x3c\xd2\x47\x20\x2e\xb9\xde\x2f\x50\xff\xd7\x20\xd7\x18\xb1\xa1\xf4\x06\xda\x99\xe4\xb5\x9d\x28\x30\x72\x3f\x5d\x72\x5a\xc5\x62\xdc\xe0\xb0\xa7\x15\xe1\xca\x54\xa9\xbd\x55\x37\xb3\x4a\x4f\x8a\x82\x16\x03\x22\x07\x42\xb7\x4c\xd0\xc8\xfd\x8d\x23\xe1\x4c\x0d\xa4\xec\x4b\x22\x7f\x21\x19\x4d\x40\x1f\x9b\xe9\xbe\xb6\xa2\x4b\xf3\xe3\xa9\x28\x8d\x61\xc5\x83\xef\x1e\x3e\x78\xf8\x17\x84\x69\xc1\x14\xf0\x3f\x06\x13\xc0\x05\x0e\x3e\x68\x10\x04\x57\xfe\x19\x23\xa5\x30\x8e\x36\x0d\x60\xf7\xa4\x28\x22\xab\x75\x08\x7e\xe0\x46\x6e\xbe\xbc\x7a\x16\x41\x49\x08\x09\x49\x51\xc0\x36\xa7\xc0\x60\x5d\x58\xc3\xc0\x13\x3f\x45\x98\x46\x02\xf6\x5a\x76\x2d\x22\x79\x9a\x2b\x43\x78\x37\xb8\x79\xcd\xc2\xcc\x0f\x05\xea\x94\xc4\x50\x7e\x2b\x1b\x03\x05\x5b\x41\x43\xa8\xda\xb5\x2b\xd4\xc9\x0b\x4a\xe3\x35\xdf\xde\x21\x3d\x50\xf7\x16\x05\xa5\xc1\x1e\x51\x65\x7a\x6f\x84\xd7\x08\x47\x35\xf5\x9e\x14\x45\x0d\x87\x0c\xa2\x0c\x04\x37\x7e\x1d\x99\xf3\x49\x35\x73\x6c\x56\x81\x0e\x5d\x9d\xd5\x0e\x02\x61\x95\xa9\xbb\xb7\x37\xb4\x7f\x4d\xfc\x1d\xcc\x70\x20\x88\x37\xd0\xb8\x4d\xa2\x37\xcf\x7d\x03\x54\x1d\xb7\x50\x53\xab\x83\x6d\x3c\x04\x9a\x57\x32\xd6\xaf\x3d\x29\x0a\xe3\x8c\x63\x36\x10\x6e\x47\x2a\x16\x49\x7b\xf7\x78\xb3\x38\xde\xb9\xc8\x7c\xaf\xbe\x5c\xa0\x23\xf0\x11\x74\x9a\x0b\x6d\x1d\xff\xd6\x5b\xd5\xee\x61\x9b\xbd\x6a\x5d\x4e\x70\x32\x77\xb7\x5e\x3f\x0d\xe1\x3c\x3b\xcc\xc5\xe3\x1d\xda\x4a\x11\xbe\x8f\xe0\x6d\x19\xcb\xf9\x3e\xc4\x8f\xdb\xae\x30\xaa\x68\xd7\xcb\x3f\x8e\x27\x01\xa5\xfa\x54\xe1\x0b\x2b\x1a\xa6\x9d\x21\x54\x01\x17\xbb\xdd\xa3\x5b\x73\x39\x4b\x49\xab\xad\x98\x1c\xb2\x54\xb3\x3e\x31\x80\xd7\xf0\x44\x10\x1e\xd8\x46\xe6\x4e\x05\x07\xc6\xec\xbe\x10\x15\xd9\x86\x2f\x92\x35\xf2\x3a\x5d\x96\xe7\xe0\xe0\xa8\x89\x76\x7a\x69\xa2\xd7\x6d\x11\x2b\x0f\x2e\x1d\xb4\x43\xf8\xfa\xcc\x47\x72\x34\xb8\xb0\xfe\x1b\x72\x7c\x20\xc0\x85\x10\x49\xee\x82\x41\x33\xc3\xe3\x1b\xa1\x2a\x2c\x30\x22\xf4\x35\x34\xd6\x95\x3a\x5d\xb6\x34\xd8\x30\x67\x9b\x80\xd2\x76\x5e\x41\x98\x48\x0b\x7e\xf5\xd7\x61\x76\x6d\xdd\x8b\x9a\xf6\x1c\xb6\xd9\xe8\xac\x6e\xb7\x36\x0c\x41\x7b\x98\x4d\x9e\x57\xec\xac\x05\x10\x12\x9d\x74\x43\x84\x75\xb3\x2e\xc9\x36\x93\xae\x23\x5d\xde\x7e\xce\x41\x1f\xb7\x9b\x32\x85\xc8\x98\xd9\xcd\xcd\x2e\xf3\x36\x63\xba\x3a\x61\xe5\x9a\xea\x3d\x96\x67\x63\x6e\x6e\x58\xdb\xf7\x1b\x5a\x77\xae\xaa\xa5\x7f\x70\x2f\x21\x76\x26\xb5\x37\x2e\xf0\x26\x6d\xf0\x51\xdb\x3c\xa0\xe0\xa5\x24\x49\x7f\x20\xc7\x21\x7e\xd0\xaa\x0b\xd1\x06\x2f\x26\x7c\x13\x9a\xd7\x4f\x1d\x94\x87\x12\x28\x6b\x23\xc3\xa0\x70\x6b\x34\x18\xb6\xdd\x80\x00\xe3\xbd\x94\x91\x75\x48\x38\xbf\xe4\x06\xd7\x15\x6a\x7a\xb8\x73\xdf\x64\xcf\x8d\x6b\xf2\x39\x64\x3b\x64\x64\x02\xba\xf4\x65\x73\xd6\x62\xa3\xaf\x45\xdc\x66\x56\xb4\x26\xaa\xbc\x2e\x46\x99\x31\xf5\xe8\xae\x05\x37\x57\xe3\x22\x13\x98\xc6\x72\x48\x46\x29\x03\x12\x77\xb0\x15\xb1\x52\xb5\xb9\x89\x5b\x63\x7f\xe8\xef\x2f\xd9\x9c\xa9\xf1\x83\x6f\xb7\x97\x62\x69\x1e\xdb\x0c\x29\x87\x35\x72\xb3\xf6\x48\x46\x88\x10\x56\x08\x35\xb1\x76\xd5\xa0\x71\x36\x49\x2b\x52\xb2\x2c\x77\xdc\x20\xcb\x8a\xba\x8e\x21\x81\x19\x02\xe1\x6b\xf7\xf2\x17\xcb\x6a\x21\x24\x88\xbf\x83\x49\x18\x91\x43\x9b\x2c\xb3\x1b\x62\xaa\x8c\x58\xd3\x00\xa5\xde\xc7\x58\x45\x1a\x2d\x21\x08\x08\x24\x3b\xc2\xee\xd9\x51\x1a\x96\x38\x4b\x2f\xb3\x98\x13\x95\xcf\x00\xa2\xa8\x46\x05\x73\x40\xfe\x9d\x2a\xeb\xa7\xe0\xf4\x8c\x4f\x86\x1f\x3e\x66\x3b\x6a\x74\x26\xaa\xe7\x24\x9f\xf9\x72\x31\xa1\x5e\x76\xa6\x7b\x79\x51\x20\xac\x02\xba\xb1\x11\x10\x53\x64\x7b\x7b\x7c\xb4\x58\xca\x99\xb5\xf3\x51\x71\xe4\x07\x78\xe6\x98\x67\xab\x94\x64\xf1\x49\x01\x5b\xbc\x96\xe8\x30\x7b\xd6\x41\x75\xd8\xc2\x88\xe6\x30\x3d\xf6\xf4\x10\xf7\xb7\x20\xe4\x43\x78\x07\xdb\xd6\x1c\x6f\x23\x10\x4e\x9e\x3b\x29\x8a\x84\x94\x2f\xbc\xf2\x9d\x30\x31\xdc\x89\xd4\xcb\xe9\x2b\x40\x68\x5e\x7c\x56\x8c\xe9\x2a\xa9\x82\x37\x02\xc0\xce\x03\x88\xca\x9b\x62\xdc\x6d\x8e\x21\x9c\x56\xcc\x29\xda\xc7\xdc\x90\xe7\x8e\x58\x91\x38\xb0\x9b\x1b\x11\x4a\x24\x76\x27\x13\x28\x68\x1d\x64\x62\xde\xb7\x3b\x4b\x27\xb4\xd5\xf3\xd9\xfa\x44\x13\xbb\xdb\xe6\xca\x12\x47\xa5\xc1\x93\x3f\xe9\xe7\x05\x53\x1d\xd2\x1b\xdb\x74\xc3\x5e\xd2\x4e\x99\x4c\xe7\xb1\x07\xa5\xf5\xa1\x3f\x77\x23\xf6\x3c\xf2\x7a\x86\xf1\x49\x86\x22\xa5\xb4\x38\xe0\xee\xc7\xb6\x04\xb1\xc6\x2d\x5e\x61\x6b\x63\x9a\x6c\xbd\xdd\xf4\x9a\xad\x87\x68\x18\x9a\xe0\x02\x40\x9f\x38\xac\x10\x93\xdc\xee\xbc\x60\x46\x40\xd7\x1d\x40\x77\x5d\x21\x58\x63\xac\x12\x04\xd4\x69\xe0\x3b\x37\xf7\x27\x45\xf1\xab\x4f\x5c\xc3\xb6\x8e\x59\xe3\x76\x1d\x79\x00\xc8\x15\xa5\xf0\x4c\x23\x40\x50\x80\x86\x63\x9d\x48\x73\xa5\xa6\xde\x30\xbb\xae\x1d\xfe\x0a\x7a\x2a\x96\x3c\x07\x63\x2f\xdc\x74\x76\x6c\xf5\xf1\xe8\xdb\x23\x88\xe1\x4b\xc9\x45\x0d\xfb\xc0\x51\x74\x0d\xd1\x90\xa6\x0d\x4a\xdd\xc9\x50\xe1\x36\x17\xd3\x18\xb7\x4d\x50\x81\xfa\xe1\x7f\x04\xe3\x77\x9d\xc4\xcf\x82\xf1\xbb\xcc\xc1\xd0\x1f\xf1\x85\xa9\xc9\x12\x4f\xcf\x34\x37\xf2\xb6\x1a\x0d\x43\xe9\x97\x4c\xaa\x3f\xa4\x4e\x72\x6b\x46\x41\x43\xae\x5a\x20\x05\x98\xa7\xfe\x0d\x2a\x39\x8d\x7d\x66\x44\x9e\x58\x37\x27\x2b\x50\x3a\x4e\xea\x54\xf4\xb7\x37\xb4\x9a\x3f\xff\xbc\x28\x4d\xb0\xb0\xe3\x9e\x52\x2e\x17\x2a\x77\x72\xbd\x72\xaf\x38\x18\x6e\xf2\xe1\xe3\x2d\x94\xe6\xb7\xe5\x1d\x5a\x32\x07\xcb\xb2\xee\x50\x4f\x34\xeb\xc6\xd4\xc1\x42\xaf\xeb\xd0\x4f\x2a\x8a\x1c\xe8\x0c\xbc\x43\xaf\x6f\x97\xc2\xaf\x30\x79\x63\x46\x20\x93\xa5\x0e\x6a\xc1\xa2\x6d\xbc\xa7\x36\x98\xa3\xd9\xca\x9e\x8a\x13\x26\x84\x9c\xbb\x4b\x32\x12\x20\xbf\x33\x9f\x68\x26\x24\xc1\xa1\xe2\x53\xe7\xe6\xd6\x05\xfb\x4c\x37\xc1\x70\xf8\xa1\x81\x75\x4a\x4c\xa7\x25\xd5\xc7\x1c\x73\x56\x8d\xc3\x6f\x69\xa2\xc2\x32\x2f\x87\x8e\xbf\x37\x11\xff\x68\xa1\x47\x41\x99\xa9\x37\x6c\x69\xaa\x7d\xf1\x8c\x15\x74\xe8\xa7\x06\x57\x15\xe8\x91\xe6\xbe\x7a\x3f\x7c\xfb\x25\x83\xe3\x8e\x59\xb8\xe0\xea\x99\x63\x6f\x34\x79\xac\x0c\xe3\x13\x89\xd5\xc7\x6a\xf2\xc9\xa5\x7f\x54\x38\x0c\x63\xe2\x04\xf7\x46\x7d\xe4\x1b\xac\x62\x6c\x15\x8e\x18\x87\xc7\x69\x3e\x3d\xe4\x3d\x13\x7e\xa8\x0f\xe3\x89\x11\x59\x35\x60\xbe\xb9\x33\x0d\x54\xbc\xa3\xac\xa5\x94\x69\xa0\x8f\xc8\xfa\x54\xc0\xef\x86\xcf\x95\x0d\x96\xa9\xfc\x38\xe0\x9c\xb8\xc5\x38\xd4\x79\x5c\xaa\xd0\x95\x71\xe3\x38\xc6\x13\x62\x9b\xe5\x80\xda\xc1\xaf\xc6\x3a\xa8\x6c\x18\x84\x93\xf2\x4a\xb1\x5c\x6e\x33\x90\x6b\x13\x0c\xe6\x3f\x6d\x1a\x10\xde\x6c\xff\xc1\xbc\xfc\xbe\x1e\xac\xfe\xd4\x3d\x58\xcd\x20\xb8\xb1\x78\xf7\x58\xba\xbd\xc5\x4e\x8c\x4a\xf8\x8a\x20\xfe\x83\xfe\xab\xa2\x17\x4c\x9a\xbf\x6a\x59\x3d\x46\x5e\x02\x8e\x11\x88\x8a\x31\xd2\x60\x9e\x91\x52\xa3\x5e\x77\xb7\xfc\xe1\xbb\xe3\x09\x17\x84\xac\x13\x42\x9c\x6a\xc1\xe1\xa3\x5a\x9f\x06\x16\xfc\x2e\x90\x3a\xae\x73\xc7\x22\x84\x43\xe3\x70\xb0\x5d\x4c\xf2\x0d\xa1\x44\x11\x82\x55\xcc\xc4\xe5\xe8\xd4\x12\xa4\x71\x24\x88\x7e\x71\x1f\x92\xc3\x04\xca\x0c\x6f\x16\x93\xf5\x9a\x53\xcb\x50\xa8\x6f\x93\xc0\x12\x7e\x9d\xd2\xd6\xef\x6a\xac\xac\xad\xc3\xd3\xef\x44\x7a\x1a\x5a\xeb\x65\xb2\x6c\xe3\x52\x37\x28\x35\x68\x29\xe9\xa0\xd1\xbd\xbb\x3e\x1d\xbd\x97\xbd\x35\x26\xae\xf3\xd0\x07\xce\x66\xd5\xde\xdb\x6b\x2b\x3a\x5c\x99\xd1\x4b\xf5\x3e\x96\x0e\x93\xaf\x1e\xc7\x98\x78\x9f\x34\x8a\x39\xce\x3d\xdd\x93\xed\xed\x45\xdf\xc3\xab\x0d\x92\x36\x47\x20\x4d\x26\x8d\xd2\x88\x04\xa8\xd3\xe1\x0d\x29\x0e\xba\x5f\x99\x3c\xc6\xc9\x35\xd0\x5e\x1a\x9c\x58\xc2\x94\x12\x2e\xc1\xbb\xed\x04\x34\x1b\x8c\x56\x8e\x62\x5d\xf8\x36\xda\xee\x14\x0a\xfd\xf0\x71\x3d\x0e\xed\x54\x95\x37\x65\x53\xef\x6b\x22\x2d\xa5\xd3\xb0\x76\x74\x56\x1b\x84\x35\xe3\x1a\xee\xd3\x8f\xcb\xf2\x3c\x2d\xde\x74\x29\x28\xba\x8c\x25\xcd\x76\xe8\xe6\x7e\x4b\x3a\x09\x94\x88\x2a\x4d\xeb\xff\xd7\x92\x1b\xbd\xf7\xaa\x63\xed\xae\x3b\xa7\xda\x49\x0a\x31\xd3\xeb\xf5\xd7\x0a\x38\x48\x2f\x6a\x68\x92\x64\x4b\xb7\xd2\x06\x9e\x4c\x2e\x49\x13\x50\x4e\xec\x14\xcb\x25\x92\x12\xc6\x1d\x11\x6d\xa0\x0d\xf1\xe4\x87\x32\xd5\x5e\x14\x11\x91\x0f\x69\x78\xf4\x0f\x69\xc3\xfa\xc3\xab\xae\xc5\xe3\x2a\x8b\xb7\xdc\xf1\x17\xa2\x53\x16\xd2\x25\xbd\xd9\x2c\x5b\x08\xd7\x9e\x64\xeb\xdb\x3b\xd7\x9a\xfd\x31\xe8\x8f\xdb\x09\xaf\xc2\x25\xdd\xdc\xac\x11\x5a\x50\xac\x5a\x02\x83\x88\x55\xe9\x21\xa0\xb8\x8f\x95\x1c\xdd\x61\x25\x46\xf2\xd1\x73\x21\x61\x6e\x80\x06\x1f\xd6\x4c\x1b\xe0\xaa\xdb\x3c\x56\xcd\xaa\x2e\x3e\x7e\x7f\xd9\x49\x3c\x9d\xed\x74\xa4\xce\x48\xf6\x90\x14\xc5\x81\x84\x48\x3d\xff\x69\x5e\x09\xde\x10\x18\xe4\x1d\x3d\xdc\x08\x60\x1f\xd6\xd7\x77\x9b\x95\x61\x08\xab\xde\xe1\xae\xc5\xe9\xe5\x09\xd4\x74\x26\xab\xf1\x97\x57\xcc\xf8\xe9\x76\x78\x44\xc5\x75\xf5\x58\x06\x10\x1c\x63\xb3\xc3\x2f\x8a\x31\x68\x84\xec\x5c\x1c\xb8\xc8\x89\x91\xc3\xb7\x9c\x1f\x16\xde\xca\xd8\x7b\x36\xea\xbd\x5b\x54\x42\xb9\x93\x5f\x97\xb8\x3a\xd5\x20\x0e\xfd\x11\xe6\xaf\x7e\xe3\x2b\xbd\xbb\x5a\xd0\xd1\x4b\x91\x47\xe9\x34\x82\xb9\x8c\x5c\xc7\x7a\xd2\x86\x17\x9e\x11\xf9\xa3\x09\x3c\xd5\x5a\x02\xc4\xa3\x5a\x3f\x4f\xa8\x63\xd9\x62\x94\xfd\xa0\xaf\x91\xe0\x06\x9b\xbc\x33\x9c\x97\xed\x55\x9c\x42\xfa\x17\x20\x27\xa2\x3e\x5b\x5a\x5e\xd8\x6e\xd4\xc8\xa0\x62\xda\x65\x2d\x8c\x4e\x5b\xfa\x49\x77\x40\xd6\xf5\xa0\xe6\xc2\x1a\xa6\x30\x54\xb3\x24\xd4\x50\x99\x05\xe5\x1d\x5c\x09\xaf\x69\x20\x17\x0a\xdc\x90\xbe\x4d\x44\x4b\x9b\x64\x2a\x5d\x4f\xc5\xd2\x36\xd1\xba\xca\x30\x29\x0a\x7b\x05\x3d\x20\x0a\xc6\x48\x6c\x91\x13\xa1\x1c\x61\x3e\x39\x8e\x70\xec\x29\x3d\x13\x15\x7d\x03\x51\x8b\x64\x47\x76\x37\x16\xf1\x24\x53\x2a\x61\xd3\x99\x35\x29\xf5\x87\xea\x0e\xc9\x15\x10\xa9\x00\xb8\x68\x3c\x31\x79\xf0\x5f\xb4\xee\x62\x24\xe9\xbf\x97\x94\xe7\x41\xb0\x24\x5b\x50\xd2\x0b\xaa\xe9\x0e\xcb\x92\x58\xe5\xb5\xc8\xb2\x6b\x3e\x11\x6e\x44\x53\xc5\x8a\x01\x3f\x19\x84\xf3\xc2\x78\xd0\xb6\xe6\x19\x9d\x92\xbd\x96\xe1\x68\x56\x22\x28\x42\xb9\x8f\x5e\xdb\xc1\xf1\xee\x64\x12\x33\xe7\x61\xb7\x1f\xe8\xc1\xf1\xc7\x1d\xd5\x48\xcb\xc5\xb3\xc7\xc2\xe1\x49\xb7\xba\xc3\x07\xe3\x61\xeb\xe3\x3e\x4f\xee\x44\x76\xf8\x60\xb5\xf2\x93\xb4\x85\x61\x43\xac\x34\xf4\xad\x0b\x60\x23\x62\xd3\xd6\x24\x48\x98\x4c\x26\xb2\xf9\xfc\xdf\x9a\x84\x80\x7b\x7b\xd1\x48\x26\x82\x21\xc2\xd6\x96\xda\x14\x58\xaf\x61\x08\x88\xa8\x6f\xd3\x63\x39\x02\xc9\xe4\x89\x22\x8a\x8e\xde\x80\x57\xe1\x6b\x7a\x39\x4e\x16\xc4\x74\x3c\xc4\x1f\x3d\x71\x13\xd3\x94\x6f\x28\xf8\x8c\x8a\x87\x89\x03\x68\x82\xdf\x98\x33\xe6\x9b\x2c\xe2\x1a\xcf\xbe\x33\x76\x94\x0b\xf0\x0e\x82\x96\xb7\x34\x17\x55\x01\xe7\x65\xe8\x51\x19\xee\xb4\x31\xc4\x68\xef\x3f\xf0\x24\xb6\x2e\x84\xf5\xd2\x27\xe5\xad\x92\x4d\x68\x30\x9b\x64\xd2\xbf\x39\xff\xad\x6e\xaa\x07\x8d\xaa\xf9\x0f\x99\x0b\x06\x75\xad\x3f\x8d\x05\x9e\x53\x45\xc6\xd7\xf5\xbc\xc6\x1d\xd3\xc2\x15\xb9\xfc\x51\x14\x57\x5e\x46\x33\x35\x8e\x6a\x01\xb9\xde\xd8\xe6\x5a\x45\x17\xc0\x1e\x99\x14\xd4\x2b\x61\x70\x06\xf6\xd8\xd8\xdc\x3d\x73\x93\xdc\xc4\x1f\x6b\xa4\x6b\xa9\x34\x38\x70\x83\x5a\xfe\xf3\x8e\xbb\x0e\x7d\x6b\x8f\xce\x47\x77\x73\x15\x4f\x45\x71\xe5\x0f\xd6\xfc\xc8\xee\xf9\x8a\xf8\x91\xf4\x16\xb7\xd8\xa4\x3b\xde\x1f\x07\x1d\xe0\x27\x44\x8e\xd6\xb7\xa9\x9e\xad\xc9\x33\x66\xe2\x85\x56\x9c\x94\x27\x62\x59\xe5\xd4\x15\xc7\x5f\x51\x76\xa7\x1b\xb8\xb5\xcf\x95\xa7\xb3\xcd\xce\x1c\x38\x59\x68\x4d\x68\x7f\x8c\x90\xc7\xfd\x90\xc9\xaa\x8b\x4c\xbe\x5e\x4b\xb2\xb6\x55\x6b\x4d\x72\x68\xdd\x0d\x8e\xed\xdf\x3a\x2b\x42\x28\x33\xcf\x39\x47\xd7\xdc\xec\x51\xac\x0b\x83\xe8\x4e\xad\x3a\x3e\x3c\x19\x6d\x3f\x1b\x54\x2c\xe7\x73\x7d\x4d\x68\xe2\x86\x37\x3b\x6a\x5c\x75\xda\xbc\xea\xcd\xfa\xe1\x9d\xa7\xd1\x33\x6c\xd6\x74\xaf\xd0\x55\x83\x47\xd8\xac\xe5\x5e\xa3\xad\xe4\xee\x78\xab\x9e\xbf\xfc\xbe\x2a\xfd\x9c\xd3\x6a\xa1\xda\x55\x5d\x41\x96\x61\x55\x2f\x27\xb5\x8b\x56\xa0\xd5\x6f\xa7\xd5\x9a\x9d\x56\xfd\x67\xaf\xfc\xa1\x98\x0c\xd5\x89\xf3\x80\xa4\x81\xae\x62\xe3\xf9\x26\x56\x1b\x3f\xef\x58\x61\x30\x6d\xe6\xf3\xd1\xc0\xa7\xa1\x5a\x83\x37\x09\xc7\xed\xf0\xc9\x21\xda\x5f\x7b\x53\xf6\xd1\xa1\xba\x5a\x50\xf7\x9e\x63\xf2\xe2\x29\xe1\x39\x2d\x1b\x2c\x3e\x7c\x74\x0c\xfe\x93\x20\x80\x4c\x58\xeb\x89\xa7\x58\x4c\x96\x83\x08\xd4\xa8\xbe\xa0\xc6\xce\xf4\xa0\x64\xfc\x9c\x56\x9b\xb8\xfa\xc8\x8c\xe1\x2b\x62\xe9\x03\x46\x5e\x2f\xa4\x3b\xe4\x16\x3f\x7f\xed\xe3\xd9\x95\x70\x7c\x60\xb8\xa0\xc8\xe9\xb1\x13\x62\x9a\x08\xd4\xe4\xf4\x41\xfd\xfb\x58\xff\x7e\x18\xfe\xd6\x8c\x95\x05\xfa\x6d\x06\x34\xec\x6c\x3d\x1b\x1a\xd5\xd4\x9c\x94\xee\xf7\x89\x8f\xde\x9e\xec\xfa\x41\xef\xae\x1f\xb4\xba\x06\xe3\xa5\x54\xaf\x0f\x7b\xf7\xfa\xb0\xd5\xeb\x6b\xaa\x2e\x45\x75\x9e\xea\xf6\x51\xef\x6e\x1f\x45\xdd\x72\xe8\xf2\xa5\x8d\x7d\xa5\x4f\xec\x9c\x5e\x5d\x8a\xaa\x90\xd6\xba\xe4\x15\x51\xf9\x8c\xb6\x77\x68\x0e\xdf\xd7\xb3\xea\xb6\x8e\xf7\x91\xa3\x5e\xbe\xe0\x64\x02\x37\x37\x40\x1e\x86\xbf\xeb\xb0\xfa\xee\xeb\x2a\xf3\x52\x96\x96\x20\x85\x34\x92\xbb\xd9\x30\x10\xdf\xc4\x4f\x0e\xe4\x31\x07\x21\x0c\xf1\x7c\xa0\xdd\x5e\x23\x95\xe8\x6f\x18\x63\x17\x37\xf1\x64\x93\x1c\x7f\xf8\x88\xcd\x5a\xf4\x1f\xc1\x22\xc6\x1f\x3e\xae\xb6\xb2\x92\x69\xd9\xb9\x44\x32\x8f\x86\xf1\xc6\x2b\xeb\x91\x11\x10\xc4\x09\xf1\x43\x60\x4b\x11\xa9\x1a\x21\x0e\x08\x10\x77\x62\xd2\x45\xf6\xc9\x49\x62\xdb\x02\x11\xb0\x89\xc1\x6d\x34\xd6\x4f\x09\x2f\x58\x41\x14\x95\x43\x63\x70\x65\x09\xb5\x38\xa6\x3f\xa0\x1b\x5f\x13\xf0\x41\xa0\xe4\x80\xf7\x6e\x45\xf7\x26\x03\x96\xbd\x24\x99\xe3\x5a\xdd\xc5\x08\xdb\x05\xef\x39\x6e\x1a\x1c\x85\xe9\xa0\x7d\xbf\x32\x67\x50\x1f\x0e\x9f\xdd\xdc\xd4\x5f\xc3\xce\xb3\x9b\x9b\xa1\x1d\x36\x06\x41\x46\x1f\xe3\x0b\x1e\x74\x15\x04\x30\xc0\xc4\xc3\xf3\x05\x8f\xa2\x16\x59\xdb\x00\x9c\xb6\x8c\x47\xa1\x8c\xff\x83\x15\x74\x48\x71\xc3\xf5\xa7\xbe\x1e\x2e\x4d\x9d\xb9\x84\xbc\x30\x2e\x80\xdd\xf7\x3b\x11\x7d\x39\x7c\x4a\x16\x68\xb8\x80\x79\xeb\xfc\x97\xb6\x0f\x1a\xde\x31\xf9\x96\xea\x2a\x25\xed\x5a\xe1\x33\xaa\x8c\xd1\x68\xf3\x01\x39\xa0\xe6\x69\xe2\xd8\xc9\x39\x20\x46\x1c\x58\xeb\xf7\xac\xc3\x40\x50\xf6\x11\x80\x81\x6b\xf0\x0e\x68\xf7\x1b\xf0\xa3\xb5\xa3\xbc\x6c\x32\x7f\x05\x75\x83\x5e\x2e\xfe\xb3\x31\xfe\x92\x54\x9d\x38\x64\x9b\x52\xe1\x04\xef\x2d\xb6\x36\xa8\xa1\x74\x53\x6b\xe7\xe2\x42\x2a\xfb\xe6\x42\xcf\x94\x20\xfe\x32\x0e\xcc\xb8\x34\xc0\x30\x22\x24\x56\x98\xfb\x1b\x3d\xb6\xed\xdb\xf3\x00\x61\xdc\xa6\xf5\x6d\xe7\xcd\xef\x36\x6f\x4d\x4f\xc6\x24\x67\xea\x3d\x7a\x29\xc8\x4b\xc6\xcf\x53\xac\x9d\x3f\x84\x86\xac\x3b\x46\xe3\xed\xa3\x6e\x60\xf5\xb4\xc7\x7f\x00\xf9\x77\xe8\xe4\xda\xa6\x34\x31\x41\x61\x36\xcb\x01\x5c\x08\x19\x81\x59\x31\xf6\x9a\x9e\xd1\x9c\x9c\xd3\x17\xc5\xf0\xf8\x3b\x20\x02\x21\x66\x8c\x9d\x0d\xc2\x90\x83\x0e\x02\xcf\x38\x1e\x41\x8f\x01\x89\xae\xc6\x6a\xb5\xaa\x81\xb6\x7d\x93\x89\xe5\xee\xed\x6d\x0d\x9e\x36\xb8\x24\xb4\xc5\x94\x2f\xcd\x53\x1e\x42\xcc\x8a\x77\xe4\xb4\xb6\x5b\x0c\xe4\x5d\x11\xe8\x3f\xd6\x87\x1f\x05\x42\x8b\x10\xc0\x83\x44\x71\x80\x06\x1e\x26\x8a\x03\x64\xf0\xc8\x14\xdf\x56\xcc\xe1\xfe\xf8\xe2\x92\x8e\x0e\x0a\xa8\x1f\xc7\x67\xc8\x8e\xdf\x0f\xc3\xe7\x37\x1d\xb8\xdb\x75\x61\x4c\x53\xec\xdc\x6f\x19\xc3\x34\xd7\x4f\x43\xf3\x6b\x72\xfc\x01\x45\xf3\x3e\xb8\xac\xc8\x62\x61\xd4\xca\x5c\xf0\x03\x93\xb3\x86\x9c\x96\x14\x7d\xdc\x18\x41\x7d\x7b\x3d\xaf\x51\x40\x6e\xd2\xf3\x9a\x4a\x28\xc3\x39\x51\x74\x2a\xaa\xab\xf5\xf5\x5d\x2d\xb4\x29\xfb\x9e\x83\xe3\x4f\xa1\x01\xf3\xfc\x8e\xf1\xc9\xc4\x8a\x4c\x7f\x89\x3e\x2c\xa5\x33\xd2\x6e\x32\x46\x23\x2e\x20\x26\x25\x08\xb9\x2a\x76\xba\x54\xa2\x7a\x25\xa7\x28\xc3\x4b\x4e\xa4\x64\x53\x4e\xdb\x5c\x4c\x7b\x02\x08\x23\x3d\x6c\x8a\x9f\x3b\x6a\x98\xb2\xb7\x9a\xba\x80\x79\x7b\x7b\x71\x55\xd3\x61\x56\xf3\x54\xb7\xf2\x13\x76\xee\xc0\xd1\xdb\x6a\x9c\x07\xf0\x02\xcf\xec\xf1\xd6\x33\x1b\x76\xc9\xcf\x93\x11\xf0\x12\x7b\x12\x78\x01\x7c\xf8\xe8\x83\xec\x07\x06\x24\xed\xfe\x15\xa4\xd8\x08\x15\xde\x8d\x32\x67\xb5\x7d\xdc\xc6\xa4\xcd\x9a\x72\x51\x32\x35\x44\xdf\x40\x00\x7b\x43\x13\x44\x26\xe5\xb5\x05\xb8\xe1\x54\x62\x27\xdc\x55\x08\xdf\xf5\xd1\xba\x2b\x45\x1b\x5e\x00\xc6\x42\x38\xdc\xde\x6e\x0d\x7d\xb8\xac\x8e\xc4\x16\x7e\x0d\x3e\x02\xaf\x77\x0f\xb4\x5b\x7b\xf5\x6b\x0e\x86\xaf\x8d\x7c\xeb\x0d\xa9\xc8\x5c\x8e\xaf\x15\x39\x1d\xd7\x0f\xd3\x26\xda\x00\x54\xf7\x4f\xc8\xdf\x91\xb4\x3f\x82\x40\x83\x3b\xbd\xc7\x8f\x5c\xa4\xdd\xdf\xb2\x5c\x1a\xa5\xc4\xa8\xa6\x70\x52\x1a\x1d\xa8\xb6\x6d\xb8\xe3\x36\xe8\x07\xd1\xc4\x17\xc3\xb6\xbf\xb2\xa9\x0d\x05\x3f\x57\x93\xe9\x4e\xff\xfd\x86\x4c\x29\x08\xf9\x4c\x89\x46\x0e\xf0\xeb\xf3\x82\xf0\x02\xc4\x7d\x6d\x80\xe3\xe8\xda\x0d\xce\x42\x4c\x5a\x1e\x52\x53\x80\xa1\x8d\x98\x2f\x60\x7c\xea\x85\x20\x2d\xf9\x49\x4a\x66\x91\x74\xfd\xf1\x77\x5c\x53\x90\x67\xa5\xb8\x1c\x86\xb3\xb0\x2a\xce\x4c\x93\x63\xfd\x0c\x68\x7c\x52\x0b\x5e\x68\xd2\x02\x3e\x86\x82\x6e\xbb\x39\x20\xb0\xe0\x79\xb9\x2c\x22\x28\x09\xe5\x46\xad\xae\xb7\x5c\xc3\x89\x7a\x66\x0d\xf2\xc9\x18\x73\xe0\x78\xd1\xb1\xf0\xdd\x1d\x4c\x94\x84\xc8\x28\x7f\xb2\x56\x7a\x0f\xdd\x1b\x50\x22\x89\x1c\xee\xce\x42\x64\x67\xb3\xf9\x01\xef\x32\x3f\x68\xd8\x6c\x8c\xac\x09\x02\xb4\x89\xcc\x09\x96\xa7\x25\x93\x33\x5a\x68\x90\x0a\x4a\x8d\xda\x28\x01\x27\x0e\x39\x6b\x7e\xec\xee\xda\x9b\x30\x24\xfb\x46\x89\xed\x13\x05\x6d\x1b\x29\xbb\x0d\x73\x44\x23\xae\x3f\x3d\x91\x5e\xc7\x9d\x6a\x61\x8b\x3d\xb3\xf1\x54\x2c\xae\x60\xeb\x1b\xa4\xab\xfd\x1e\x19\x42\xfb\x15\xdb\xe8\x7a\xaf\x84\x3b\xb7\xb8\xb1\xfb\xbe\xb6\x31\x18\x0d\xbb\xe6\x4d\x00\x6c\x55\xe2\x56\x0b\x1f\x99\xd3\x06\x6f\x8e\x9b\x18\xb8\x11\xe4\x05\xd6\x2e\xd2\x82\xe3\x7c\xc6\xca\xa2\xa2\x7c\x4c\x57\x51\xb0\xa0\x7a\x0a\x28\x1b\x72\x8f\xa5\x22\xec\xe4\x0f\xc1\x48\xe1\x9a\x4f\xb3\x11\x0c\x32\x38\xb1\xa3\x2c\xe0\xca\xc3\x5e\xdb\x47\x7b\x67\x9a\xdf\x26\x47\xfc\x95\xfd\x5e\x53\xfe\xad\xf7\x85\x56\xd8\x66\x15\x10\x4f\x79\xb7\xae\x55\x66\xf7\x0d\x49\x6d\x21\x73\x57\x37\x1b\x58\x8f\x05\xe3\x35\x85\xdd\xce\xc8\xf0\x6b\x85\xbb\x36\x41\x05\x2e\x98\x4c\x6a\xaa\x6e\x63\xed\xb9\xbb\xdb\x03\x57\x0d\x53\xb5\x02\x57\xb4\x08\xcc\x76\x81\xe8\x24\x68\x6f\x82\xed\xd7\x82\xd3\x9b\x9b\xdd\x4d\xdd\xf5\xb5\x41\x05\x2c\x70\x73\xb3\xbb\x1e\x8b\x3e\x59\x2c\x2a\x61\xdc\x1f\x33\xaf\xb6\xcb\x15\xbb\x60\xad\xa4\xe4\x8d\x4d\x5e\xa7\x05\xf3\x99\xac\x0b\xb6\x79\x0f\x8a\x65\xae\x46\xcf\xb9\xa2\xd5\xa2\x62\xd2\xf8\x59\x32\xc1\x3b\x76\xfe\x16\xe7\xb3\xdb\xb1\x03\xe6\xb1\xfc\x93\xd1\x4b\x04\x4b\x9f\x11\xf9\xce\xe6\x5c\x5d\x7f\xbb\xa2\x9b\x68\x7f\xbb\x3d\x4b\x5d\xb3\xa6\x3e\xa9\x6e\xab\x67\x17\x97\xf9\x7e\x32\x0d\x7d\xa3\xa6\xc9\xd3\x2b\x8a\x46\x27\xa9\x5a\xce\x19\x06\xba\x5c\x73\x4c\xeb\xee\x56\xfa\x98\x36\xde\x2f\x20\xc8\xb2\x9b\x1b\x80\x7d\x66\xa7\x8b\xe5\xa2\x34\x27\xe8\x74\xd8\x3d\x1d\xe5\x19\x37\x44\xc5\xe4\x9a\xc9\x37\x00\x83\x76\x8f\x35\x34\x02\x81\x27\xa7\x97\xb6\x3f\xe7\x47\x4f\x2e\xe8\x3b\x9b\x80\x77\xe2\xa3\xc9\x14\xb4\x4e\x40\x65\x62\xc8\xdf\x45\x6d\x58\xc3\xa7\x00\xcd\x02\x7c\x44\xd9\x88\x49\xc7\xa0\xc3\x74\x23\xaf\xe9\x3a\x44\x55\x8d\x24\xdd\x0a\x47\x66\x51\x0d\x93\x0d\x5f\xe8\x56\xaf\x71\xb1\x3e\xb1\x64\x25\xbb\x1b\xcd\x88\xc5\xb1\x33\x54\xb0\x41\x36\x88\x7a\x02\xf8\xb4\x63\x1d\x47\xed\x82\xfd\x4c\x36\xaf\x2d\x73\xb6\x55\x55\xb5\x42\x67\xb9\x31\x3b\x43\x67\xd5\xf4\x81\xad\xd9\x15\x42\xcb\x97\x37\x82\x50\xbb\x8b\xb9\x79\x04\x7f\x87\x93\x41\xa2\x7c\x61\x77\x90\xeb\xb5\x9d\xaf\x71\x8c\x7b\x16\x3d\xea\x74\x56\xab\x64\x3f\x0d\xaf\xbf\x06\x6c\xa8\xdd\x1c\xdf\x54\x8c\x2b\x37\xc7\x14\x9f\xd7\x19\x0f\xc2\x88\x2f\x23\xd5\xeb\xaa\x69\x99\x24\xd3\xc9\x13\x6a\x8e\x5e\x77\x91\x5e\xf8\x9b\xba\xf7\x20\x28\x4d\x7a\xe1\x61\x37\x4d\x66\xa5\xe9\x36\x08\x64\x75\xd3\x74\xdd\xa4\x5a\x98\xb6\x57\xd5\x8e\xe7\xa9\x9b\x1c\x78\x73\x54\x9e\x85\xda\x90\x58\xa8\xdb\xd6\xfb\x9a\xb6\x06\x11\x55\x7d\xbb\x10\x7b\x7b\x2d\x07\xde\xf6\x14\x22\x7d\xf1\xad\x67\xb1\xae\x17\x7d\xb6\x36\xb1\x9b\xf9\x0a\x17\xe8\x3d\x5f\x30\x1e\x0b\xbb\x1c\x34\x5c\xea\xa2\x17\x8a\xce\x87\x51\x61\x08\xf0\x3a\x02\x6c\x26\x20\x5f\x23\x3b\x5e\x03\x6e\x7a\x1e\xc5\x04\xe4\xfa\x71\x29\x47\x0b\x60\x71\x4d\x55\xe0\x4f\x9d\x99\xf4\x1b\x56\x1b\xd6\x5c\x2f\x18\x1f\x27\x66\xe7\x80\x69\xb6\x8d\xe6\xae\x21\x5b\x03\x43\x98\x9d\x16\xad\xe4\xf7\xc7\xed\x4e\x3a\x28\x62\x6a\x0f\x8e\xd6\xed\x41\x3b\xf0\xf5\x86\xcd\x70\x1e\xbc\x01\x70\x4f\xa9\x4c\x5b\x38\x23\xd6\x75\x77\xe2\x86\xa6\xa7\x7d\xdb\x03\x3e\x01\x98\xfb\x78\xc1\x5f\xc7\x5e\xf0\xde\x72\xbd\x4f\xf7\xdd\x61\x61\xd7\xb6\xd6\xeb\xda\x1c\x54\xb6\x0b\xc7\xa2\xee\x0a\x11\x32\x45\x09\x3f\x7a\x57\x13\x9c\xdc\x93\x21\xf6\x3a\x70\xa0\x3e\xdf\x54\x2c\xe2\xd6\xaa\x36\x38\xc3\x1b\x1c\xe4\xf0\x5b\x2a\x74\x7b\x48\xdc\x25\xf2\xf4\x76\x9c\x4e\x13\x65\xf6\xda\xdc\x78\xac\xd6\x86\xf9\x69\x42\xf4\x81\x75\x88\xb2\x81\xcd\x93\x9b\xd5\x9a\xe2\xed\x13\xc3\xa4\x64\xe2\x50\xa4\x61\x0c\x51\x64\xfc\xe1\x63\x94\x16\xc6\x13\x9a\xab\x1d\x3a\xd2\x15\x20\x0c\x4f\x97\xb6\x27\x41\x88\xdd\x31\x33\x4c\xa7\x14\x7f\x1f\x6d\xce\x15\x93\x4c\xb7\xcb\xb6\x95\xfa\xc8\x44\xac\xb3\xa4\xa8\xe7\xcb\x69\x7a\xd7\x2b\x41\xb7\x92\x77\x14\x22\xb7\x91\x87\xcd\xcd\xb0\x61\xca\x6e\x15\x08\x2c\xbe\x02\x10\x0b\xec\xc7\x2b\x93\x3b\xa9\x99\x94\xa8\x5b\x59\xa8\xe7\x53\x13\x6f\xb5\x4a\x7b\xf2\x01\x15\x2c\x8f\x89\xff\x90\x75\x7c\x91\x0b\x3e\x7a\x52\x55\xe2\xf2\x64\x4e\xca\xf2\x99\xb8\xe4\x1f\x9b\xa6\x58\x66\x26\x76\x2d\xb0\x85\x0d\xa5\x93\x33\xa5\x81\x94\xa5\x30\x29\x3b\xdd\xf0\x97\xbe\x91\xb7\xd6\x2a\x19\x2a\x68\x46\x49\x61\x6c\xc2\xef\xc7\x2b\xbc\x65\x72\xae\x44\xfe\x65\xc4\x8a\xf7\xe5\x2c\x4e\xaa\x7c\xb6\x49\x81\x65\x23\x55\xae\x7f\x0c\x9b\xec\x1b\x0c\x5f\xf2\xd4\xc9\xb1\x77\x8f\xb1\xf1\x48\x78\x67\xa4\xdd\x08\xc1\xaf\xe7\xc0\x5b\xea\xdf\x60\xfa\x74\x52\x3f\x15\xf8\xf0\xcc\xbf\x22\xff\x1b\x7e\x0a\xfe\xbf\x60\xb1\x08\x04\x50\xcb\x4b\xba\x10\x39\x58\x08\xda\xc8\x72\xa1\x5c\x67\xad\xc5\x20\x2c\x5f\x8f\x0b\x66\x83\x19\x36\xee\xed\x1d\x06\xeb\x7e\x98\xb7\x54\x2e\x4b\x95\x94\xab\xc5\x26\x06\xcd\x16\xde\xf5\x7b\x95\x6d\xe9\x0b\x8f\xb0\x63\xc9\xd6\x58\x98\x87\xde\xca\x91\xba\x22\xe8\xb2\x41\x01\xa6\x45\x75\x3b\x4e\xe8\xda\x74\x25\x0e\x7c\xd7\xf7\xf6\xf8\xde\x9e\x8a\x81\x56\x5b\x31\xde\x25\x16\xa5\x29\x37\xfc\xac\x77\x96\x42\x09\xb2\x25\x80\x4b\x9a\xc7\x31\xfa\xd6\xdd\x63\xbc\x5c\x3c\x63\x52\x7f\x00\x0d\xab\xb8\xe4\xe1\x6f\x0d\x93\xb8\x0a\xbf\x88\xa5\x6a\x7e\x02\x67\xa4\xad\xe5\x4d\x01\xc9\xf2\x82\x2f\x96\xea\x6f\x86\xb2\x40\xdf\x58\x02\xde\xe8\xbf\xd7\xd9\xdd\x63\xf4\x0d\xb8\xe0\x19\xbd\x50\xba\x4e\x4d\x4f\x19\xf6\x21\xa5\xbf\x02\xb3\x66\x30\xdc\xeb\x21\xb7\xe9\x56\x0e\x63\x35\x69\xe6\x02\xd7\x67\x28\x72\x51\xee\xa3\xc3\xc8\x1a\xcd\xc9\x26\xc9\x62\xf1\x0f\x93\xa2\x36\x28\xf3\x96\x09\x53\xca\x69\xa5\x27\x1d\x90\x3f\x80\x22\x62\x93\x88\x7c\x59\x55\x94\x1b\xfd\xed\x8b\x62\x4c\x57\x2b\x77\x63\xb1\x98\x70\x7a\x39\x78\x5a\xb2\xc5\xa9\x20\x55\xf1\x3f\x27\x8e\x1d\xce\xc5\xe2\xca\xd8\x3b\x1e\xa0\x7d\x8a\xaf\x8d\xe5\x66\xfb\x69\xf2\x26\xbd\xf3\x92\xf1\xf3\x41\x2e\x16\x8c\x16\x03\x25\x06\xb9\xeb\x58\xaf\x5d\xe3\xa5\x1a\x9f\xea\x22\x84\xc5\xd6\x52\xb1\x76\x5a\x72\xdd\x51\x33\x46\x3d\xcd\x6e\x6e\x0c\x3b\xa1\x7b\x1d\x5a\xe3\x65\x05\xd9\xc9\x93\xaa\x47\x78\xc5\xe0\xf1\xdf\x11\xc5\xb1\x71\x98\x93\xc9\x84\xae\x32\x2c\x26\x5e\x3b\xa5\x2b\xd8\x4b\x84\x79\xa4\x22\x0f\xa4\xa3\x16\x46\x19\xed\xa2\x18\xc5\xaf\x6d\xb2\x7b\x8c\xc5\xa8\x7e\x6f\x13\x31\x0a\x9f\xdb\x44\x8c\xe2\xd7\x36\x11\xa3\xc6\x63\x9b\xc4\x4c\xb1\x79\xd3\xb0\xcb\x0d\x59\xa2\x75\x42\xf8\x17\xfb\x85\x54\x45\x4b\x77\xdc\xac\xe0\xb5\xc7\x56\xaf\x99\xba\xe1\xc0\xeb\xb4\xdc\x84\x3b\x45\xea\xb6\xc6\xe8\x1d\x39\xcd\x12\x77\xbb\xd3\xea\xc7\x59\x8d\x07\xfc\x3d\xf0\xc1\xe1\x0a\x60\x8b\x1d\xbb\x56\x2b\x9e\xb3\x44\x94\xac\x96\xe2\x3a\xc6\xbd\x71\x06\xbb\x46\x24\xf7\x4d\x10\xa8\x96\x2a\x02\xc8\xea\x94\x7d\xf6\x06\x69\xa1\x9c\x75\x33\x70\x4b\x19\x0a\x74\x1d\x1f\xe6\x93\x66\x97\xc1\x26\xc7\xc1\x3d\x3c\x2d\xd2\x94\x6b\x88\x35\x8e\xf3\xbc\x8b\x65\xb4\xce\xe2\x6e\x74\xcd\x88\x37\x06\x67\xcd\xc1\x9f\x3b\xb1\xfa\x0e\x9b\xb0\x51\x45\x17\xa5\xa6\xa1\x0f\xff\xff\xfc\x70\x6a\xf8\xe0\x7a\x46\xac\x19\x53\x5e\x76\x4d\x23\xc1\x96\x46\xe6\x86\x6f\xac\x2b\x73\x17\xdb\x89\xdb\xfa\x0d\x62\x05\xac\x55\x8a\xf7\x0d\x5d\xa3\x02\xc3\xe3\x71\xca\x23\x1f\xbb\x17\x35\x6e\xbd\x30\x6b\x02\x21\xf0\x69\xe0\x38\x0f\x3e\xc6\xd8\x6a\x1f\xc6\xcc\x3b\xd6\x13\xfb\xce\x9a\x8e\xf5\xc4\x0f\x9a\x74\xac\x27\xce\x5c\xa8\xe1\x58\xbf\xd3\x94\xd0\xc4\x36\x27\x55\x08\x8d\x82\x5b\xd3\x10\x02\x45\x47\x6a\xca\x5a\x37\xa7\xaf\xa8\x4a\x6e\x97\xed\xaf\xef\xbb\x0b\xf9\xc9\x8a\x9e\x55\x54\xce\x0c\x7c\xf1\x0f\xfc\xa9\x58\x5c\x35\xb2\x88\x82\x49\x16\x88\xce\x21\x91\x31\x6e\x1e\x7e\x32\x3d\xa6\xc1\xbd\xfd\x01\x81\x9f\xc2\x2b\x71\x41\xef\x69\x0a\x26\xab\xc0\x96\x53\xf0\x96\x45\x6d\x00\xe3\x99\x0f\x8b\xa8\xad\x0b\x86\x33\xb0\x89\x4e\xa4\xd7\xea\x63\x41\x57\x60\xbb\xd4\x16\xfb\x36\x8f\x2c\x36\x64\xba\xdb\x5c\x7b\x6d\x53\x3c\xd7\xc0\x54\xaa\xe7\x5c\x83\xd3\x6b\x3a\x88\x78\x9e\xaf\x91\x2c\x28\x09\xbe\x02\xa9\xc7\x26\x45\x6c\xcd\x3c\xda\xc8\x40\xbe\x7a\xc4\x8b\x05\x00\xec\x71\xa2\x71\x4a\x1f\x6a\xe2\x65\x07\x36\xcc\xe9\x66\x1f\x8e\x3e\x66\xa1\xe1\xee\x33\x91\xa7\x96\x6e\x2a\x6b\xc2\x44\xef\xf5\xfb\x45\x32\x78\x85\x11\x7f\x02\x65\x52\x13\x56\xa1\x81\xe7\x9d\xac\x4c\x5e\x0b\x4e\x43\xfb\xb4\xfb\x21\x2b\x47\xc0\x2f\xad\x9a\x54\x2d\xd7\xb7\x90\x4f\x1a\xb4\x25\x84\x9c\xa9\xa9\x50\x7d\x29\xdf\x2f\x6c\xae\x66\xbd\x72\x51\x47\x0d\x6f\x44\x8c\x9d\xd2\x13\x1b\x01\xca\xe9\x41\x86\x6e\x70\x4d\x34\xc2\xc6\x3e\x13\x97\x1c\x0c\x69\x77\x13\x64\x6c\x97\x45\xac\xdd\x79\xfc\xb5\xec\x88\x59\xc5\xbd\xed\xc9\x0b\x43\x87\xff\xbe\x77\x05\x78\x89\x9e\x7b\xf2\x92\x5e\xd0\x72\xcd\x86\xfc\x04\x7c\xc8\xef\x7b\x47\x2c\x33\x75\x0f\x5b\x62\x54\x1f\x84\x17\xb1\x0d\x68\x6d\x8b\x5d\xf7\xe5\x3f\x36\xf0\x04\xb4\xef\x30\xa8\x4d\x36\x77\x38\xd8\x3a\x7b\x06\xac\x76\xc8\xfe\xa7\x0d\x9a\xdb\xba\x89\x9d\x5e\x42\x63\x17\x05\xab\x76\x66\xed\xe3\x8a\xb6\x85\xcd\xe9\xaf\x9e\x6c\x5e\x25\xec\x4d\xaf\x37\x08\x67\x37\xd8\x8f\x86\x8e\x0b\x4e\x8d\xf4\x7f\x4b\x5a\x99\xa8\x68\xcb\x85\xfe\xd9\x27\xce\x44\x07\x93\x6d\xc3\x4f\x18\xaa\x03\x3a\x0b\xcd\x16\x9c\x7f\x31\x94\x40\x1e\x7c\xf4\xde\xfc\x18\x44\xf1\x0b\xb6\x37\xfb\x42\x28\xe1\xdc\x00\xf1\x0c\x96\x15\x7d\x27\xce\x35\xaf\xfc\x98\x4e\xd0\x63\x69\xbe\x4c\x42\x6a\xa8\xce\x87\x12\x54\x1e\x6f\x94\x9a\xee\xed\x0d\x75\x87\x4a\xd7\x4f\xf6\xa7\xeb\xdb\xde\x22\xcd\x68\xb8\xed\x40\x23\xf4\x8a\x4c\x50\x2f\x35\x8e\xfd\xf9\x3b\x5b\x6d\x04\x60\xbc\x3d\xbb\x03\xc1\x67\xa2\x1a\x82\x6b\xcf\xd1\xf7\xea\xaf\x0f\xbe\x57\xfb\xfb\x09\x3d\xf6\x2f\x82\x53\xb4\xaf\x1a\x44\x70\x5b\xcc\x36\x0c\xe4\x6c\xe1\x9c\x6c\x7b\x97\x17\xad\x76\xf2\xd8\x36\x0c\x48\xc4\xfc\x7b\x9b\x4d\x5e\x2c\x04\x33\x4a\x19\x32\xa9\xa3\xe1\x31\x8c\x6a\x7d\xe9\x21\xca\xdc\x77\x81\xd1\x61\xe0\x70\xff\x58\x77\x3e\xa9\x8b\x65\x86\xab\x30\xe6\xb8\x7d\xa3\x28\xc3\xe5\xe4\x03\xfa\x06\xed\x57\xd8\xfc\xbb\x8f\x06\x3f\x0c\x0a\x76\x81\x3e\xfa\x4d\xcc\x27\x47\xdf\xe7\x7f\x7d\xf0\x7d\x5e\x6f\x22\xa7\x97\x83\x67\x95\x58\xe8\x1d\x18\x96\x1f\xf2\x8f\xf8\x7a\x46\xf5\x33\x95\xe3\xeb\x27\x4b\x35\x13\x15\xfb\xc5\x46\xc3\xf9\x91\x92\x8a\x56\x03\xe4\xe2\x76\x26\x0e\x7a\x85\x97\x55\x39\x26\x78\x4e\xd5\x4c\x14\x63\xb4\x10\x52\x21\xbc\x20\x15\x99\x83\xbd\x67\x08\x7b\xf3\x92\xe5\xe7\x9a\xc4\x1d\xef\x1e\xe1\x39\xf9\xfc\x37\x56\x52\xc9\x7e\xa1\xe3\x07\xdf\x1e\x99\x36\x65\x49\x4b\x00\x07\x72\xfc\xad\x85\x12\xaf\x96\xa5\x62\x8b\xd2\xc0\x2b\x52\x14\x90\xba\x4e\x63\x11\x93\xec\x89\x2c\x95\x78\x53\x89\x9c\x4a\xf9\x7f\x4b\x6a\x80\xac\xd1\x28\x8c\x9b\xf9\xd1\x4c\x7e\x0d\x10\x04\x47\x70\xcc\x19\xc1\xe9\xf2\x7f\xeb\x1e\x34\xcc\x33\x56\x77\x61\xad\x96\x28\x19\x66\x49\x8b\xc1\x19\x33\x56\x5b\xdc\x61\xc6\x1a\x8c\x41\x15\xe0\xc3\xeb\x31\x48\x51\xd0\xc2\x34\xea\x9a\x05\xad\x2a\x11\xaa\xb4\x8c\x96\xdc\x4d\xe0\xb9\x2e\x1c\x2a\x3d\x60\xf8\xc1\x04\xd0\x30\x48\x52\xf7\x90\x58\x82\xca\xae\xa9\x15\x3d\x18\x9b\x81\x46\x56\x54\xfb\x1e\x72\x0d\x8b\x22\x69\x6c\x23\xad\x42\x63\x17\x74\x57\x03\x10\x36\xb6\xb2\x35\xfb\x7d\x08\xb2\xfd\x6b\xe8\xbf\x5d\x1a\xff\x00\x97\x83\x43\xe5\x81\x77\x9e\xdc\x52\x0b\xfc\x9b\xe3\xee\xfe\x18\x7b\x2b\xd3\x83\xad\x7d\xbf\x5b\xee\xdb\x79\xda\xcd\x9b\xd3\x4b\xe7\x10\x6b\x42\x97\xcd\x84\xff\xed\x63\x43\xcd\x88\x6c\x39\x89\xd7\x44\x42\x1e\xb8\x2a\xaf\xf3\x40\xc8\xdb\xbe\xda\x26\x34\x76\x4e\x2c\x47\xed\xe7\x71\xaf\x23\xf4\x0e\xfa\x9d\x13\xfe\xa4\x28\xee\x3c\x89\x96\x3f\xc3\x4f\x97\x9c\x56\xb1\x03\x67\xab\xce\x2b\xc2\x89\x35\xf9\xbb\xb5\x7f\xfa\x36\xfa\x40\x7c\xbb\xcc\x42\xa4\x28\x0e\x14\x99\x1e\x9c\x31\x5a\x16\x07\xc7\xb5\x61\x55\xd3\x36\x6f\xa4\x6b\x31\xbe\x58\x2a\x94\x8d\xc4\xd9\x99\x09\x46\xa4\x49\x02\x9b\xf3\xc8\xfd\x4a\x44\xac\xde\x1d\xee\xd2\x91\x9c\xb1\x33\xf5\xbf\xf4\xea\xe6\xe6\xbf\x8d\x16\xf9\x72\xc6\xf2\x59\x76\x73\x13\x14\xed\xed\x0d\xff\x7b\xe2\xcb\x6e\x6e\x8e\x1f\x46\xbf\xbe\x0b\x7f\x3d\xfc\x73\xf4\xeb\x2f\xd1\xaf\xa8\x97\x47\x47\xd1\xaf\x6f\xa3\x3e\xff\x12\x55\x8d\x7a\x39\x7e\x10\x0d\x61\xff\xf8\x61\xf2\xdd\xb7\x7b\x7b\xf6\xc7\x5f\x27\xff\x7d\x14\x94\xfc\xf7\x9f\x83\x92\xe3\x07\x0f\x82\xa2\x47\x7f\x09\x8a\xbe\xfd\xb3\x4d\x5a\xbd\x65\x50\xa9\xfe\x27\xd2\x37\xb4\xc1\x7b\x49\xab\x7f\x32\xc9\x4e\xcb\x8d\x36\x4a\x20\x77\xaa\x5d\xfd\x43\x25\x6b\xf0\x8e\x54\x88\x3d\x7e\xbb\x70\x0a\x98\x26\xac\xcd\x55\x9c\xca\xc3\xe7\x76\x6e\x32\xec\xad\x1c\x7e\x91\x76\x33\x5e\x1d\x9c\x9c\xa3\xe0\x8f\xb1\x9a\x44\xa0\x37\x41\x43\xce\xc9\xe7\x77\x26\xea\xc2\xaf\x14\xe7\x21\x49\xe7\x76\xc6\x79\x10\x58\x68\x28\x20\x26\xc2\x06\x53\x0a\xc1\x2a\xfd\xeb\x84\xef\xed\x0d\x55\x18\xf1\xe1\x9a\x2f\xf5\x02\xc7\x14\x03\x02\xd5\x88\x9e\xee\xef\xeb\x5d\xd0\xc4\xa9\xcd\xec\xfe\xbd\xf8\xeb\x84\x7f\x2f\xf6\xf7\xb3\x64\x63\x61\x1b\x23\x14\x69\xe7\x21\x7c\x84\x6a\x7b\x6d\xa7\x2c\x5e\x23\x12\x9e\x37\x83\x2a\xb4\x43\xff\x45\xa8\x03\xac\x3c\xf5\x55\x88\x8f\x59\x6e\xd5\xe0\x58\x73\x09\x1f\x3e\x62\x32\xf9\xf0\x31\xc8\xea\x53\x67\xb8\xf7\xea\x37\x1e\xda\xb0\x53\x8f\xeb\x5f\x44\x5e\xc5\xab\x1d\x06\x06\xa6\xc2\x38\x05\xde\x43\x7f\x24\xdc\x7c\xe1\x49\xc3\x8e\xc7\x28\xa9\x47\xd0\x90\xdd\x46\xce\xd8\x62\x48\x30\x5a\x72\x1b\x04\xae\xe1\x27\xb0\x55\x3f\x0c\xa3\x56\x2f\xfe\xe9\x54\xad\x70\x2e\x9a\x07\xfa\xe8\x6e\x69\x85\x43\x9f\x11\x73\x77\x46\x4a\xbc\x14\x97\xb4\x7a\x4a\x24\x1d\xba\x48\x60\x3b\x3c\xb8\xbd\xc3\x20\xf4\x40\x89\xb9\x61\x23\xa5\x22\x95\x92\xff\x62\x6a\x36\xe4\x18\x1d\xa0\x76\xe6\xef\x18\x01\xa2\x7d\x3a\x82\x3b\xdb\xa9\xbe\x1d\x96\x70\x68\xbc\x6d\xbe\xde\xdd\x57\xa7\xb2\x30\x73\x3b\x92\x4f\xd0\x37\xc8\xad\xbf\x34\xeb\xcf\xf7\x27\x14\xe7\xfb\xba\xc0\x56\x2a\xd2\x5e\x71\x85\x7f\x4e\x12\xe1\xbc\x6d\xcf\xfe\xcc\x57\x1d\xde\x03\xe1\x0e\xf6\x40\xe5\x7a\x11\x5c\x07\xb9\xfe\x5b\x9a\x09\x6f\x6b\x08\xec\xfc\x24\x0b\x91\x07\x26\x8f\x33\x62\x2c\x70\x0d\x7b\xd6\x91\x52\xc7\xb6\x45\xb7\xa0\xf4\x9c\xd1\xef\xeb\xfe\x7e\x81\xf5\xf4\x36\x7a\x02\xb6\xa1\x6a\x24\x6f\x0a\x97\x56\xcb\x6d\x62\xc9\xfa\x1a\x6f\x53\x5b\x3f\x9a\x59\x30\xe9\x78\x72\xb0\x41\x0e\xe7\xe0\x44\xa3\x44\xd4\xf1\x60\xa9\x8d\xa6\xe9\xcb\x9d\x54\x04\xde\xd6\x52\xd9\xdf\x77\x45\xb6\xb6\x54\xfe\x83\x47\xfd\x83\x47\xfd\x83\x47\xfd\x83\x47\xfd\x15\x78\xd4\xe3\x3f\x3f\xfc\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\x5d\x47\xc2\xb3\x82\x9e\x92\xea\x3f\xcd\x6e\xa4\x3b\xd2\x31\xc2\x68\xd0\x0c\x71\xbc\xb5\xfb\xe1\x16\xb1\xc5\xee\x66\xc1\x12\xe7\xa3\xe8\x8e\x40\x7c\xc6\x4a\x63\xa8\xd5\xc3\xf1\x6e\x74\xdd\x08\xb9\x85\x43\x82\x7b\xf5\x85\x72\xd4\x0e\xbb\xa2\x63\x35\xdd\xef\x36\xc6\x25\xeb\x1b\xe6\xcc\x45\xa7\xec\x1f\x97\xcc\x86\x25\x83\xe4\xf7\x49\x9b\xa2\xdb\xb8\x45\x07\xe7\xbb\x2d\xb3\xf0\x1f\x68\x24\xd3\x7d\xf4\x1b\x4d\x85\xfb\x1e\xbc\xf1\xc6\x6c\x99\x0a\x47\xc4\x47\x4c\x96\x88\xf5\x66\x2f\x32\x30\x7b\x11\x1d\x66\x2f\x3c\x36\x7b\x69\xa5\xf7\x49\x5a\x67\xb2\xc9\x07\xf4\x0d\x58\x86\x1c\x78\x18\x66\x5e\xfa\x00\xe1\xae\x92\xc1\x0f\x03\x16\x58\xc5\x90\xc9\xd1\xf7\xe4\xaf\x0f\xbe\x27\x1d\x56\x31\xec\x03\xe9\x63\x15\xa3\x36\x58\xc5\xc8\xff\x74\xab\x18\xb5\xc9\x2a\x46\xb5\xdf\xf2\x1d\x4d\x61\x78\x3d\x2a\x58\xbe\x70\x3d\xca\x9d\x4d\x61\x56\x2b\xdc\x9c\xe9\x75\xfb\xe6\xc7\x0e\x0b\x41\xe5\x6d\xb8\x3a\xc0\x4a\xed\x94\x37\x0d\x4b\x9b\x8e\x81\xc1\xd8\xa6\x1e\x7b\x8d\xb7\x17\x2b\x5a\x54\x6d\x3f\xf3\x9d\xc6\x81\xdd\x95\x8a\x52\x22\xef\x20\x9f\xba\xa2\x2e\xfc\xea\xd2\xfe\x98\x14\x72\x5e\x9b\xb7\xa0\x79\x20\x7a\x80\x22\x8a\x26\x2d\x66\x7b\x44\x0c\x88\xbd\xec\xbf\xf2\x30\x01\x11\xd4\x6f\xc6\x07\xa8\x63\x08\x88\x3b\x84\x0a\x98\x24\x42\x05\x18\x3f\x96\x9b\x9b\xae\x9e\x3d\x35\x72\xab\xce\x81\xe4\xf9\x5d\x47\x22\x68\x7b\x9d\x47\x36\xf5\xb5\x1c\x02\xfc\xbf\xa3\xdc\x5f\x08\x8d\xe9\xb6\xe2\x58\x53\xe2\x03\x96\xc9\xe5\xa9\xcc\x2b\x76\x1a\xbc\x0c\xe3\x66\x59\x18\x67\x02\x43\x46\x04\x21\x0d\xeb\xa2\x5b\x66\x47\xf3\xe3\x2e\xf9\x1d\x46\x4e\x7c\xd6\xa0\xb7\x9f\xa0\x39\xde\x4e\x80\xe4\x4d\x17\xfe\x44\xf6\x7c\x2c\x9c\xc7\x08\xdf\xc2\x85\x5f\x4e\x54\xdb\x85\x9f\xe3\x58\xba\x26\xb2\xc7\x62\x2c\x62\xff\x91\x04\x21\x75\x73\x33\x94\x09\xaf\x7e\x19\x7a\xf5\xcb\xd8\xab\x5f\x36\xbd\xfa\x65\x3f\xaf\xfe\x28\x42\xe8\x57\xe3\x01\x77\x3f\xa7\xd2\xe5\xc7\x23\x4c\xd8\x84\x49\xe3\x1c\xc0\x7d\x5c\xb5\x3d\xe0\x38\x16\x66\xe5\xf2\x56\xde\x5e\xf2\x7e\x3c\xe0\xbe\x96\x1d\xb1\x1e\x70\xf7\xb4\x27\x77\xf5\x80\xfb\x1a\x76\xc5\x7b\xc0\xf5\xd9\x93\x0e\x77\x2f\x79\x6f\x1e\x70\x5f\xc3\x8e\xd4\x1e\x70\x77\xdd\x12\xc1\xff\x2e\x94\x70\xd9\x1e\xd8\xd9\x10\x21\x93\x64\xae\x61\x9b\xe0\x20\x7a\x2c\x66\x9c\x89\x4b\xe7\x23\x7d\x6b\x2b\x01\x4d\x73\x1c\xd8\x18\x0a\xbf\x27\x2b\x81\x5b\x04\x25\xdb\x2a\xad\xce\xda\x0c\x0a\x1b\xc4\x86\x25\xe3\xe7\xdd\xd2\x47\x90\xd0\xe3\x19\x91\x6f\xc8\xda\xc4\x65\xee\x76\xcb\x99\xb8\x04\x9a\xc8\x46\x9b\xf1\x16\x06\x9c\xba\x00\x34\x61\xe6\x68\xc8\xc1\xa1\xff\xda\x8e\x84\xff\x2d\x25\x8a\x3d\x8d\x0b\x2e\x84\xa2\xef\x66\xc4\x4a\x13\xf4\x46\xbc\x64\xe7\xd4\xff\x00\x56\xd5\x44\xd1\x08\xe4\x7e\xf5\x47\x08\xf9\x7e\x3b\xa3\x26\x3f\x58\x3b\x16\xc4\x88\x94\xa5\x2b\x4c\xd3\xfa\x4c\xbe\x64\x46\x2c\x79\x1b\x82\xf6\xe7\xe5\x7c\xf1\x4e\xd8\x83\x1d\x76\x12\xd3\xbd\xd3\x08\x9b\x12\xfb\xc4\x5f\x32\x7e\xfe\x0f\xc2\x8b\x52\xb7\x59\xe1\xd4\xd7\x16\x6d\x64\xaf\x73\x03\xf6\x06\x4f\x0b\x98\xb1\x66\x24\x54\xf2\xa1\x20\x8a\x1c\x38\xe8\x31\xf9\x93\xaa\x96\xf4\x4f\x1f\x9d\xe2\xdc\x48\x9b\xac\x5d\x03\xfc\x5d\xdf\x39\x09\x93\x60\x10\x5c\x5b\xcf\xce\xe9\xd7\xea\x19\x49\x2b\x28\x30\xe0\xb7\x7e\xb9\x93\xc9\x84\x8d\x5c\xd2\xd3\x9b\x1b\xa4\xc8\x69\xfc\x2d\xdb\xdb\x63\x41\xe2\x31\x93\x8b\xc8\xab\xf3\xdc\xe2\x45\x84\x5f\x22\x9d\x36\x1b\xb9\xfc\xa9\xed\x68\x5a\x8f\xd9\x48\x54\x8b\x19\xe1\x93\xdd\xa3\x71\x7a\x4a\x7b\x7b\xa2\x71\xc0\x41\x87\x2b\xfb\xd4\x5c\x37\x8f\x1b\x31\xbc\xcd\x7a\x03\x25\xd9\x69\x25\xce\x29\x3f\xb0\x10\x45\x8e\x16\x95\x61\x4a\x9e\x41\xfd\xa1\xfe\x24\x95\x58\x68\x40\x4c\xa6\x04\x9e\x33\xde\x3d\xce\xc6\xc3\x9e\x75\xa9\x99\xf7\x53\x7d\x3c\x43\x8e\x59\xe6\xf2\x57\xc7\x2b\xa0\xd9\x75\xc8\xca\xa5\xdc\x1f\x23\xef\xc8\xfa\x12\x79\x4d\xcc\xe8\x92\x30\x75\x92\x57\xa2\x2c\xdf\x89\x56\xac\x72\x48\xcc\x57\x14\x27\x6b\xd2\x2a\x07\xd9\xb0\xfa\x01\xac\xc9\x64\xa2\xba\xd4\x0e\x80\xa4\x6b\x3e\x62\xa9\xe1\x24\xf2\x84\x03\xf4\x1a\xa4\xa8\xca\x1e\xab\x8e\x84\x56\xe3\x64\x41\x8c\xc8\x23\xe0\x6e\x83\x88\x25\xd2\x80\x6d\x91\xc2\x2a\xa9\x45\x6e\x05\xe4\xa9\x93\x5c\x35\x73\xaf\x86\xa1\x62\x6c\x22\xad\x3a\xa9\x55\xb3\x72\x18\xab\xc5\x56\x8e\x93\x58\x85\x95\xa3\x60\x62\x34\x8a\xbc\x95\x4e\x73\xd6\x82\x33\xed\xf3\x96\x97\x4c\xe5\xb3\xa1\x0b\x5b\x10\x9c\x71\x76\x9d\x13\x49\x07\x22\x85\x84\xc6\xa7\x15\x25\xe7\x3b\xe9\x0a\x70\x11\xc6\x9e\x20\x6b\x9f\xb8\xbe\x24\xd3\xe0\x7e\xe8\xfb\x24\x3a\x2e\x41\x16\xd8\x5f\x34\x13\x64\x35\x4e\xd1\x6e\xa2\x89\xd5\x36\x30\xc3\xef\xde\x76\x78\x97\xaf\xcd\x1e\x40\xf0\x7e\x0c\x1f\x3c\xa6\x78\xae\x89\x18\xb5\x4a\xc7\xd3\x0f\x66\xba\xca\x56\x7a\x3e\x77\x98\x0b\x6c\x85\x4b\x83\xb4\xcd\x4e\x64\x3b\xeb\xce\x49\xf3\xd5\xe3\xad\xfb\x5c\xb9\x58\x50\xe9\xf8\x7e\xa6\xab\x36\x6d\x55\x47\x0f\xf2\x04\x42\x9b\x2c\x83\x84\x16\x51\x26\x0f\xf3\x2c\x21\xe2\x54\x34\x42\x44\xa8\x24\x3a\x6f\x51\x37\xbe\xef\x7f\x8a\xcd\x02\x7a\x4d\x3a\x75\x0b\xe5\xc3\xb1\x6a\x22\x0b\x06\xb8\xa5\x98\xdd\x70\x12\x95\xcd\x5a\xf4\x75\xa7\x5a\xde\x9a\x79\x28\xd8\xd9\x99\x26\x25\xdd\xf2\x20\x3a\xf0\x8c\xc8\x67\xba\xa0\x15\xae\x97\x9d\x9d\x6d\xa0\xa0\x75\x8d\xa6\x39\xef\x5b\x51\x96\xa7\x24\x3f\x5f\x6b\x1f\x10\x91\xc8\x9b\x69\xf7\x35\x12\xf8\x9e\x68\xb2\x2b\x64\x6e\x9c\x39\xb2\x57\xae\xda\xed\xe4\xec\xdb\x19\xf5\xb6\xe4\x05\xfe\x26\x36\x42\x33\x50\xab\xba\x72\xb2\xbd\x33\xaa\xf2\x99\x3e\xc6\x9a\x33\x07\xff\x70\x1c\x94\xc4\x28\xaf\x33\xec\xa1\xcb\xd9\x65\x1a\x75\xbe\x3d\xac\xd2\xa1\xd3\xcd\xad\x69\xa9\xe3\x20\x64\xdd\xa6\x5c\x40\x95\xbd\x3b\xe9\xa4\x38\xee\x66\x25\x2e\x44\xb0\x4d\x21\xc0\x74\x2d\x42\x81\x85\xd9\x96\x75\xf9\x11\x1a\x93\xd8\x56\x26\x61\xec\xd8\x0e\x16\x62\xb1\xa0\xd5\x01\xd0\xc4\x8c\x4f\x0f\x16\xa4\x6a\xc9\x26\xc2\xaa\xfd\xbb\xb8\x33\xc0\xe9\x6c\x60\x97\x88\xf0\x35\xe5\xcb\x39\xad\x9c\x16\x7d\x4a\x53\xf1\x80\x3d\x24\x5a\xad\xb2\x2d\xf6\x64\xfb\x2d\xf8\x3d\xae\xd8\x98\xc6\x5b\x1b\xeb\xdf\x28\x69\xf3\x3b\xfa\x59\xfd\x8d\xd1\xb2\xa8\x93\x36\x6f\xcd\xb4\xff\xff\x86\x41\xf2\x93\x6d\xd2\x96\xc2\x7a\x15\xfd\xac\x48\x45\xc9\x6f\xb9\xe4\x27\x15\x25\x5f\x66\xc5\x65\x41\xab\x3a\x4d\x6b\x68\xed\xfd\xa5\xb2\x74\x47\x7a\xf8\x60\x42\x1f\xef\xb4\x32\xb0\x0e\xfd\x2a\xd6\x34\x23\x72\x66\xa6\xf3\x71\xa3\x7a\x39\x4a\xec\xdf\xc6\x62\xef\xfa\x26\xeb\x7f\xf7\x6b\xe4\xea\x8f\x78\x63\x67\x31\xfe\x8e\x4c\x63\x72\x38\x28\x48\x49\xc7\xb7\x3c\xc7\x76\x4a\x99\xdf\xf6\x20\x4b\x91\x93\xf2\x44\x89\x8a\x4c\xbb\x93\xfa\x7a\x86\xa1\x96\x84\x4a\x1b\xed\x36\xf8\x62\x0d\xeb\x9d\xce\x39\x76\x6a\xab\xfd\x3c\x6c\xe2\xcb\xda\xb8\x43\x13\xf7\xcf\x28\x97\x4c\x5d\x8d\xd1\x31\x38\xbc\x3d\x29\x12\xe1\xd9\x3a\xd2\x8f\xd6\x94\x6a\xbf\xe4\x15\x50\xd5\x1b\x75\x6c\x12\x18\x9b\x0c\xa7\xd6\x02\x54\x13\xa7\x62\xb9\xde\xca\xf6\x5e\xa7\xd6\x27\xfb\x2a\x64\x8e\x75\xdb\xfe\xc4\x5e\xe0\x5e\x86\xc0\x70\xaa\xde\x24\x48\x1f\xe8\xaa\xbf\x2f\x5d\xdc\x4b\xb7\x3f\x5d\xd8\xbd\xdf\x4a\xc6\xa7\x4f\xca\xd2\x64\x47\xe9\xf0\xeb\xbb\x72\x89\x4f\x10\x5f\xce\x9f\xd5\xfb\xb8\x7e\x4f\x6b\x69\x61\xa8\x00\x8c\x3a\x4c\xbb\xe3\xd4\x80\x27\x3c\x94\x68\xe8\xbb\xf2\x0d\xc6\xfd\xc3\xd8\x27\x7d\x1a\x55\x14\x00\x51\x5c\x28\x51\x86\xaf\x59\x31\x0e\xe2\xfd\x46\x2e\x36\x73\x71\x41\x7f\x32\x2f\x48\x22\xec\xde\x97\x8a\x73\xa3\x36\xdf\x61\x5d\xf1\xc3\x47\xab\x70\x0c\x85\x60\x21\x04\x00\x76\xe3\x04\x0c\xa3\x4c\x2e\x40\xeb\x8e\x23\x45\xa5\x7e\xbc\x0a\xf9\x1d\xde\x92\xc5\x72\x77\x01\xea\xa0\xd7\xea\x44\x54\x0a\x61\xee\x02\x7d\xde\x62\xd4\x9f\x2a\x13\x21\xbb\x1e\x58\xb4\x06\x16\x9d\x03\x0b\xaf\x5f\xdd\x6e\xe0\x02\xc0\x51\x38\xac\x6c\x0d\x2b\xeb\x61\xd5\x10\x05\x50\xac\x61\x18\xe2\xe7\xa3\xe1\xb9\x95\x27\x52\x90\x1e\x42\x52\xdc\x40\xc8\x04\xfb\x6c\x9d\xc4\x1b\x36\x27\x50\x94\x57\x94\xa8\x76\x02\x4a\x5b\xba\x5c\x14\xbe\x34\x10\x6e\x21\xd7\xaa\x73\xa8\x54\x67\xf5\x50\xa9\x89\x74\x0d\xe5\xbe\xdf\x72\xa8\xf5\xab\x3a\x8a\x86\x22\x32\x4f\x0c\xa3\xbf\xa6\xa7\x6c\xf2\x0b\x36\xe7\x6b\x3e\x76\xf5\x92\x9a\x8d\xed\xe5\xc8\x8a\xfa\xcc\xc7\xa6\x28\x1a\x20\x0d\x2d\x92\x8e\xf7\xd2\xa5\x85\x30\x77\xe1\x9f\x8c\x5e\xc6\xc2\xbb\xe8\x2a\x45\x8a\xf9\xc6\xe5\x35\x8a\xe4\x35\xd7\x17\xd3\x86\xb8\xd0\xc3\x84\x28\x3a\x6d\x13\xbf\x7b\x59\x60\xbb\x51\x0b\xa2\xb5\x80\x4d\x2c\xfb\xe9\x03\x91\x92\xa2\x49\x3f\x93\xe3\x46\x46\xc5\x68\x4a\x90\x56\xd1\xa6\x0d\x75\x14\x49\xe7\x1a\x6b\x7a\xc5\xaf\xb0\xd9\xa0\xc7\xfa\x22\xeb\x52\x0f\xb4\xf9\x04\x21\xbf\xf2\x46\x6a\xe2\xa8\x27\xe3\x3e\xe1\xb3\xfd\x42\xe8\xdf\x0c\xf2\x68\xf3\x48\x86\xdd\x9a\xf1\xf1\x16\x50\xbe\x15\xf0\x3e\xdc\x31\xcc\x33\xb7\xfe\x46\x7a\xc8\x5f\xe3\x60\xed\x24\x60\xa4\xf6\xc1\x49\x17\x5e\xde\x7c\x4f\xa9\xdf\x42\x04\x1d\x79\x00\x37\xcd\x79\xdb\x33\x56\x2d\x5f\x60\xd5\x3c\x0d\x6b\xc0\x1f\x7e\x7a\xcc\x43\x56\x81\x66\x63\x3e\xf9\x34\xba\x64\x6a\x26\x96\x6a\xc8\x1b\xc2\xf4\x98\xae\x45\xd8\xbb\x30\x1e\x3f\x0e\x66\x3e\x0e\x25\xbe\xbd\x36\x90\x67\x3e\x39\x70\x03\xb6\xbc\x61\xdc\xeb\xb7\x20\xdb\x71\xa3\x82\xf9\xe8\xab\xbc\x61\xdc\x19\x93\xb5\xf5\x6b\x41\xa1\xd7\x5f\xdc\x86\x9d\xf1\x01\x41\x4c\x1e\x11\xd9\x23\x45\xe6\xd7\x64\xfb\x93\xf4\x24\x5c\x9f\x3c\xd0\x3c\xfc\x6e\x43\x1c\x97\xd8\xc3\x9b\x06\x75\xd6\x0c\xcc\x82\x12\x6c\x56\xcb\xe0\x84\x49\x93\x3f\xe2\x49\x31\x67\x7c\xbd\xed\xcd\x57\x15\x11\x03\x80\x5d\x30\xf7\x98\xef\xaa\x77\xc9\x92\x64\xba\x9e\x59\xb5\xec\x9f\x1f\xd4\x5d\xbd\xa4\x98\x3b\xdc\xd8\x18\xdb\x26\xb1\x1f\x5e\xa3\x4a\xf3\x59\xb8\xa2\x67\xd7\x91\x36\xcb\x5a\xf5\x98\xb9\x85\xd6\x3e\x81\x97\x7b\xf3\x23\x64\xb5\xb5\x03\x05\x8a\xba\x4d\x38\xfb\xb8\xcd\x70\xc4\x73\x4f\xa8\x65\xa2\x8d\x0f\x6a\x27\xf4\xfc\xa9\xcd\x40\x1d\x49\x77\x9f\x25\xc2\xe5\xde\xff\x19\x1b\x04\xb2\x9d\x46\xb1\x09\xae\xb6\x0c\xb4\xbb\xb5\x13\x34\x16\xf7\x05\xbc\xe4\x56\x79\x55\xfb\x82\xa7\x69\x25\x96\x8b\xee\x7a\xa6\x38\x8c\x75\xd4\x59\x33\x88\x73\xb4\xc9\xf1\x79\x9d\xf5\x23\x2d\x98\x02\x40\xa7\xff\x72\x51\xc7\xf4\xdf\xd6\x98\xa8\x06\x8a\x50\xad\x11\x2c\xa9\x9f\x7b\xcb\x52\xd2\x4a\x4e\x3e\x7c\xbc\x45\x2a\x4c\x17\xda\x67\x3b\xaf\x8e\x75\x01\x5c\x82\x94\xc8\xfd\xdf\x41\x7d\x6f\x69\x32\x28\x84\x7f\x64\xcb\xf9\x9c\x54\x57\xeb\x3a\x56\x86\x46\x6d\x87\x5b\xf9\x64\x83\x66\x0c\x15\xbe\x0e\x02\x54\x84\x39\xe1\x54\x94\x19\x5c\x22\x93\x8c\xf1\x68\x87\x47\xbd\x89\xfd\x09\x1d\xe5\x62\xc9\xd5\xca\x71\xe3\xbd\xbb\x36\x07\xa5\xbb\x65\x93\xa3\x1d\x19\x75\xcb\x82\x6e\x31\x8d\xe3\xa5\x49\xcd\xf9\xbb\x8f\xd0\x07\x66\x1d\xe1\x33\xdc\x4e\xf5\x8c\x9d\x63\xb2\x34\xb5\x42\x7b\xf8\x34\x29\xd4\x48\x6f\x54\x24\xbd\x69\x4b\x49\x6c\x88\x1a\x62\x7d\x52\x77\x9b\x35\x6c\x54\x1a\x8d\xc6\x6a\x2c\xfc\x96\xe6\xa2\x2a\x1c\x45\x64\x03\x8a\xe8\xc1\xb0\xa8\xa6\x51\x56\x3b\x98\xb4\xf9\x1a\xbc\xdd\xa8\x8a\xb5\xf7\x74\x4f\x07\x10\xd1\xe5\x4c\xe8\x4a\xfa\xff\x31\xc5\x9a\x5b\x1f\x73\xdf\x5c\xb3\xa9\xe3\xdd\xe3\x55\x14\x63\xc5\xbc\x65\x94\x8d\xb8\xa8\xe6\xa4\x64\xbf\x04\x80\xe0\xa0\x9e\xb9\x91\xc3\xb4\x51\x8f\x6d\x6b\xa2\x6f\x48\xf0\x2e\x02\xb4\x9a\x32\xd5\xaa\xe1\x4b\x83\x07\xd8\x09\xe4\x7e\xc9\x5d\xf6\xd9\x17\xb0\xca\x30\x8f\x08\x83\x27\x85\x31\xcc\xa1\x2d\x83\xc5\x96\x90\x2c\x00\x33\xe0\xc9\x63\x4c\xb7\x78\x77\xa6\x45\xf4\x0d\xa7\x97\x1e\xbd\xf4\xcb\xd7\xdf\xca\xf7\x9f\xea\xa2\x33\xf4\x88\x0f\xfc\x15\xd9\x19\xf9\x59\x6b\x5c\x6d\xa5\x70\xfe\xcd\x8d\x39\x6e\xe7\x44\xac\xaf\xfc\x6a\xa7\xeb\xbd\x90\xa2\x18\x8a\x16\x85\x00\x30\x2e\x49\x10\xb8\x69\x0c\x88\x75\x4e\xf3\x82\x09\x47\x49\xb5\x8c\x2e\x3b\x0f\xbc\x5e\x1f\x60\x0b\x84\x83\xf7\x16\x2e\xdf\xa1\x10\x5f\xa1\xee\xb3\x59\xed\x99\x53\x39\xbb\xae\xa4\xfb\x92\x4c\x0f\xe8\xce\x44\x37\x6d\x99\x45\x60\xf4\x8d\xf9\xee\x6b\x31\xeb\x8d\x57\xd3\xa1\xb7\x5d\xb0\xc3\x7c\xa9\x25\x27\x27\x68\x93\xa4\x26\x2d\x37\xec\x54\x42\xd3\x0f\x9f\x01\x30\xd9\xbe\x1b\x7e\x42\xb5\x56\x02\xd7\x17\x35\xdc\x6c\xde\x92\x95\x37\xcf\x4c\x08\x1f\xfc\xc1\xd5\x4f\xcd\xb9\xad\x34\x9f\x48\xbc\xd3\xbd\x9e\x19\xde\x3d\x6e\xbd\xef\x8e\xcd\x8f\xa7\x64\x96\xb3\xc3\x13\x18\xd8\x7e\xab\x6f\x4d\xa3\x65\xf2\x32\xb5\x36\x3b\xb8\x4d\xed\x60\x44\xc9\x85\x6e\xc8\xb3\x99\x38\x29\xa9\x77\x9c\xaf\x3f\x94\x99\xb8\x7c\x62\xde\xed\x1b\x96\x9f\xd3\xaa\xcd\x2e\xb9\xd7\xfc\xc4\x21\xb0\xa3\x6c\x27\x0e\x28\xd7\x8c\x9e\xd6\xe7\x72\x37\x70\x12\xc2\x3c\x11\xb7\xed\xea\x4d\xc8\xe3\xaa\x16\xf7\xe4\xf1\x79\x50\x6f\x13\x59\x95\x0c\x36\xa7\x9b\xb4\x91\x2f\xf4\x72\x39\x13\x75\xae\x59\x83\x35\xeb\x9f\x36\x28\xed\x4e\x3b\x0c\xdd\x71\x86\xa3\x68\x6a\x7c\x03\x45\x12\xae\x20\xf4\x23\xd8\x30\x71\xbf\xc1\x30\xb1\xc6\x34\xd7\x90\x23\x51\x28\xb5\xd5\xe6\xbd\xb7\x4a\x21\xd8\x0e\xec\x16\xbe\xb2\xb7\xe8\x9d\x98\x4e\x4b\x0a\xe8\xb5\xd9\x7d\x4b\x24\x6a\x5a\xfc\xbd\x22\x5c\xc1\x95\x6a\xb1\xba\xad\x1b\x97\x60\x76\x6b\xed\x5a\x27\x9d\x83\xd2\xb7\x32\x5c\x57\x67\x70\xb9\x4e\x64\x28\xa9\xd2\xc4\x11\xad\xe4\x30\xa2\x60\x83\xbf\xd7\x3c\xb8\x98\x7f\x95\x5b\xf2\xaf\x00\x67\x7b\x72\xaf\xdb\xca\xdd\xbe\x14\xf3\x7a\x3f\x92\xb7\xcd\x96\x0d\x0d\x75\x8a\xe5\x2b\x8d\x5c\xc2\x71\x9e\xc9\xd8\x25\x3d\xe8\x45\x7b\x17\x43\x90\x10\x27\xdd\x8a\x87\x42\xd9\x8e\x98\x18\x05\x80\x51\x04\x08\xfb\x7f\xcb\x49\xc7\x67\x3d\x37\xfd\x6f\x83\x05\x02\xe0\xd8\x42\xd6\x2d\xa0\x68\x83\xfb\x75\x2b\x9e\xf2\x92\x92\x2a\x52\x3c\xf9\x6d\xef\x29\x11\x93\x28\xcb\xc6\x7d\x16\xb7\x1e\x97\xdf\xf1\xf9\x24\xc3\xb5\xff\xf1\x7e\xcc\x41\xb2\x7c\x9d\xd8\x5a\x97\xde\xea\x91\x7d\x1d\x02\x6c\x19\x3e\xf2\x1e\x61\xec\x65\xfd\x52\xa1\xed\xbb\xab\x85\x33\xc4\x88\xed\x9c\x5c\xe1\xf8\x08\x97\xc6\x9f\x54\x43\x11\xef\xd3\x69\x0c\xa5\x74\x95\x97\xec\x8c\xe6\x57\x79\xd9\xdd\x89\xaf\x01\x0e\x01\x7a\xc3\x5f\x32\xa9\xda\x15\x5f\xe4\xe0\x9b\x6b\x7e\x3c\xa3\x32\xf7\x3f\x6c\xf2\xc9\xbe\x62\x31\xa0\x61\xed\x38\x21\x09\x6b\xaf\x42\x20\xb7\x7d\x61\x6b\x0d\xb7\x76\x43\xed\x17\x7d\x04\x70\xfb\x75\x4e\xf2\x19\xfd\x24\x97\x67\x67\xec\xf3\x18\x3d\xbe\x98\x7c\x7b\xfc\x10\x59\x95\xa1\xa8\xc6\xe8\x1b\x00\x15\xa0\x91\x77\x6e\x43\x9f\x96\x55\x69\x36\xda\x7a\x00\x7e\x92\x0b\x5a\x96\xf9\x8c\xe6\xe7\xe3\xdd\x23\xf0\x4b\xfd\xac\xe6\x94\x2f\xcd\x69\x18\xbf\xa2\x53\x52\xe9\x1f\x8c\x97\x8c\x9b\x40\x37\x0b\x22\x15\xfd\x54\x10\x45\x3e\xb1\xb9\xf1\xa5\xde\x3d\xc2\xf0\xd7\x27\x88\x4e\xf6\x69\x06\x5e\xad\xe3\xa6\xb2\x4a\x83\x77\xa2\xc8\x18\xed\xd3\xd1\x69\x29\x4e\x87\xd9\x48\x5d\x2d\xe8\x3e\xfa\xfe\x94\x48\xfa\xdd\x23\x6c\x0a\xcc\x9f\x66\xfb\x4c\xaf\x9f\x48\x71\xa1\xc8\xa9\x1f\xe5\x53\x6e\x0d\xe5\x76\x8f\xf0\x9c\x16\x8c\x7c\x2a\xf5\xd2\xe8\xfc\x94\x16\x66\x2e\x6a\x46\xf5\xed\x95\xac\xbc\xd0\xbb\x26\xcf\x19\x1f\x23\xf1\x99\x15\x14\x61\xca\x15\x53\x57\x9f\x28\xcf\x45\xc1\xf8\x74\x8c\x2a\x72\x89\x30\x80\x0c\x5a\x7c\x32\x30\xf4\x13\x85\xc3\x92\x63\x74\x8a\x19\x3e\x3d\x94\xaa\x12\x7c\x8a\xd9\x21\x9d\x23\x7c\x26\xb8\x92\xec\x17\xfa\xe9\x4c\x54\x73\xa2\x2b\xfd\x65\xf1\x79\x70\x7c\xa4\xff\x79\xa0\xff\x79\xa4\xff\xf9\x4e\xff\xa3\x0b\x1e\xe8\x82\x07\xba\xe0\x81\x2e\x78\xa0\x0b\x1e\xe8\x82\x87\xba\xe0\xa1\x2e\x78\xa8\x0b\x1e\xea\x82\x87\xba\xe0\x91\x2e\x78\xa4\x0b\x1e\xe9\x82\x47\xba\xe0\x91\x2e\xf8\x56\x17\x7c\xab\x0b\xbe\xd5\x05\xdf\xea\x82\x6f\x75\xc1\x77\xba\xe0\xcf\xfa\x9f\xbf\xe8\x7f\xfe\xdb\xcc\xe5\xe8\x68\xf1\x59\xcf\x16\x26\x79\x7d\x2a\xca\x62\x7c\x6d\x4f\x11\x9d\xa2\x15\x66\x8a\x94\x2c\xaf\xbf\x31\xb4\x5a\xe1\x45\xb9\x9c\x32\x2e\xc7\x1f\x10\x29\x2e\x4a\x26\xd5\x80\x2c\x95\x28\x19\x3f\x37\x7f\x54\x26\x34\xdd\x40\x17\xc8\x81\xf9\x6a\x8e\x64\x90\xcf\x48\x35\x27\x8b\x81\x89\x20\x3a\x98\x55\x83\x05\x99\x52\x63\x49\x82\x30\x92\x94\x54\xf9\xac\xa2\x8b\x92\xe4\x74\x70\x29\xaa\xc2\x08\x27\x07\x17\x4c\x2e\x49\x09\x7a\x0b\xfb\x43\xf7\xa3\x11\x0d\x33\x8f\xa6\x20\x8a\x2a\x36\xa7\x03\x73\xcc\x03\x2e\xb8\xe9\x92\xf1\xe9\x40\x33\x6b\x03\x13\xab\x74\x50\xb0\x0a\xf4\x27\xa4\x34\x96\x1d\x48\xd1\xf9\xa2\x24\x8a\x0e\xcc\x4d\x1d\xe8\x2b\xbd\x20\x4a\xd1\x8a\xc3\x6c\x95\x10\xa5\x44\x1f\xb1\xb9\xe7\xd7\x2b\xf3\xbf\xbd\xe5\xba\x48\xff\xf9\x01\xd9\x8d\x33\xef\x69\xe0\xce\xdc\xfe\xbc\x19\xe8\xdd\x1c\xc0\x06\x0e\x96\xfa\x71\xea\x2d\x1c\x48\x55\xb1\x73\xaa\x66\x95\x58\x4e\x67\x03\xf3\xc4\x65\x5e\xb1\x85\x1a\xd8\x50\x45\x0b\x35\x30\xcb\xfd\xf7\x52\x28\x3a\xb8\x19\x9c\x89\x8a\xe6\xa2\x14\xd5\xe0\x94\xe4\xe7\xf0\x97\xd9\x55\x1b\x97\x18\x23\x1b\xf3\x62\x00\xd1\x40\x06\xa7\xcb\xd2\x1c\x0a\x5f\xce\xcd\xff\x37\x03\x52\xb2\x29\x2f\xe9\x99\x82\xbf\x72\xca\x15\xad\xe0\xef\x8a\x4d\x67\xf6\xf3\xcf\x4b\xa9\xd8\xd9\xd5\xe0\xc6\xee\x19\xbc\x53\x38\x3b\xf8\xd7\x6c\x31\xfa\xb8\xda\x41\x4b\xc7\x01\xa1\xc9\x44\xbf\x4e\x71\x36\x50\x8c\x5f\xcd\x73\xfa\x38\x0e\x45\x64\x16\x34\x44\x87\xb6\xd4\xfd\x3f\x9a\x33\x3e\xfa\x59\x3a\x90\x14\xe0\xaa\x4b\xc6\x0b\x71\x39\x72\xf5\x0a\x31\x1f\x3d\xd7\xc4\xa2\xfe\xeb\xa5\x89\x1c\x38\xd1\xcf\xd7\x16\x6b\x38\xf0\xfe\xed\xcb\x09\x3a\x3c\x44\xfb\xb6\x69\x69\x9d\x02\x47\x33\x21\xd5\xbe\x1f\x1a\xf9\x46\x00\x10\x27\x48\x4f\xa2\xfe\x6a\x80\x3c\xcd\x56\xd9\xb8\xf5\x65\xfb\x28\x54\xb6\x87\xe7\x05\x53\xa2\x02\xc4\x59\x8d\xe8\x67\x9a\x3f\x15\xf3\x39\xe1\xc5\x10\xcd\x73\x0a\x11\x19\xa1\x8e\xe6\x91\x30\x0a\xe0\x71\x76\xc7\xf0\x5e\x1d\xf1\xdc\x1c\x97\xc7\x43\x59\xc3\x4e\x64\xb1\x01\x06\x94\x27\x0e\x13\x8f\xde\x54\xec\x82\x28\x8a\x4b\x40\x87\xf6\xe7\xe0\x60\x70\xc1\xe8\xa5\xb9\x29\x82\x97\x57\x83\xd3\xab\xc1\x9c\xa2\x55\x86\x37\x74\x66\xdc\xc9\x68\x51\x77\x67\x3f\x0c\x0e\x06\x20\xd1\x1f\x30\x39\xa8\xf4\x5e\x33\xf3\x59\x89\x81\x63\x24\x07\x5e\xa1\xb1\x7e\x8c\xe5\x69\xc9\x72\x3f\x80\xf9\x35\x38\x18\xe4\x84\x0f\x4e\xe9\x40\x52\xca\xf5\x64\xe9\x05\xad\xae\x04\x37\x53\x0e\xb8\xe5\x06\x75\xd2\x10\xa3\xf8\x62\x84\x79\x2c\xea\x0a\xb6\xd7\x94\x67\x91\x90\x34\x08\x4b\xe1\xaa\x86\x91\x2a\x42\xba\x3f\xfc\xfe\xb8\xee\xa1\x8c\x1a\x97\xb6\xdd\xb8\x55\x01\x3d\x63\x85\xa1\xf4\x06\x33\x5a\x2e\x06\x57\x62\xf9\x18\xb5\x56\xd0\xcc\x09\x04\x2c\x4c\x3b\x21\x90\xa7\x89\xda\x95\xe1\x92\xb6\x2a\x1b\x9a\xa9\x5d\xdb\x9c\x05\x08\x50\x9a\xa6\xac\x96\x7d\xca\xbd\x3f\x20\x98\x1f\x8b\x6c\x6f\x6f\x28\x26\x74\xa4\x69\x25\x13\x3a\xf6\xc9\x62\x21\x5b\xe3\xe9\x52\x84\x45\xdb\x60\xd4\x1d\x44\x43\xfc\x56\x9f\x9f\x35\xee\xb3\x55\x3d\xb9\x98\xa8\xef\xcb\x82\x46\x7a\xdc\x44\x55\x98\x8e\xaf\x65\x76\x23\xd5\x23\xec\x12\x0d\xa5\xb8\x71\xd0\xa5\xd8\xd8\xa3\x33\xf2\x12\xbc\xe6\x1d\xda\x5a\x5d\xa3\x8e\x79\x17\xcc\xef\x7f\x08\x11\xc2\xfb\xe6\x3a\x72\x97\xed\x71\xc0\xc2\x42\x8d\xb1\xd3\x83\xb4\xd8\xf5\x28\x0d\xd3\x0e\x3b\x1b\x1e\x99\x00\x1e\x60\xce\xe5\x16\x60\xfb\x07\x53\xd6\xda\xae\x39\x09\x2e\xeb\xae\x2d\x44\xd4\x5f\x9e\x42\x58\x94\xa1\x9f\xaa\xb9\x38\xcd\xe5\x9a\x63\xc8\x6a\xc5\xa6\xb9\xc1\xb5\x4e\xd3\xdd\xc6\x66\x33\x38\x96\xac\x83\xf1\x37\xb2\xdf\xb6\x61\x47\x43\x55\xa3\x4f\x13\x34\x34\x77\xe3\xad\x23\x5e\x6e\xbb\xe0\x4f\xfd\x0d\x2f\x9a\x2c\x39\x44\x5b\xd5\xa0\x97\x4f\x13\xfc\x38\x96\x98\xdd\x17\x4f\x4e\xb6\xe1\xc9\x65\xcd\x9d\xf7\x34\xb9\xe8\xcb\xa6\x2f\xd7\x86\xa3\x5f\x42\x2c\xfa\xf5\x12\x81\xbb\x18\x6c\x98\x69\x06\xf2\x53\x60\x56\x0d\x9a\x83\x3f\x81\x2e\x7e\x47\x3f\x2b\x60\x44\x2f\x98\xa2\xcf\xe7\x84\x95\xf5\xcf\x57\x54\x4a\x32\xa5\x2e\xd9\xd5\x89\xeb\xf2\xf9\xe7\x45\x49\x18\xf7\x11\x99\x5c\x30\xcb\xb8\xe8\xeb\x10\x28\x30\xf9\x5a\x00\x20\x36\x0d\xb7\x9c\x48\x87\x9b\x4f\x38\x91\xdb\x58\xdd\x59\xb9\xbb\x3b\x00\xb0\xd7\x8a\x9d\x8e\xa2\x13\xf0\x1e\x30\xd6\x36\x4f\xb6\x6b\x78\xc8\x62\x65\x9f\x2f\x74\xa9\xa1\x56\x6d\x0d\x9f\x86\xce\x59\xca\x58\xcb\x17\x80\xfc\xa1\xf0\xa2\x2b\xc4\x4e\xfd\xd5\x3d\x95\xda\x40\xc6\x02\x2f\x1e\x19\xc3\x98\x6a\x40\xe8\xd4\xa6\x27\xdc\x67\x5d\x49\xab\x72\xd4\xe8\x5f\x33\x61\xb0\xca\xdf\x75\x73\xcc\x43\x71\x7d\xac\xca\x11\xd6\xf7\x06\x92\xa1\x20\x57\xec\x7e\x1b\x30\xdd\x48\xd4\x62\xf1\xc2\xee\xf1\xce\x76\xfa\x29\x6b\x2e\x18\xc8\x62\xf5\x3a\xd8\xd9\xb0\x5e\xd8\x90\x63\xa9\x61\x37\x0f\x74\x51\x26\xde\x50\xb4\x9e\xc7\x34\x65\x84\x6e\x95\x40\x3e\x2e\x95\xfd\xbd\xb7\x67\xf0\x8a\x05\x85\x8c\x4a\xa3\x9b\x1a\x0f\x79\xa3\xd5\x44\x69\x56\xc6\x10\x9d\xef\x25\xad\x5e\x14\x7b\x7b\x2e\xdd\x12\x20\x44\x34\x40\xfb\xf1\xe6\x61\x61\x42\xa7\xd2\x58\xf1\x65\x6c\xf7\x44\xb6\x56\xd7\x56\x2f\x48\x8f\x85\x9b\x43\x9b\xb1\xe2\x8f\x1a\x81\x6b\x8c\x15\xeb\xd8\x1a\x94\x4b\xa4\xc3\xa2\xeb\x74\x58\x9b\x4d\x6f\x58\x1d\xdd\x93\x9c\xd3\x17\xc5\xf0\xf8\xbb\xac\x65\x8d\x63\x8f\xd4\x99\xe3\xb4\x0d\x2e\x82\x33\x4f\x9b\xe0\x98\x26\xd6\xfe\x06\x07\x80\xc7\xff\x04\x90\x63\xf2\x52\x78\xbf\xc0\xf0\xa7\x09\xd4\x17\xfc\x06\x55\x46\xf8\xe5\x95\xb8\x88\x7e\x3f\x15\x8b\xab\xf0\xf7\x3b\x2b\x6d\x88\x06\x81\x90\xd4\xe1\xa7\x5a\x66\x19\x7c\xfc\x27\xad\x4c\x5c\x93\x1e\xc6\x43\x40\x2c\x6d\x6d\x39\xb4\x16\x1c\x59\x10\x8b\xfe\x41\xaf\x06\x6a\x46\x2b\x8a\x07\x2f\x06\x64\x3e\x90\x33\xa2\xa9\x04\xfd\x6d\x10\x26\xb1\xb0\xc7\x01\x57\x61\x1f\x0d\xcc\x9c\x06\x43\xc6\xa3\x5a\x2e\x1d\x84\x62\xaa\x34\xf5\xb2\xc1\x25\x53\x33\xcd\xae\x0c\xa4\x18\x5c\x52\xe0\xd6\x84\x9a\x0d\x72\x51\x96\xe4\x54\x54\x9a\xe7\x14\x7c\x50\xbb\x79\xa2\x15\x9e\x13\x95\xcf\xf4\xdd\x95\x29\x93\x90\xd6\x85\x6d\xb2\xbd\x75\x55\x4b\x06\xa0\x6c\x14\x75\xb9\x4e\x57\x2c\x3a\x75\xc5\x2c\xa1\x28\xd6\xec\x4c\xc3\x2f\x22\xe2\x3b\xcf\xac\xc7\xd3\x7b\x30\xb7\xe3\xb1\x11\xb6\x32\xda\x60\x8f\xd9\xdb\x0a\xde\x26\xd2\x47\x61\x6e\x90\x64\x05\xcf\xba\x25\x0a\x9b\x69\xa1\x46\xf5\xc5\x32\x6e\xe3\x33\x71\x39\x6c\xa9\x9f\x1a\x95\x66\xac\xa0\x1a\x7f\xc1\xd4\x43\xe2\x23\xe1\x3d\xd5\x26\x4d\x5a\x0b\x48\xd5\x09\xd7\x90\x28\x6f\x2d\xc3\x7b\xff\x6f\x58\x49\xab\x9e\x5b\x0c\x58\x77\xbc\x00\x94\xde\x15\xf9\x05\xf6\x01\xf0\xfe\x81\xbe\x58\x29\x13\xa7\xa8\x12\xd5\x04\x5d\x6d\xe4\xf4\xa4\x28\x36\x74\x4e\x8a\xa2\xb3\x67\xf3\x1d\xa8\x16\x74\x37\xfe\xb2\x1b\x28\xb4\x45\x4a\xcd\x67\xd6\x04\x08\x46\x81\x7b\xed\x48\x55\x8a\x43\x9a\x57\xc5\x80\x2d\x14\x5d\x31\x67\x19\xaa\x30\x9d\xfc\xd0\x44\xc3\x13\xd9\x46\xa8\x34\x98\x94\x06\xfa\xc8\x04\x16\x8a\x3c\xa1\x8c\xdb\x77\xeb\xab\x0b\x7f\xde\xf8\x5c\x7b\x67\x37\x0a\xc0\x1d\xbb\xf5\x59\x83\xfe\xc4\x67\x87\x01\x52\xd3\x71\xb9\x09\x5a\x25\xb5\xe0\xa1\x5d\x66\xd1\x82\x91\x33\x91\xc9\xd1\x4e\xd2\x6b\xce\xee\xd4\xee\x1f\x3b\x65\x76\x6a\x6f\x6f\x48\xf6\x27\xc7\x1a\xf2\xc6\xd0\x99\x65\x8f\xc9\x0f\xc7\x8f\xf9\x68\x4e\xaa\xf3\x27\xf2\xad\x97\x3e\x0e\xb3\xb1\xfb\x68\xe5\x9e\xe1\x17\x23\x59\x1c\xae\x11\x17\x74\xd8\x20\xe1\xb6\xf1\x67\x5a\x8a\x10\xb9\x00\xbe\x6d\x06\x89\x3c\x31\x8f\x7c\x18\xa6\x24\x28\xe8\xa9\x58\xf2\x1c\xcc\x13\xd6\x45\x1b\x0b\xd8\x1a\x2f\xb3\x39\x32\x01\xc5\x80\x85\x01\xc9\x4f\x84\x0c\xc7\x9d\xd8\x2a\xf4\x5a\x5c\xe1\x07\xdf\x82\x73\xa4\x35\x0f\xee\x85\x95\xd3\xaf\x7f\x7b\x14\x1b\x67\xeb\x4c\x53\xc6\x3c\xa6\x8c\x43\xa3\x23\xfb\xf7\xd9\xb2\x2c\x2d\x2d\xdb\x12\x38\x26\x0d\xe8\x6a\xcf\x79\x00\xbb\x70\x3c\x86\x54\x35\x10\xbe\xc3\xec\x05\x82\xe2\x35\xb9\xc9\xe7\x80\x0d\xec\xa9\x8c\xac\x4e\x6c\x78\x38\x38\x9c\x1a\x0e\x54\xac\xe1\x3f\x63\xe9\x9b\xf0\xfc\xe8\xf0\x4e\x0c\xa9\xe8\x81\x12\x32\xac\xaf\x8f\x97\xf7\x5d\x83\xdd\x85\x87\xf8\x02\xbf\xa5\x39\x5b\x30\xa3\x32\xfd\xf0\x71\xb5\xc3\x4d\xf0\xfa\xcf\x3f\x9d\x0d\x11\x46\xd9\x0f\x07\xc7\x7b\x7b\x43\x39\xaa\x2b\x4d\xb8\x0b\x4f\x83\x35\x9e\x0f\xaa\x7f\x6f\xab\x1f\x19\x04\x50\xb7\xa8\x17\x9b\xee\xe7\x7b\xdd\x4f\x67\xa3\x30\x77\x66\x54\xc1\xa5\xb7\x6c\xee\x20\x1c\x53\x23\x9e\x65\xf8\xfe\x67\xa4\xa2\x69\xde\x14\xcb\x4d\xef\x1f\xae\x8d\x1c\x48\x70\x79\x6d\x5a\xfa\xa4\xa8\x87\x4d\x76\x4c\x91\xd1\x6c\x17\x8d\x12\x0b\x1f\x20\xb6\x68\xaf\xc1\x37\xd8\x19\x61\xc1\x7f\x5c\x96\xe7\xf5\xe3\x01\x37\x85\x50\x6e\x6d\x50\x90\x7e\x51\xe1\x47\x2b\x22\x6a\x7e\x06\xa1\x4e\xf0\x35\x8a\x1a\xd3\xfe\x0c\x21\x19\xdb\xdf\x2d\xca\x4a\x94\x18\x9c\x95\xf8\x6e\x90\x56\xe2\xbb\xc7\x5a\xa9\x49\x59\xb4\x95\x28\x0a\x54\x0b\xed\x42\x87\xb8\xda\x6e\xc5\xa4\xa7\x30\xd9\x9c\x94\x4d\xb2\xd5\xc3\xa9\xf8\xcb\x85\xfd\x54\x64\x0a\xe6\x44\x05\xbb\x40\x38\x0a\x8f\x35\x27\x52\x69\x8a\xd6\xae\xe2\xe3\x06\x69\xec\xd6\x01\x44\x61\xaf\xd6\x57\xbf\x83\x55\xe4\x8c\xc8\x3a\x39\x77\xd3\x3c\x6a\x1a\x25\x5a\x76\x81\x8b\xf0\x51\xed\x76\xf4\x92\xf1\x73\xd8\x19\xf7\x14\x00\xc4\x58\x35\xc1\x17\x34\x01\xb3\x3a\x59\x08\xd5\xb1\x95\x95\xd4\x72\x61\x13\x76\xbe\x37\x81\x49\xfa\x4b\x63\xa1\xa1\xfd\xa3\x1d\x40\x35\xc8\x58\x8d\x53\xae\x21\xd6\x9b\xcf\x85\x9b\x48\xb1\xf4\x9e\xdb\xb8\x6e\x3a\xe7\xe1\xb4\xa7\x9d\xc9\xbe\xd4\x4a\xb4\x74\x34\x16\xe0\x5c\xb7\x53\x3f\xe9\xa7\xfa\x37\xc2\x32\xc3\x52\xe3\x18\xf0\x80\x4a\x05\xb3\x68\x19\x8e\xbb\xac\xee\x6d\x8b\x72\x77\x3b\x34\x5d\xe4\xd0\xd7\x63\x77\x53\xc6\xc8\x90\xef\x3d\x4d\xc6\x8c\xc5\x6c\x7b\xcf\x5c\xcc\xa7\xc7\x11\x9d\xe3\x98\x6d\x1f\x62\xaa\x76\xe7\xe8\xee\xc2\x13\x90\x1d\x7d\x80\x32\xb3\x9d\xd2\xc1\xee\x4b\x9c\x09\x31\x6a\xbc\x3e\x3c\xb9\x5c\x93\x0a\x3d\x95\xf2\xdc\xa5\xed\x46\x61\x7e\xf3\x46\xe0\x21\xbf\xde\x31\x99\x7c\x1a\xcd\xc9\x62\xe8\x9d\x32\x65\xe4\x94\xa9\x56\x59\x1d\x71\xeb\x05\x48\xc7\xc3\x6b\x17\x64\xe9\x26\x11\x71\xbb\xb7\xc7\xd6\x88\x8b\x9a\x31\xbe\x54\x1c\x43\x88\xbb\x35\xfe\x42\x8b\x7a\x8a\xf2\x76\x33\xb9\xb9\xd9\x66\x26\x08\x45\x53\x81\x43\x1d\xc7\x43\xdd\xa1\x3f\x67\xb7\x85\xc6\x61\x27\xa1\x0e\xc0\xd5\x90\xb1\x75\xc2\x86\x7e\x8b\x8a\x9c\x29\x34\x66\xa9\xfb\xf3\xcc\x94\x6d\xd1\x59\xc9\x2e\x68\x47\x5f\x90\x7c\xa4\x7f\x57\xa4\x28\xe2\x9e\x2a\x9a\x3b\xc6\xbc\x7f\x2f\x10\x01\x2a\xd5\x11\x80\xe0\x4d\x7d\xad\x44\x43\xba\xd0\x70\x49\x09\xae\xcb\x64\x32\x51\xf1\x89\xc6\x98\x22\x0d\xc9\x0c\x88\x13\x31\xbf\x1b\x04\x81\x62\xdb\x06\x2c\x8e\x08\x20\x6b\xb0\x77\xc7\x20\x05\xdb\x9b\xaf\x63\x79\x5f\x24\x14\xbb\xa5\xb2\xdc\xd2\x0a\xf7\x44\xda\x64\xd8\xbd\xad\xf5\x5d\xfa\x37\xba\x55\xc2\x77\x4f\xb8\x75\xd6\x0d\x88\xb6\x0d\xe9\xdf\x37\xa8\xe4\x17\x8c\x73\x5a\xac\xd5\xc9\x3b\xe3\xf6\x5c\x2c\xae\x6a\xed\xcd\x91\xf9\x5d\x73\x31\xee\x8b\x43\x47\x5e\xa5\xf4\xe5\xe9\xb3\x84\x37\xce\x8c\x48\xb7\x94\xf6\xc4\x6a\xb0\xb9\x76\x5a\xbe\x5a\x90\xd5\x75\xb5\x9e\xca\x8d\x1f\xf9\xba\xce\xdb\xa4\xb0\xef\xbd\x19\x16\x35\x08\xe9\xbf\x2e\x9c\x65\x02\x02\xc7\x5d\x1b\x07\x85\x67\x22\xf7\xb1\x32\x82\xdf\xe0\xd1\xb0\x7b\xec\xaf\x7d\x50\xaf\xf1\xc9\x57\x75\xc0\xce\xdf\x19\x84\x70\x61\x93\x86\x5b\x4f\x84\x5e\x64\x32\x9b\x6b\x40\x15\x84\xb6\xd2\x94\x48\x50\x72\x62\xec\xee\xfd\xc7\xbc\x14\x9c\x16\xe6\xb4\x8d\x6a\x15\xa1\x15\x14\x2c\x18\x3f\x81\x6c\xb4\x4c\xbe\x81\x6b\xbf\x7b\xac\x1f\x80\x8f\xff\x61\x57\x74\xc7\x74\xb2\xf7\x13\x9b\xb3\xf8\x9b\x81\x46\xde\xf6\x32\x72\x50\x85\x57\x8b\xb2\x91\xd5\x5d\xc0\x72\x42\xa7\xc1\x30\xc8\x84\xef\xd7\xed\xc0\xc8\x2c\x3a\x94\xd9\x85\x85\x6e\x77\x10\xc4\x92\x4b\x57\xb2\xbb\x85\x1a\xce\xaa\x29\x3f\x54\x06\xd9\xa9\xda\x48\x13\x30\xd0\x49\xe8\xd7\xba\xba\x55\x2e\x32\x83\xa7\x5e\xf0\xc5\x52\xfd\xcd\x08\x59\x6a\x6f\x8e\xd0\x67\x3d\xe9\x15\xb6\xbe\x03\x2b\xd9\xf1\x1d\xa4\x55\x55\x5b\x5a\x44\xfb\x40\xa0\xc1\x8b\xb4\xcf\xc2\x90\x98\xc9\xef\xa3\x02\x06\x88\xa2\x32\xf8\x62\xac\x9f\x53\xe6\x18\xc2\x17\x73\x1b\x8a\xef\xd7\x1b\x29\xb8\xf4\x6d\x05\x18\x08\xf6\x42\xfe\xc3\xe9\xb8\x29\x2f\x16\x82\xd9\x34\x49\xc8\x67\xce\xe2\x18\x1d\xc2\x5b\x76\xd4\x0a\xca\x5c\x99\xd2\x8c\x09\xa7\x97\x83\x67\x76\x0a\x43\xf4\x0d\xd4\x3d\xf0\xba\xc9\xd3\xa5\x52\x82\x23\x7c\x3d\xa3\xa4\xa0\x95\x1c\x5f\x3f\x59\xaa\x99\xa6\xf9\x6d\xba\xc1\x1f\x29\xa9\x68\x35\x40\xfb\xde\x5f\x18\x12\x76\xbb\xff\x6d\x86\xb9\x38\x81\xf7\x48\x89\x73\xca\xf5\x01\x2f\xab\x72\x2c\xf0\x9c\xaa\x99\x28\xc6\x68\x21\xa4\x42\x78\x41\x2a\x32\x07\x80\x41\x7c\x06\x78\x84\x49\x9e\xd3\x05\x50\x78\x54\x8e\x8d\xfe\x14\xeb\x7f\x3e\xe3\xd1\xbc\xc0\x46\x5b\x52\x88\x4b\x8e\x47\x33\x35\x37\xff\x94\x08\x9b\xc4\x72\x2e\x35\xc1\x9c\x7c\x36\x6d\xd9\x2f\x74\x7c\x7c\x64\x86\x29\x4b\x5a\xbe\x37\x1e\x08\x72\xfc\x10\x83\x2f\xc2\xab\x65\xa9\xd8\x02\xcc\x23\x48\x51\x80\xfd\xbc\xe6\x81\x8d\xbf\x12\x59\x2a\xf1\xa6\x12\x39\x95\xf2\xff\x96\xd4\xd0\x53\x06\xd8\x86\x49\x0f\xcc\xe9\x08\x3e\x44\x72\x69\x5d\xa1\xe3\x9c\xff\x4d\xe6\xf4\x85\x05\xc3\x08\x2b\x63\xd2\x80\x6b\xda\x56\xf7\x42\x35\xd8\x47\x51\xc4\xf1\x5c\x70\x29\x4a\x3a\x2a\xc5\x74\x88\x9e\x0a\x7e\x01\x42\xbc\xc1\x19\x61\x25\x2d\x06\x67\xba\x3e\x98\x5a\x63\x1a\xf5\x65\x42\x7b\x9c\x31\x4d\x0f\xf6\x99\x13\xe3\x53\x37\x29\x63\x6c\x9a\xed\x40\x37\x1a\x31\x82\x50\x33\x9c\x95\xb4\xd2\x61\xbd\xcb\x4d\x8e\xab\xbe\xe6\x8d\xb8\xbb\x10\x1d\x31\x8c\xba\xe4\x41\xf0\x52\x17\x19\xd7\xd5\xa8\x30\x04\xb4\xed\xd0\x15\x5d\x10\x37\x0e\xcd\xd9\x84\xd7\x5e\xc0\xee\xb3\x7a\x2f\x20\x7d\x96\xa9\xea\x92\xb7\xae\x7c\xb8\x47\x27\x18\xba\x5e\x30\x3e\x4e\xcc\xce\x01\xf1\x9a\xe2\x04\x54\xb8\x3e\x94\x4b\x9b\x3e\x73\x5b\xe1\x36\x82\x26\x23\x4d\xa5\x96\x7b\xb4\x6e\xb9\x21\x3a\xeb\xb5\xee\x20\x7e\xeb\x73\x4b\xbc\x74\x5a\x0f\x18\xea\x46\x83\x90\x64\xd4\x15\x5f\x08\x58\xc2\xea\xf0\x5c\xa7\x3d\x5d\xb7\x43\x02\x0a\x02\x90\xd4\x36\xfd\xdc\x19\x1a\x04\x41\x50\x5b\x04\x17\x6c\x50\x2a\x24\x50\x73\x82\x4e\xbb\xb0\xb3\xbe\xb7\xe8\x76\x45\xd3\xab\xef\x56\xa4\x1c\x69\xee\x52\x88\xde\x1b\x1c\x90\xa6\x46\x80\x1e\x23\x17\x35\xd1\x97\x74\x0e\xc7\xe8\x08\xf9\x48\x06\x34\x4e\xff\x97\x76\xf5\xae\x63\xfc\x27\xfb\x6b\x7e\x74\x81\x0f\xdb\xfa\x4c\x28\x09\xe2\x93\xbc\xab\xa9\xd7\xe8\xae\x34\x05\x28\xeb\xb9\x7e\x43\xba\xb4\xa3\xe7\xb8\xf6\x5d\xf7\x2c\x2a\xaf\xaf\x1a\x90\x44\x7e\x0b\xe9\x1d\xa6\xd4\xfe\x7c\x94\x12\x48\xd4\x3a\x1b\x9b\x56\xca\xdc\xf7\x60\x6f\x7a\x5e\xf9\x06\x2f\xd0\xe7\xd6\xa7\xd8\x87\xee\x8b\x9f\xd8\x31\x7f\xf7\x5b\xee\x34\xcd\xc5\xc5\x4e\x35\x4d\x9b\xa8\x6f\x2e\x59\x31\xa5\xca\xa4\xd1\x38\x58\x98\x80\x35\x9d\xda\xbc\xf1\x70\xe3\x02\xa2\xb7\xd6\xdc\x97\x8e\xe7\x96\xb8\x2f\xf7\xf4\xe2\xc4\x97\x7e\x6f\xb5\xc9\xd8\xdc\x86\x6f\xee\x04\xcd\x35\x79\xd7\x0e\x37\x15\x28\x40\x1c\x99\x1b\x3e\x3b\x33\x42\xba\x8f\x80\xf4\xe9\xa7\x06\x70\xf1\x67\x5a\xc4\x46\xca\x94\x23\x64\x45\x1b\xc4\x6f\x8b\x7f\x35\xe1\xa4\x03\xb1\xaf\xa5\x8d\x74\xd7\x83\x3a\x9b\x2c\x46\xa3\xd1\x08\xf4\xfd\x46\xef\x1e\xc9\x0a\xa3\xe1\x62\x3e\xae\x3d\x1c\xe6\x89\x75\xd0\xa4\x45\xca\x96\xcb\x60\x67\xb1\x95\x09\xb2\x5a\xfb\xb3\x65\x59\x5e\x0d\x72\x58\x16\x2d\x06\x61\x8e\x5c\xbd\x1e\xb1\xb8\xdb\x72\x70\xe4\x50\x95\x08\x3b\xd6\x3a\xfe\x6e\xfb\x21\x4f\x31\xb8\x00\xe6\xad\xfb\x08\x5c\x1f\x70\xab\xe9\x00\x68\x8d\xe0\xe7\xd7\xeb\x08\x28\x6c\x5c\xfa\x3f\x7c\xc4\xa0\x24\x31\x11\x1e\x10\x4a\x44\xc8\x8b\xf9\x66\x08\x17\x39\x4d\xf0\xcd\xc6\xe8\x5e\x77\x0a\xf7\x44\xc5\x2a\x34\x5b\xe4\x55\x62\x74\x54\x8f\x3b\x09\x94\x37\xc3\xb8\xc0\x6a\xa0\xa2\x8e\x13\x8b\x89\x1c\xc4\x02\xb1\x25\xca\x46\x30\xcb\x36\x2d\x68\xaa\xd6\xc2\x50\xcd\x70\x8a\x4b\xae\x79\x1a\xa0\xc8\x3b\x80\xcb\x3e\x02\x6e\x29\x1d\x15\x10\x0e\x00\xbc\xcd\x3a\x6d\x3c\xa2\x13\x6c\x8a\xd1\xd9\x06\x31\x7a\x49\xae\xc4\x52\x1d\x6a\x4e\x91\x30\x1e\xe7\xb9\xfb\x6d\x13\x2d\x6d\x36\x10\xa8\x27\xb9\x5d\x66\x30\xbb\xc6\x69\xc5\x8a\xdf\xc7\x42\xf5\x4c\xef\x6d\xb5\x8d\xfc\x8d\x5f\xdb\x5a\xdd\x14\x6f\xbf\x48\x6b\x37\x72\x90\x2f\xa5\x12\xf3\x03\x62\x13\xb1\x7e\x85\x4b\x8e\x67\x78\xf7\x15\x4f\xc5\x81\x12\x8b\xaf\x72\xa9\x53\xa1\x60\x72\x1f\x43\x79\x03\x24\xb3\xcf\xda\x10\x13\x65\x23\xe9\x13\xd0\x03\x40\xdc\x32\xcf\x42\x62\x7f\xbe\xca\x8d\x69\x18\x3b\x61\xc4\x05\x3f\x30\x01\x53\xc8\x69\x49\x6f\x77\x29\x4a\x31\x15\x07\x33\x4a\x0a\x23\x32\xfa\x52\x8b\xde\xa0\x92\x63\xb9\x4b\xdd\x6c\x32\x9f\x9b\xbf\xf4\xc4\x8d\x27\x54\x4b\x2f\xe1\xb2\x1f\x6e\xc8\x98\xa0\x3b\x40\x99\x23\x50\xf6\x8d\x40\x95\x28\x1a\x06\xcd\x24\xf9\x8c\xfe\xb8\x94\x56\x31\x7d\xbb\x5b\x65\x0f\x8d\x93\x0b\x36\x25\x4d\xf0\xb2\x51\xd3\xfc\x9b\xa7\xeb\xe0\xdb\x98\xdd\x85\x8b\x6a\x5e\x46\xaf\xec\x7a\xa1\xe8\x7c\x8c\xd0\x76\xa6\x74\x9b\xdc\xa6\xd7\x6b\x78\xd7\x7a\x55\xaf\xd7\xef\x52\xae\xa7\xff\x52\x4c\xc5\x52\x8d\x77\x8f\xf0\x8c\xc8\x37\xac\x95\xf2\x4f\x13\x5b\xc0\x34\xa3\x05\x33\x56\xea\x33\xe2\xf5\x4e\x6b\x2a\x4b\x57\x05\x45\x7a\xcb\xf5\x8d\x8a\xa0\x16\xb4\xfb\xd7\x8c\x28\xf9\x1a\x7c\x16\x39\xbd\x94\x36\xee\x81\x51\xe3\xb2\x82\xbe\xf6\xc7\x02\x71\xb7\x7a\xa5\x0d\x0d\x88\xed\xc0\x5f\xd8\xbd\x25\xbd\x4a\xaf\x4f\x8c\x14\x18\x64\xa9\x66\x6f\x2a\x71\xc1\xcc\xc1\x19\x27\x81\x27\xc1\xa7\xd1\x33\x7b\xaf\xdb\x26\x79\x61\x0f\x4f\x05\x3f\x63\x53\x94\xed\xd0\xc9\xff\x9c\xfc\xf4\x7a\xb4\x20\x95\xa4\x31\x47\x14\x9e\x8c\x89\x73\x5a\x30\x59\x7f\xb1\xbe\xa8\xa1\x2e\x03\x65\xa3\x60\xaf\x86\x49\x09\x6c\x50\x01\x12\x5f\xb4\xe4\x37\x6e\x96\x17\xce\x51\x24\x32\x17\xf3\x6a\x9c\x82\x41\xa6\x99\x91\x12\x2f\xc5\x25\xad\x9e\x12\x69\x6e\x22\x28\x84\x58\x08\x5f\xbc\x63\x2b\xf9\x99\x7c\x1e\x5e\x2f\xab\x72\x8c\x66\x4a\x2d\xe4\xf8\xf0\xd0\x41\x81\x91\x7c\x78\x40\x97\x07\x97\x54\xaa\x83\xe3\x11\x99\x93\x5f\x04\x27\x97\x52\x5f\x8f\x43\x7d\xe2\x87\x9e\x7f\x14\x18\x05\xba\x21\x8e\x81\x29\x78\x9c\x9f\x4e\xea\xaf\xcc\xc5\xfc\xff\xfb\xf3\x77\xc8\x70\x5b\xc0\x63\x81\xb2\xc5\x6a\x3b\xc6\xb1\x4a\xc0\x3a\x82\x59\x2d\x1e\x35\xae\x3e\xcd\xaf\x1a\x67\x98\xcf\x2e\x22\xba\xbb\x89\x00\x2e\x6f\xa5\xb9\x8c\xb4\x51\x91\xf6\xc9\x64\xf7\x8a\x85\xde\x36\x2a\xd6\x29\x0d\xc5\xde\xa6\x1f\x8c\x8c\x44\xc4\xbe\x99\x5a\x44\xa2\x3f\x0c\x5b\xc2\xf3\xa0\x1f\x60\xa3\xde\x4b\x63\x38\x67\x3a\x5a\x80\xda\xe8\xb5\xb1\xe5\x81\xe8\x51\xb7\xd0\x71\xc6\x03\x2e\xf9\xf6\x43\xae\xeb\x62\xed\xea\xd9\x2f\xec\x9d\x20\x52\xd5\x7a\x4c\xab\x16\x85\xcd\x08\x48\xaa\xc6\x79\x27\x0a\xec\x91\x27\x54\x1d\x36\xcf\x03\xf4\x99\xe2\x70\x7b\x77\x3e\x8c\x14\x20\x4d\xf3\xd6\x1a\x86\x62\x1a\xc4\x13\xb6\x7a\x7f\x23\x27\x8d\x14\x58\x21\xf4\x6c\xb4\xf0\x19\xd3\x4c\x23\x70\x4c\x6f\xef\x3c\x18\x90\x36\x3d\x24\x83\xb5\x44\xa9\x64\xe3\xc5\x64\x56\xd8\x5b\x1b\x00\xab\x2c\xfb\x9e\x96\x92\x0e\xac\xd1\xa8\xb2\x46\xa3\x8c\x9f\x09\x34\xf6\x47\xa5\x7f\x0e\xaf\x8d\x07\xb4\x06\xeb\x73\xe7\x1b\xb9\x8a\x0d\x28\xad\xa2\xb2\x6e\x67\xbf\x6c\x6e\x7a\x49\x2a\x1e\xb4\xd3\x3f\x19\x9f\x6e\x6e\x07\x5a\xcd\xba\xa1\xf9\x9d\x6e\xb6\x0a\x14\x86\x3f\x2f\xe7\x8b\x77\xc2\x66\x5c\x03\x19\x5b\xe8\x62\x08\x26\xa7\x93\x86\x73\x9e\xc9\xab\xd4\x14\x97\xb7\xbd\xd5\x9c\xcb\x3a\xa5\xe7\xd6\x8b\xcb\x11\x12\x58\x85\x7e\xdc\x6b\x83\xe6\x22\xac\x9a\x12\x5a\x7d\x4c\xf7\x3e\x5a\x20\x47\x8e\xc7\xc3\x1c\x07\x46\x6c\x46\x08\x67\xd0\x56\xf0\x82\x02\x08\x1b\x18\x2a\x39\xa8\xd8\xc0\x7d\x92\x52\xdd\x81\xf5\x13\x89\x6c\x17\x22\xac\x17\x67\x81\xec\x98\x35\xd8\x88\xba\xe4\x9a\x3f\xb2\xb2\xd4\x97\x25\x9c\x9b\x03\xd9\x4c\x26\x72\x90\x75\xf4\x0a\x4c\xad\x46\x77\xa7\xd0\x23\x28\x7b\x80\x18\x58\x56\xb4\xb8\xc7\x11\xe4\x5c\x2d\x5a\x9c\xa1\x58\x65\x3b\xfd\x69\xf8\xa4\xa9\x68\x1f\xba\xfd\xeb\x72\x96\x59\x47\xb5\x6f\x65\x47\x6b\x77\x67\x41\xa6\x2e\x4c\xec\x17\x67\x9a\x17\xe9\x25\xd7\x53\xbc\x15\x93\x6c\x9a\x7f\x71\x26\xd9\x2f\x72\x76\xbc\x66\x95\x6e\x9a\xdb\x2d\x54\xf0\x53\x41\xaa\xe2\xd0\xf8\x25\x1e\x38\x78\x96\x60\x54\x7f\xe3\x8b\x7d\xbd\x15\xd7\x28\x69\xc5\x48\x59\x33\x9b\xd6\x76\xa3\x5c\x4e\xf5\xff\x16\xb5\x33\x3e\xf5\x72\x03\x5e\xd0\x2a\x72\x16\x6a\xa5\x09\x92\x4a\x6f\xea\xf1\xc1\x19\xab\xa4\x8a\xb5\xab\x6d\xc7\xcb\x66\x5d\x3c\xf0\xdf\x4a\xe2\x9b\x9f\xd3\xab\xe5\x62\x18\x28\xdf\xfa\x8c\x79\x41\xca\xa1\xa6\x7f\x3b\xaa\x06\xdd\x9b\x9a\xad\xe8\x16\xba\xf0\x40\x5a\x2d\xd6\x88\x28\x55\x0d\x91\xac\x72\x84\xd1\x21\x91\x92\x2a\x79\xc8\xe6\x53\x7f\x0d\x16\xb4\x92\x82\x1f\x4c\x2b\x4a\xf9\x68\xa1\xe1\x72\x2b\x0c\xc6\xad\x3a\xac\x68\x01\xdd\xad\xba\x77\x8f\x83\xdb\xb9\x38\x3b\x1b\x22\x63\x07\xa6\x7f\x70\xf7\x77\xdb\x8c\xb7\xf7\xee\xb5\x03\xfe\xa7\xaa\x76\x3b\xca\xf6\xdf\xfb\x1e\x35\xbb\x87\xb1\xf6\x09\xf5\x6d\x05\x14\x9d\x50\xfd\x8f\x6c\xbf\xfa\x4a\x92\x82\xfe\xb4\x34\xb4\x84\xb8\x8c\x36\xc9\xd2\x18\x41\x77\x9a\xc2\x4e\x0d\x72\xd4\x5a\xa2\x1d\xe0\x81\x1d\xe0\x05\xef\xbc\xf4\x0f\x0e\x16\x44\xca\x4b\x51\x15\x1b\xdf\x47\x5d\xf5\x20\xd7\x88\xbe\x9a\xf7\x7f\x13\xd1\x30\x66\xb3\x2d\x1d\xf4\xd7\xef\x6e\x6e\xb6\x6c\xf2\xc3\xb7\x47\x37\x37\x1d\x47\xd5\x6e\xb4\xcd\x62\x4c\x03\xa3\xe0\xcf\xb2\x71\x9f\xcb\xb0\x09\xa0\x04\x55\xd3\xc6\x17\xc9\xdb\x71\xb7\x17\xba\x6e\xea\xb7\x02\x86\xbf\xe9\xe4\x3b\xe1\xcb\x83\xad\xe1\xcb\x6e\xdf\x2b\xb2\xf5\x0d\xbc\xdd\xa5\xed\x02\x2f\xc9\x27\x98\x32\x18\x4a\x54\x4f\x1f\x4c\xe7\x0d\x88\xda\x6e\x0b\x30\xbb\x9f\x4c\xcb\xfc\x68\x53\x83\xdd\xc9\xa4\xef\xfe\xf5\xda\xb5\xfe\xf7\x73\xdd\xd4\xbe\xf8\x66\xde\x23\x6e\x79\xb0\x16\xb7\xb0\xb3\xe1\x6e\x02\xbf\xf8\xd0\x0d\xfd\xd0\xcb\xc3\x00\xbd\x58\x6a\xf0\x4f\xd7\x03\xe4\x77\x65\x3c\x40\x7f\xda\xef\x7b\xce\xfb\x7f\x42\x78\x80\x80\x10\x84\x96\x7a\x2e\xfa\x17\x94\xd4\xe0\x68\x4d\xb7\x09\xe2\x01\x5a\x7b\x40\xbc\xb6\x71\x93\x20\xd8\xff\x13\x1a\xac\xfe\x84\x45\xef\xcb\xba\x43\x43\x1f\xe7\xda\xb6\xcd\x82\xbb\x21\x1d\x39\xfa\xd6\xdb\xb0\x85\x56\xe1\x20\xc2\xbe\x76\xbd\x8e\x05\x36\x8e\x19\x63\x35\x32\xff\xaf\x76\x68\x53\x56\x10\xca\x59\x87\x28\xf8\x25\xaa\xb1\x63\x17\x50\x9c\x69\xab\x15\x4f\xbf\xa2\x67\x6b\x23\xed\xcb\x43\xb4\x5f\x4f\x7c\x1f\x99\x9f\x9a\x36\x5f\x65\xab\x44\x8c\xff\x66\xc7\xc8\xd8\xb1\xf7\x78\x45\xc1\x43\xd8\x06\x0a\x6e\x7e\xc0\xd6\x92\xbe\x3f\x7f\x0c\x61\x94\xec\x7f\x07\x15\x95\xcb\x52\xc9\x2f\xc7\x3f\x6e\x1f\x9e\x02\xa6\xfc\x66\x56\x11\x09\x11\x84\xcd\x4a\xfe\x4f\x33\x82\x2d\x4f\xbb\x73\x7a\xa5\xb7\x31\xe9\x68\x67\x92\xa5\xd0\xf7\x6f\x5f\xf8\x49\x05\x12\x2b\xdf\xd0\x60\x6d\x88\x19\x3a\xbe\x36\xe1\x39\x77\x8f\x70\x5e\x51\xa2\xc0\x2f\x0d\x64\x50\xe6\x4f\x22\x73\x5d\xa8\x39\x7a\x13\xfa\xf2\x2e\xce\x69\xee\x5c\x32\xac\x26\x1f\x3e\x62\x3e\x41\xaf\x85\x9a\x31\x3e\x1d\x9c\x89\x25\x2f\xd0\x0e\x3b\x1b\xd6\x01\x14\xb2\x6b\x35\xf9\x34\x5a\x72\xf6\xef\x1f\xf5\xd9\x84\xe7\xe7\x16\xdb\x96\x61\xfa\x98\xb5\xc7\x93\x20\x88\x16\xaa\xe8\x19\xad\x28\xcf\x29\x1a\xd7\x7f\x4b\x84\xa5\xa9\xa7\x7c\x3d\x2f\x15\x8c\x42\x4e\x30\xdf\x13\x26\xbe\xf2\x0e\x0f\x9c\x88\x18\x46\x83\x5a\x09\x24\x30\x1a\x30\x1e\x7c\x20\x51\xb1\x0c\xa3\xb9\x86\x07\x1f\x86\x62\x0f\x94\xe7\x51\xce\xb2\x29\x55\x51\xc6\x32\xb8\x28\x36\x00\xac\x35\x32\x36\x6e\x57\x22\xbb\xb9\x69\x06\xc4\xb0\xaa\x80\x3a\x4c\x96\x3a\x11\x95\x32\xe1\x49\x21\xa5\xf5\x6d\x86\xfd\xa9\x32\x22\x81\x7a\x64\xd9\x1a\x59\x76\x8e\xec\xa3\x8a\x88\x4a\xbd\x85\xeb\x31\x54\xd9\x0a\x87\xbf\x13\xa6\xa2\x8d\xd7\x13\x05\xc1\x6f\xed\x04\xd5\xf4\x22\x37\x74\xee\xde\xde\x90\x4e\xea\x70\xb9\x81\x27\xb3\x1a\x19\x71\xf3\x9a\xbd\xf5\x71\x75\x31\x1f\xd9\xb7\xd2\xe8\xce\x7e\xed\xd9\x9b\xaf\xad\x3b\xb4\x2f\xae\xd1\x61\x45\x2f\x98\xec\xdd\xa1\xed\x03\x3a\xd4\x0f\xf6\xb1\xe9\xac\xa2\x17\xb4\x92\xd4\x45\x68\xd8\xd8\x17\x9c\x27\x46\x36\xb3\xc4\xb8\x67\x75\xa2\x6b\x27\xb4\x41\x46\xa9\xd4\xce\x0b\x01\xe6\x99\xd7\x8d\x78\x1e\x80\xf1\x03\x0d\x94\x59\x1b\x44\xb1\x6d\x7a\x0f\x40\x91\xdb\xc5\x86\xcd\xbb\x2d\x75\x5b\x62\x32\x6d\x06\xaa\x15\xd7\xaa\x73\xa8\x54\x67\xf5\x50\xa9\x89\x74\x0d\xe5\xbe\xdf\x72\xa8\xf5\xab\x3a\x8a\x83\x54\xc8\x3c\x31\x8c\xfe\x9a\x9e\x32\x48\x92\x1b\xf3\x35\x1f\xbb\x7a\x49\xcd\xc6\xf6\x72\x64\xad\x99\xe1\xea\xfa\x5c\x1b\xe1\xbb\x6e\x19\xeb\x1a\x4c\xb4\x9d\xad\x4f\x8c\xe9\x2f\x4c\xb0\xb2\x2f\x85\xe6\x61\x12\xdd\x81\x12\x5c\xf4\x57\x8b\xdd\xe3\xec\x78\x86\xd6\x81\x40\x85\x1a\xc1\x3a\xdc\x6c\x14\x7b\x44\xe5\x33\x1b\xd0\xc9\x58\x60\xdd\x2e\x64\x7e\x4d\x27\xd4\x3b\x7f\xe6\x82\x00\x05\xf5\x82\xe1\xc2\xaa\xe1\x67\x57\xff\x8c\xea\xd7\xaa\xa9\x48\xf8\xc3\xd9\x9c\xfb\xd9\xa7\x88\x0d\x5c\x88\x7c\x9c\xec\x17\x02\x5b\x3e\x13\x1a\x72\xd4\x8e\xac\xeb\xea\xfe\x8d\x95\xc6\x71\x9a\x4c\xd7\xd5\x7a\x47\xa6\x28\xc3\xd6\x68\x75\x5d\x45\x67\x44\x91\x61\x59\x8a\xae\x2e\x75\x11\xca\x34\x2d\xef\xd6\x34\xa9\xff\xb4\xa1\x1e\xf1\xd1\x6e\xf8\xd1\x87\x40\xa4\xa3\x42\xe4\x37\x37\x74\xa4\xc8\x54\xff\x67\xe7\xa4\xff\xac\x17\x9c\x3d\x0e\x55\x6f\xf6\x4e\xd9\x1c\xd3\x1d\xfe\x8c\x9e\xc4\x85\x4c\x59\xed\xef\x71\x2c\xd0\x08\xf8\xda\x68\xa5\xa9\xa3\x72\xc1\x2e\xad\xd4\xe4\x61\x90\xf8\x28\xb8\xaf\x06\x10\x84\x5e\x48\x71\xd9\x51\x7c\x59\xb6\x7f\xe1\x66\xb2\x87\x84\x55\x46\x55\x76\xa8\xae\x16\xd4\x64\x15\x17\x5f\xd0\x58\x14\x72\x21\xa2\xae\xa7\x08\x28\x8f\x28\x12\xbd\x20\xaa\xc8\xa8\x22\x97\x3f\x8a\xe2\x0a\x45\xc7\xc0\xe4\x33\xa6\xe7\x97\x08\x90\x11\x37\x8a\x82\x81\x99\xfe\x41\x6f\x4b\x78\x4e\x63\x77\x41\xf7\xd1\xf8\x95\x60\xc1\x9f\xf8\xad\x69\x12\x4f\x8b\x36\xd1\xa4\x07\x35\x9e\x41\xe0\x30\x66\xa2\xc1\x07\x19\xe1\xdd\x74\x70\x73\x2e\xb1\x67\x0b\x0c\x89\xb2\xa1\xc2\xfc\x7e\x4e\xbd\x32\x7a\xa3\x2f\xe9\x07\x70\xab\x45\x9c\x12\xe9\x6e\xec\x01\xa4\x6c\xbc\x63\xd0\xa3\xaf\x2e\x39\xef\xe9\x52\x9a\xcc\x0a\x73\xb1\x94\x54\x55\x64\x61\xd3\xe4\xcc\xc4\xe5\x4b\xc6\xcf\x8d\x7b\x9d\x2e\xef\x91\x94\x56\x5f\x47\x97\x80\xc0\x98\x6a\x52\x99\x6f\xac\x4f\x3f\xe7\xb4\x5a\x68\xc0\xad\x7f\xbe\x28\xda\x01\x7e\x4c\x90\xc6\x35\x91\x97\xe1\x15\x58\x87\x72\xf3\xcb\x9d\x58\xed\x30\x66\xdc\x51\x33\xbc\xd0\x74\x38\xbd\x84\xec\x3f\x6f\xe0\x07\x32\x03\xbf\x73\xb6\x38\xb7\xc3\xd0\xbe\x8b\xf0\x65\x85\xfb\xe1\xb2\x0f\x5a\xed\xe9\x26\x56\xdb\xd1\x55\xba\x23\x6b\x29\xf7\xe3\xd5\x8b\x42\x63\x15\xb3\x0d\x7e\x85\xfb\x91\x0d\x2a\x78\xb0\xbc\x00\xce\x21\x84\x0a\xee\x70\x43\x6e\x8a\x67\x26\x58\x22\xa7\x97\x83\x57\xae\xdc\xba\xd6\x9d\x6a\x7c\x85\x0c\x39\x38\xcc\x26\x3f\x0c\x23\x96\xcf\x41\x27\x8d\x3b\x7c\xe5\x0f\x28\x57\x55\xb9\xaf\xdf\x44\x0e\x19\x19\xf7\xf5\x03\x6f\xb7\x76\xa0\x05\x5a\x07\xb4\x8b\x9f\x22\xe6\x6d\xc9\x6d\xb8\x4e\xb8\x27\x28\x73\xb2\xaa\x4e\x0d\x98\x6e\x92\x8d\xc0\xa6\x7a\x78\xab\xac\x93\xb3\x30\xa9\x82\x7f\x0e\xe9\x74\xff\xc9\x3d\xa6\xa0\x38\x5c\xf2\x7a\x47\xf5\xab\xb5\xbf\xd3\x9b\xd6\x40\xf3\x4f\x02\xc9\x71\xe0\xc8\xb1\x94\x26\xd6\x7b\x6d\xe6\x15\x6f\xd0\x3b\x7b\xed\x5c\x22\x82\xa8\x71\x4f\xab\x42\xd7\x36\x8d\x19\x92\xc3\x45\x28\xad\xb9\x43\x16\x57\xa2\x6c\x47\x83\x98\xdd\xc9\x84\x0e\xb3\xbd\x3d\x3a\xb4\x54\x53\xe8\x2c\x59\x30\x99\x93\xaa\x00\x2f\xbb\x83\xe6\xe9\x83\x07\x64\xed\x3c\x39\xee\x46\x9e\xcf\xa0\xa3\x61\xca\xbd\xb3\xc7\x20\x31\x5a\x8c\xbb\xb6\xf0\x23\x05\x91\x6a\x30\x83\xe2\x7c\x31\xb2\x59\x8c\x3d\x18\x9a\x4c\x26\xf4\x31\x7a\x5e\x30\x35\x78\x25\x0a\x8a\x6a\x00\x15\x4f\xc2\x7f\xad\xf3\x67\xf8\x9b\xd9\x4a\x04\x12\xde\x59\x08\x22\x0f\xa6\xc5\xfa\x7b\x20\x7f\x5b\x77\xd1\xa3\xc1\xeb\xd6\x28\x1b\xb6\xdc\x3b\x36\xa5\xe4\x4b\x60\xd5\xdf\x8d\x67\x47\x6e\xce\xde\x66\x30\x37\x37\x08\xd9\x57\x6a\xbf\x9d\x90\x0b\x8a\xb0\x43\xa7\xbf\x3e\xba\x4c\x1b\xe3\xec\x78\x50\x1e\x02\xf1\x84\x78\x39\x05\xce\x57\x19\x6e\x34\xef\x00\xeb\xeb\xfa\x0b\x00\x7c\x42\xa3\x6c\xd0\xb3\x5d\xf4\x16\x9a\x3b\xc0\xea\x6e\xed\xdb\x36\x74\xe3\x6d\x89\x2f\x36\xcd\x62\x6b\xf4\x13\xba\xe6\xdd\x37\x90\x44\xf7\x0c\x0f\xd1\x3a\xd0\xb7\x0e\x27\x05\x18\xa7\x0b\x39\x79\xa2\xc8\xc5\xf1\x48\x29\x9b\xa2\x93\x5b\x1f\x0d\x3f\xc6\x6e\x33\x22\x9f\xbb\x33\xda\xdb\xeb\x9c\x83\x3f\xc7\xcd\xb3\xa8\x8f\x7c\xc3\x3c\x7a\x60\xca\x9a\x20\x6c\x99\xd5\xf6\x87\x9d\xbf\x53\x6e\x2a\x17\xc5\x57\x22\x04\xb0\xaf\xcc\x84\x6e\x24\x53\xaa\x79\x62\x08\x4e\x5a\xd0\x93\x2b\xae\xc8\x67\xe0\x82\xf4\x6f\xc8\xa1\x0b\xbf\x61\xda\x77\x67\x52\x74\xbf\x9d\x4c\x8a\x34\x13\xb8\xdf\x41\xa0\xcf\xf6\x58\x3d\x43\xcc\x9b\xd6\x36\x88\xe4\xe4\xc3\xc7\xae\xb8\x7d\xb1\xc4\xc3\x27\x5a\x41\x7f\x3d\x5c\x54\xf4\x07\x08\x57\xc3\x27\x43\x35\x51\xbe\xec\x4f\x7f\x5d\x54\x74\x60\x2c\x73\x27\x30\xe3\x39\xd3\x38\x70\x90\xcf\x0f\xe4\x81\x14\x25\x31\x31\xb7\xe1\x67\x41\xaa\x73\x34\x28\x88\x22\x07\x25\xe1\xd3\x09\xfa\x93\xee\x32\xf3\x99\x4c\xfe\x84\x7e\xf8\x93\x49\x8b\x35\x17\x85\x75\xd5\x9a\xb3\xcf\xb4\x40\x90\xb9\x10\xfd\xe3\xdd\xab\x97\x68\xf5\xfd\xc1\xf1\x2e\x44\x8a\x17\x13\x65\xdc\x98\x4c\x7a\xde\xe1\x91\xc9\x4c\x1e\x7d\xe2\xfb\x0f\xb2\x26\x9b\x67\xe5\x27\x4e\xd1\xf6\xe1\xe3\xce\xa7\x11\x25\xf9\x6c\xf8\xc9\x69\x7b\x9e\x8a\x82\xbe\x32\xab\xd0\xf0\x95\xbe\xe0\x67\xc2\xa9\x9c\x70\xc2\xe6\xc0\x4c\x56\x99\xaa\x30\x4f\x08\x42\xb7\xda\x91\x71\xe6\x48\x0c\x75\x26\x93\x89\xb0\x09\x32\x87\xa8\xbe\xb0\x90\xe2\x2e\x64\x59\xc2\x43\x33\xfa\xb9\x44\x20\xc7\xa0\x7d\x96\x85\x59\x56\xc3\x8e\xa5\xcf\x19\xa4\xc7\x47\x38\xd8\xd8\x2c\xed\xaf\xa6\x1f\x1f\x9d\x04\xfb\x70\x56\x89\xb9\xa6\x77\x9f\x54\x94\x0c\xbb\x98\xdb\x7a\x5a\xee\x9d\x69\x02\xfc\x5a\xcd\xa8\x3e\xbc\x39\x51\x60\xa1\x82\x4b\xc6\xe9\xeb\xa5\x09\x29\x3f\xde\x3d\x32\x3f\xff\x55\x91\xc5\xc2\x58\x29\x1f\x61\x7d\x1b\xb8\x7a\xcf\x99\x1a\x3f\xc2\x8a\x9c\x9e\xb0\x5f\xe8\xf8\x11\x06\x60\x61\xa2\xc7\x92\xe9\xb3\x4a\x2c\xc6\x9a\x40\xd9\x09\x26\x69\x29\x1c\x69\x32\x4d\x4d\x82\x77\x56\x13\x45\xaa\x62\xd3\x29\xad\x86\x8e\x2c\xca\x56\xad\xf4\xdf\xe1\x96\xee\x34\xfd\x98\x6e\x6e\xc2\xdb\x41\x96\x4a\xbc\x14\xa4\xd0\xf4\xbe\xa6\x68\xcd\xf9\x5a\x8b\x23\x38\x38\xb7\xe5\xb6\x28\x0a\xf4\xed\x61\x13\xe4\x3d\x4f\xf2\xb6\x6d\x3f\x55\xdf\xa8\xcd\xa5\x2a\xe1\x8f\x28\xc3\x74\x62\x20\x5e\x7a\x3c\x17\x28\x74\x4a\xd5\x9b\xb7\xcf\x3b\xc6\x81\x4d\x30\x13\x6f\xe6\x8f\x08\x66\xa1\xbf\x3c\x13\xf9\xd0\xfc\xf1\x4f\x7d\x46\x43\x07\xc1\xee\x08\x1b\xea\x18\x48\x06\x2e\xf8\x50\xa0\xd8\xc1\xa3\x86\x38\xdd\x4c\x17\x3c\x02\x53\xc2\xd6\x68\xeb\xba\x0e\x51\x61\x6a\x0f\x51\xb5\x0f\xd1\x17\xf9\x3d\x75\xc4\x5e\x43\xab\x17\x3e\x3e\x7d\xb4\x6b\x84\xcc\x9e\x5c\xbc\xb9\xd9\x3d\x8e\x32\x29\xa7\x37\x99\xc9\xa7\x25\x25\x7c\xf8\x6b\x0a\x9f\xbb\x64\xcd\xe6\xaa\xd8\x9d\x09\x65\xd3\xf6\xc3\xa9\xa9\x6c\xb3\xba\xd5\xc2\xf6\x7b\x17\x4c\xd7\x54\xc8\x97\x27\xa3\xf4\x5c\x12\xc4\x47\x88\xba\x6e\x1d\xac\x61\x4b\x29\x4f\x9a\x98\xb0\x94\x7d\x37\x42\xbf\x4f\x4c\x8e\xd5\x84\xc6\xc8\x1c\x70\xb5\x8a\xf2\xad\x45\xaf\x23\xc2\xdf\xaa\x05\x20\xe1\x02\x86\xb5\x94\x46\xe9\x1a\x17\xf6\xc7\xd9\x2e\x9b\x8d\xb2\xb8\x9a\x06\xb8\x9a\x5a\x5c\x4d\x1d\x6e\x4e\x23\x82\x2e\xd4\xaa\xba\x62\x55\xff\x96\x67\x8c\xd5\x04\xc4\xe6\x11\x79\x88\xd1\x41\x6e\x40\xb7\xb5\x2f\xdd\x1a\x9b\xff\xba\xa8\x1b\x57\x94\x14\x3f\xf1\xf2\xca\xbc\xbb\x96\xb1\xd5\x1a\x2c\x2c\xd6\x61\x61\x8e\x85\x85\xd2\xbc\x0d\xc0\xc5\x7a\x2c\xcc\xb7\x96\x30\x27\xe2\x48\x6c\x87\x9f\x3b\xa7\xa2\xcb\x6e\x07\x1e\xcf\x4a\x71\x99\xcf\x48\xa5\xbe\x0e\x4e\x6d\x63\x54\x13\x33\x93\x75\xa6\x1b\x4e\x1e\x15\xf0\x7c\x97\x84\x29\xef\xd3\x46\xa6\x15\x99\x83\xea\xc7\xfc\xf9\xff\x5e\xbd\x34\x09\x09\x9c\x46\x48\x5f\xb4\xab\x77\xe2\x84\x40\x6e\x71\x2b\xbd\xfd\xd1\x44\x0b\x7f\x4a\x16\x10\x1b\xdc\x2b\x93\xf4\xf6\x3d\x25\x65\x79\x4a\xf2\xf3\xfb\x65\x1a\xfd\xc1\x74\x72\x8e\xb7\xd3\x5d\xd9\xcd\x68\x1a\x05\xd9\xdd\x58\xa3\x06\x0f\x23\x93\x6e\xd6\x7d\xf5\x8f\x69\xd1\x2f\xb0\xa6\x1b\x7c\xb9\x80\x4b\x7f\x7b\x0d\x8f\xa2\xa4\x2a\xc4\x25\xf7\xfd\xe0\xa8\xdb\xeb\x88\xdb\x0d\x19\x38\x63\xe5\x9a\x82\xc3\xcd\xaf\x21\x10\x36\x62\xa6\x41\x14\xd5\xbc\xa8\xc8\xe5\x88\x89\x81\x7f\x8d\x83\xa2\xee\xcd\xe5\x1e\x55\x61\x08\xc6\xcd\x7d\x71\x31\x30\x61\x2f\x06\xa0\xdf\xb7\x31\x5a\xba\x80\x35\x6d\xf1\x5d\x56\x30\x1e\x44\x96\x81\x09\x64\x2e\x73\x97\x80\xb0\x1a\x3e\x14\x03\x53\x68\xec\x63\xe0\xff\x0b\x0c\xd2\x17\x42\x2a\x97\xd0\xd4\xf4\x04\x48\x98\x9d\x5d\x0d\xaf\x81\xf4\x1e\xa3\x52\x90\x02\x99\x58\xf3\x9a\xed\x1a\x1f\xe3\xcf\xf3\x72\xc1\xa7\x2e\xad\x85\xbb\x86\xfa\x7e\xa3\xff\x6a\xe4\xc2\x22\x17\x14\x8d\x69\x74\x5f\xff\xdf\xab\x97\x1a\x50\x7f\x9e\x97\x1a\xd4\x30\x7e\x21\xce\xa9\x0b\xac\x19\x99\xd8\xd9\x01\xd7\xb4\x8f\x32\x50\xe9\x59\x8e\xc3\x98\x0e\x9f\xf5\x82\x41\xec\x6d\x89\xe4\x80\x78\x8e\xa2\x3f\x98\xd1\x9b\xe3\xe8\x41\xcc\x7e\x3a\x07\x93\x00\xcc\x58\x23\xbc\x1d\x6b\xd6\x4f\x8a\xe2\xf9\x85\xc9\x6d\x29\x15\xe5\x9a\xfb\x9c\xfb\x64\xb3\x51\xca\xfb\x00\xf4\x18\xd2\x02\x37\x6f\xb6\x73\x14\x00\xf9\x79\x67\xa7\xb5\x91\x59\xd8\xa3\x7e\xc7\xf1\x7e\x5e\x77\xc8\x78\x83\xad\x8c\xa5\xab\x83\xd0\xbe\x29\x5e\xee\xce\x56\x52\x81\x5b\xdc\x33\x7b\x0c\xf8\x4c\x54\x73\xa2\xc6\x08\xae\x19\xd2\xd7\x6d\x9c\x9e\x3a\x96\x0b\xc6\xc7\xc8\x64\xf4\xd2\x2f\xd8\xde\xc0\x15\x9e\x02\x32\x00\x38\x25\x4e\x35\xae\xd1\x1b\x18\x2d\x29\x76\xf9\xa9\x07\x08\x2b\x25\x02\x73\x78\x8a\xac\xc9\x55\x45\x8c\x96\x7f\x14\x3b\x61\x98\x0f\xa3\xce\x5f\x03\xad\x1b\x6c\x19\xf7\x57\xaf\x05\xbd\x1d\xe0\x5e\x8b\x25\x9a\x2c\x99\xc9\xe5\xb0\xca\x7a\xd9\x46\x05\x6c\x6b\x62\x55\x91\xad\x54\xbc\x8c\x36\xdb\xda\xbc\xe3\x9b\xd5\x16\x34\xd4\x92\xd6\xeb\x3a\x4a\x20\x34\xc7\xad\xc7\xf7\xfe\x96\x8c\x67\x83\xb2\xfa\xf2\xdc\xe7\xed\x56\x51\x91\xf9\x57\x22\xc5\xff\xc3\x94\xef\xb7\x31\xe5\x0b\x8e\xfc\x77\x7a\x69\xa7\x74\xce\x38\xeb\xba\xb5\x6b\x0c\x0f\x1c\xfb\xf0\x25\x4d\x0f\xfe\x3f\xf6\xfe\x7d\xb9\x8d\x1b\x69\x1c\x86\xff\xf7\x55\x8c\xb0\xbf\x4f\x21\xd7\x43\x8a\x94\x4f\x09\xb3\x8c\x7f\x8a\x64\x3b\x7a\xd6\x07\x3d\xa2\xbc\xfb\xe4\x91\x55\x2e\x70\x06\x24\x11\x0d\x81\xc9\x00\x23\x89\x91\x59\xf5\x5d\xc4\x7b\x85\xef\x95\xbc\x85\x06\x30\xe7\x21\x87\xb2\x64\xcb\xd9\x24\x55\x16\x07\x68\x9c\x1a\x8d\x46\xa3\xd1\xe8\xb6\x67\x9c\x95\x0e\x3d\xd6\x9d\x73\x72\x6e\xe1\x9a\xf8\x38\xd4\x54\x14\x0b\x12\x0d\xaf\x4d\xec\xb3\x4b\x1e\x9d\xeb\xd0\x63\x69\x9c\x34\xf0\x3b\x34\xbc\xae\x8c\x76\x66\x6c\xca\x97\x0f\x64\xb4\xb8\xce\x79\x29\x2c\x2c\x2d\xcf\xb8\x32\x6c\x2f\x3d\xac\x64\x4b\xd6\xbe\x5e\xa6\x3b\x1b\x69\xc3\x6b\x9a\xeb\xbd\xa3\xc3\x7f\x12\x50\x95\x69\xe3\xf7\xc1\xf5\xd2\xa5\x92\xcc\x21\x10\xf0\xa0\x07\x01\x96\x10\x72\x55\x97\x0f\x7d\xf5\x2d\x48\xc4\x4c\x78\xb9\xa4\xeb\x90\x93\x7c\xd9\x58\x6d\xf9\x73\x34\x74\xc6\x25\xed\x8c\x6e\xdf\x2e\xc3\xf2\x76\x61\x8c\xbd\xb3\x53\x84\xda\xc6\x64\xba\xb4\xbe\x15\x60\x44\x64\xce\x92\x3f\x19\x7c\xe1\x55\xaa\xda\xa6\xaa\xf6\xde\x6c\x2f\xbb\x1a\x27\xc8\x25\x5d\x1c\xd2\x73\xb2\x28\xe6\xc7\x51\xa0\x32\xe3\x28\x28\xe5\x18\xec\x40\xb6\xf9\xdd\x4e\xea\xc9\x04\xef\x87\xd2\xf9\x6f\x03\x9e\x49\x94\xc6\xfe\x03\x82\x7a\x66\x1f\xa7\xd6\x8e\x62\x5a\xe8\x8b\x92\xeb\x2a\x6a\xd2\xb7\x0c\xff\x4e\x28\xaf\xf6\x98\xec\xda\x89\x5a\xb1\xb5\xaf\x9a\x2b\xe2\xa2\x84\x2c\x1a\x4e\x8f\xf1\x7b\x99\x1b\x4a\x86\xd0\x90\xe2\x54\x29\x8a\x7a\x69\x7c\xea\xd3\xde\x59\xf7\xd0\x2f\xce\x48\xb6\x28\xdc\x45\x9a\x61\x24\x63\x4f\xb4\xe5\x01\xf1\x52\x94\xb4\x58\xd3\x23\xb3\x91\xfe\x13\xd7\xcf\xbd\x24\x62\x53\x77\xcc\xfd\x85\xc9\xf8\x85\xd0\xe9\x4c\x87\xe5\x2a\x4f\x5c\xf5\xcc\x66\x7a\x78\x7a\x56\x5d\x4e\xcf\xe3\xa1\x24\xf3\x3b\x9d\x42\xc5\x0f\x9a\xaf\xae\x4a\x1d\x6a\xd5\xd9\xfd\xd3\xa7\x96\x19\x94\x69\x80\x14\x27\x2f\x61\x44\x69\xe8\xf0\x4a\x44\x94\x30\x78\xf3\x3e\xd4\xa0\x1a\x70\x5d\xa4\x91\x9c\xc8\x91\x13\x33\x32\x93\xd7\x7e\x90\x86\x95\x4e\x3a\xc9\x6c\xa4\x13\xd5\x10\x73\x33\x41\x80\x58\xf7\xd0\x1f\x0e\x87\x20\x92\xe8\x5f\xdb\xdb\xad\x3c\x56\xcc\x2b\x25\x97\x75\xf5\x13\x9c\x95\x24\x5f\xc2\x69\x8e\x4d\xab\x4a\xc0\xcc\xb4\x10\xd3\x3d\x4b\x7c\x2c\x25\x12\x43\x69\xcd\xe4\xbb\xe4\x38\xb2\x84\x7d\xb2\xfe\x64\x9b\xe1\xaa\xab\xed\x86\xb4\xc0\xd1\x01\xc0\x06\xd6\x4b\xab\xda\xb2\x7c\xba\x59\x83\x09\xf4\xe7\xb5\x6a\xf6\x95\x46\x6d\xea\x1d\xa3\xa1\x75\x54\x69\x73\xaa\x46\xae\x79\xbf\x54\xde\x97\x33\xfb\xd6\x0a\x54\xd5\x17\xb7\x1b\x66\xed\x88\x6d\xd1\x2a\x1f\xcf\x49\xf7\xf4\xbd\x54\x7a\x59\x85\x76\xd2\x65\xdf\xe9\x17\xae\x7b\xb2\x1b\x71\xf6\xba\x2a\x53\xa0\xec\x43\xd9\x70\x44\xfe\x79\x1c\x91\xb9\x7a\x1f\x6d\xc6\x10\xb9\x6e\x22\xef\x41\x18\x1a\x32\x39\xb1\x30\xf1\xc6\x79\x69\x4a\x74\xa8\xbd\x9f\xb1\x20\x2f\x98\xa4\x72\xd1\xa5\x7e\x02\x96\xdb\xf9\x79\xb7\xb0\x9f\xe7\x19\x62\x4d\x1f\xfa\x85\x3e\xe8\xcb\x8f\xea\x6e\xf4\x2a\x1b\xd6\x31\x76\x92\x86\xd3\x8b\xfe\xd5\xd7\xf1\x45\x36\xfa\x35\x4f\x7a\x05\xd5\x56\x86\x7f\xc1\x86\xd0\x6e\x27\x45\xac\x0c\x5b\x5b\x22\xa1\x82\xa4\x88\x3a\x77\x44\x0c\x07\x23\x1e\x47\x1e\x29\xd2\xd7\xea\x83\x64\x53\xe3\xc5\xec\x31\xec\x5b\x3d\x49\x52\x39\x8b\xc7\x37\x38\x49\x26\x2f\xbf\x9a\x1f\x32\xbf\xc0\x9b\xb0\xf4\x25\xd8\xad\x1c\x38\xad\xf9\x7b\xe9\xb4\xc9\x2f\x19\x89\xc4\x26\x01\xbb\x1b\x9c\x2c\x65\xd1\x00\x51\xaf\xad\x1f\x8b\xee\xa3\x8b\x2c\xdc\x0b\xa8\xf1\x32\x52\x72\x70\x51\x86\x35\xea\xef\xf7\x7a\xcb\x57\xc7\x9f\x95\x27\x3e\x37\x59\x7b\xd7\xcb\x22\x8b\x65\xba\xe3\x5c\x1d\x89\xf9\xf0\xda\x76\x63\xc0\x6c\x8f\x0e\xdc\x4c\x73\x03\xed\xcb\x3d\x09\x40\x6c\x15\xf1\xef\x8f\x5f\x6b\x74\x6a\x6c\xc2\xcf\x8f\xf6\x9c\x1b\x50\x21\xc5\xe0\xf4\xcc\x1d\x47\x98\x79\xb3\x11\x65\x1e\xa4\xeb\xcf\xd7\x94\x11\x31\x40\xfd\x5e\x2f\x39\x26\x23\x64\x1f\xde\x65\x42\x7e\xc1\xf3\xbf\x37\x34\x20\x42\x72\x55\x62\xab\x0f\x29\x87\x42\xc4\xe9\xd7\x3e\x9f\xcf\xa9\x14\x8a\xea\xe0\x80\xaf\x19\x5d\x36\x14\x41\xd5\x09\xff\x01\xef\x42\x8f\x87\x52\xff\x75\x79\x17\xfa\x3c\x94\xfa\xaf\xcb\xbb\x99\xae\x0f\x65\xf6\xcb\xe5\x86\xc7\x0f\xa5\xf9\xe1\xf2\xae\xee\xfd\x50\x9a\x1f\x8a\xf5\xe7\x3a\x3f\x94\x85\x04\x03\xa1\x07\x63\x72\xf5\x87\xc9\x31\x03\x33\x59\xe6\xcb\x68\x26\xa8\xd1\x4c\x64\xcc\x09\xb2\x50\xed\xed\xed\x7c\xc2\x50\xb1\x51\x92\x67\xca\xbc\x90\x62\x7a\x8e\xdc\x6c\xd0\x35\x63\x5e\x5a\xf4\xec\xa4\x5f\x95\x2b\xe1\x4d\x0c\x45\x6a\x90\xf3\x1c\xac\x4f\x14\x3f\xd2\x56\xb6\x65\xaf\x2d\x25\xa7\x2e\x5a\xf0\x53\x5f\x08\x0d\x87\x43\xd1\xb6\xc8\x05\xc1\xc6\xd0\x78\x3e\xc0\x75\x3e\xb0\xb5\x82\x86\x47\x52\xdb\xdb\xad\xdc\x15\xa4\x66\x91\x8e\x82\x76\x2e\x23\xce\xa6\x8e\x02\x75\x0e\x0f\x5c\xe3\xc0\x1d\x8e\x33\x05\x1c\xa4\x32\xc4\x26\x4d\xb7\xd3\x10\x91\xf5\xeb\x71\x46\xbc\xf3\x3d\x90\x82\xc8\x6a\x11\x28\x0d\x0e\xad\x9a\x1b\x49\x3c\x25\xbb\x39\x65\x86\xcc\x87\xa3\x96\x7a\x10\x59\x6d\xc5\x83\xc4\x01\x3a\xcb\xce\xcf\xb6\xa7\xe6\x07\xe6\xe6\xc1\xda\x0e\x0b\x7c\x41\x46\xa0\x27\x42\xee\x35\x84\x0f\x1f\xb0\x12\x2f\xb9\x85\xbe\x2e\x97\xb5\x81\xb6\x89\x3d\xb0\xbf\x53\x6b\xf4\xb5\x5a\x98\x39\xad\x3a\x3c\xf5\x80\x6b\xbb\xa2\x94\xac\x19\x7d\x41\xc0\x31\x73\x0c\x79\xf9\x27\xa8\x45\xfe\xcb\xda\xcf\x49\xea\x74\x41\xab\x4a\xca\x42\xbc\xae\xc8\x65\xed\xac\xc7\x84\x7c\x1e\x49\x8c\x96\x29\x1c\x55\xa9\x9f\x3b\x0d\x24\x35\x24\x32\xce\xbb\x68\x7a\x4c\x42\x2e\xcc\x60\xdd\xba\x7d\x41\xed\x5e\x07\x58\x92\x13\x3a\x27\x47\x26\xbe\x2b\x44\xd9\x48\x62\x94\xf8\x58\x12\x49\xe7\x44\x47\x7f\x55\xed\xbd\xe6\x1e\x0e\x48\x0b\x11\x56\xf1\x44\x49\x33\xb8\x8e\x50\x1c\x0e\xb5\x0b\xa5\x73\x3e\xe8\x2b\x9a\x76\xd1\x81\x8e\xc3\xaf\x67\x2b\x3f\x86\x35\x13\x56\xb1\x75\x3e\x58\xaf\xd2\x74\x11\x8f\xa6\x91\x6a\x65\xed\x7a\x4a\x6c\xdc\x33\x3e\x2c\x1e\xc8\x5c\xc0\x61\x96\xb5\x71\xd7\x60\x46\xe2\xd1\x9e\x73\x5a\x70\xdc\x37\xe6\x5d\xb9\xe6\xf4\x76\xa1\xed\x23\xd4\x46\xa8\xed\xe2\x5b\x7c\x78\x7a\xa6\x64\xda\xd4\xf9\x98\x1e\xf0\x56\xaf\x4a\xb9\x91\xf4\x70\xab\xaf\xe5\xa4\x2a\x5b\x31\x31\xe4\x39\x62\x92\x9a\x98\xca\x3c\xb6\xa5\xd6\xbc\xd5\x8f\xb8\x64\x68\xd5\xb5\x3a\x01\x7c\xdf\x11\x45\xd5\xa7\xbd\xb3\x34\x75\xab\xd7\x5e\xe6\x59\xa1\x1e\x58\xe6\x7e\xd6\x4c\x5e\xbf\xb0\xbc\x8b\xb9\x16\xbc\xe2\xec\x94\xe7\x04\xcb\x9b\xa9\x45\x34\x93\xc9\x3f\x37\xbc\x15\x26\x5e\xd7\xf1\x5e\x11\x03\xbd\x76\xc9\xdc\xde\xd0\xed\x5a\xa6\x6a\xf8\x52\x03\x92\xad\x43\xab\xad\x41\x9a\x3d\x27\xcb\x1a\x6f\x65\x62\xd0\x7b\x08\xd7\xe4\x48\xee\x40\xb7\x9d\x84\x97\x56\x4c\x9f\x56\x53\x55\x2c\xf0\x0c\xbf\x28\xb7\x67\x56\x7f\x12\x3b\x49\x6f\xd5\x10\x22\x29\xe0\x53\xca\x76\xb8\x2a\xb3\x63\xe5\x4e\xf2\x5c\x0b\xa6\x1f\xa9\x3f\x2c\xb8\x1a\xc8\xcb\xd1\x0f\xd1\xb6\xf0\x78\x48\x86\x8a\x31\x6c\x47\xc4\xa7\x11\xf1\xe4\xc7\x38\xa2\x43\xf4\x70\xa5\x2b\xc3\x4a\x31\x5b\x55\x27\xb1\x24\xd5\x85\xab\xbc\x5d\xb6\x1f\x54\xfa\xc0\x24\xea\x2c\x0e\x13\xd5\xf4\xbc\x5f\xde\x48\x2a\xb2\xcc\x0a\x05\x05\xac\xdd\x3e\x72\xd4\xc0\xd9\x48\xf5\xbf\xaa\x51\x53\x05\x8c\x4f\x9b\xf7\x6f\xa8\x50\xa8\x63\xea\x15\xba\xdd\x9c\x12\xa9\xca\x46\x3f\xd5\x35\xf0\x82\xae\x41\x49\x91\x7c\x73\x65\x02\x6f\xa2\x4c\xa8\x57\x56\x25\x11\x54\x37\xd1\x57\xd5\xe9\x47\x48\x6a\xf4\x92\x2e\x45\x09\x8e\xb1\x45\x37\xc1\xa8\x3a\x65\x57\xde\x6a\xac\x2b\x73\xd3\xd7\xef\x59\x0d\xc2\x37\xaa\x04\xf9\x8d\x46\xb8\x5e\x05\xd2\x4c\xbd\xf1\x25\x03\xbc\xdc\xd1\x0d\x3a\x1c\x1a\x5f\x45\x14\x4e\xd1\xfa\x4b\x71\x80\x4d\xb4\x1c\xb9\xfb\x75\x7d\x5b\xd2\xf0\x72\xbd\xb6\xe2\x07\x37\xbe\x76\x97\x95\xd7\xee\xbf\xfd\x0e\xd7\xea\x99\x9b\xf6\x9a\xeb\xf2\x4a\x6b\xb1\x9b\x5d\x93\xaf\x51\x5a\xe7\x5d\xa8\x55\x88\x0d\xab\xed\xd6\x18\x89\xb0\x24\x89\xff\x8e\xa5\xbb\xba\xbe\x7e\x5d\x7d\xfa\x8c\x54\xa8\x6d\xa5\x6d\xd9\x66\x58\x30\xa6\xe6\x5a\x39\xd1\x18\x1d\x29\x21\x16\x26\x65\x63\x3c\xd5\xf6\xf5\x84\x5c\xc9\xfa\xfe\xaa\x15\xb1\x61\x6f\x75\x11\x62\xa6\x22\x7f\x12\x75\xab\x81\x91\x36\x0e\x68\x00\xaf\x51\x91\x6c\xd6\x9b\xcf\xf1\x86\xb2\x72\xd6\x35\x4c\x1d\xc5\xdd\xc7\x4b\x84\x14\x59\x5f\xef\x26\x61\xbd\x7f\xf0\xe2\x0e\xf4\x8d\x6e\xa1\x73\x1c\x9d\xfb\xfc\x92\xdd\x0f\x4b\xca\x80\xb2\xf3\xda\xe0\xbf\x19\x07\x09\xea\xb7\xa1\x62\xf5\xa9\xba\xfd\x86\xfb\xda\xeb\xf8\x17\xf2\x9d\x60\x11\xb7\xce\xc9\xdb\x2d\xb6\x64\x6a\xdc\xdc\x7d\x82\xd9\x8a\xeb\x54\x49\x7a\xc9\xb6\x9f\x23\x34\x28\xec\xcc\xa9\x13\x05\x7d\x1b\x9d\xb9\x00\x4e\x7d\x10\x90\x15\x0f\x6b\xb4\x4f\xd2\xf4\x45\xcb\xe6\xaf\xc3\xd3\x64\x3b\xcb\xa0\xe9\xbd\xc1\x33\x34\x77\x4a\xa4\xea\x71\x15\xdb\x5c\xf7\x14\xdc\x8c\x7f\xe9\xe6\x07\x74\x27\x1e\x06\xcc\x8a\x41\xae\x76\x1f\x61\xa7\xbf\xf0\x6a\xb1\xff\x59\xaf\x16\xc9\x95\x8c\xf0\x3f\xc9\x42\x0c\xae\x5f\x30\x49\xa2\x01\x62\xe4\x52\x55\xb8\xc7\xfc\x43\xa8\x67\x9f\x33\x49\x59\x4c\xde\x98\xe6\x81\x21\x2f\x6f\xc1\x53\x41\xad\xef\x80\x5b\x74\x61\x90\x22\xad\xd2\x8d\x41\x26\x3b\xff\xf8\xbe\x4a\x7a\x4a\xc8\xce\xdd\xaa\xa2\xc5\xa6\x46\x6f\xb9\xd7\x17\x99\xe2\x15\xcb\x44\x2b\xef\xab\x96\x9a\xad\x41\x93\xb1\x5d\xd7\x46\xe5\x60\x07\x45\xa5\x66\xa4\x74\xb2\x80\x30\xe8\x72\x1e\x00\x33\xee\xea\x2d\xaa\x55\xac\x24\xdf\x50\xf2\x82\xd0\x84\x81\x2e\xba\x6a\x2b\x79\xce\x07\x27\x6c\xdd\x71\x4c\x03\xdf\xc0\x3c\x68\xb8\xbc\xcc\xb5\xc4\x08\x54\x90\x5a\x67\xe5\x6e\xf5\xca\x7e\x06\xee\x8d\x47\x81\xc6\x36\xf0\x06\xb5\xb7\x6e\x01\x9f\xdf\xad\xbf\x51\x91\x23\xc4\xaa\x1b\x11\xa6\x41\xf3\xb3\xfb\x0d\xac\x16\xbe\xa0\x69\xfc\xdd\x1f\xf1\x37\x33\x55\x30\x8f\x85\x24\x99\x8b\xdb\x36\x89\xaf\x3e\x9b\xef\x1d\x1d\x9e\xc0\x05\x21\x42\x2e\x18\x9e\x68\xaf\xf3\x57\x83\x7e\xcf\x9d\x46\x3c\xb6\xde\x7c\x17\x42\x92\x39\xfc\x5e\x73\x76\xcf\xda\x70\xfb\x54\x84\x01\x5e\x80\x4f\xc2\x8a\x0b\xc2\x1b\x5a\x56\x36\x78\xf1\x66\xc7\x6e\x58\xc1\xe7\xd8\x03\x1b\x45\x42\x51\x79\xc8\xdb\xd7\xac\xf6\x50\xcc\x72\x56\xb6\xbc\x70\x14\xea\x5a\x9c\x23\x17\xfd\xdd\xfc\xa7\xba\xba\xae\x27\xdc\x7a\x62\x2a\x75\x86\x24\x9d\x49\x60\x52\x16\x97\x3d\x8b\x9a\x6b\x30\xd3\x94\x05\x6e\xbb\x8a\xd8\x1e\x88\x61\xea\xdf\xa9\x0b\x73\xdf\x7e\xce\xf5\x0f\x71\xda\x3b\x1b\x7c\xd4\x5e\xe8\x6d\x92\x7b\x4d\xc1\xe4\x43\x7d\x74\xa9\xbf\xac\xba\xcf\x4a\xed\x7e\xa5\x8b\x00\x12\xb9\xa2\xa0\x2c\xad\x41\x63\xbf\x72\x00\xf5\x98\x04\x0c\x16\x08\x2e\x7f\x39\x32\x55\x63\xd7\x43\x76\x3c\x1c\x04\xce\x04\xd3\x80\xf8\x5a\x0b\xf0\x55\x7a\x04\x06\x0e\x70\x3f\xef\x24\xc6\xae\x7a\xe7\x7e\x05\x28\x5e\xe5\x4b\x28\x47\xe0\xab\x2d\x3e\x57\xdf\x52\x98\x69\xf9\x0c\xed\x1b\xab\x5d\x25\xa9\x8a\xbd\x60\xc1\x99\xb7\x84\xaf\x34\xe0\x2c\x94\x28\x20\x52\xa3\x69\x04\x6c\xe9\xcb\xe0\x49\xb3\xc0\x6f\x14\x51\x37\x14\xab\x3e\xf3\x2e\xa8\x42\x8f\x53\x8a\x2e\x95\xcc\x10\x1d\xf6\x7b\xc6\xb0\x43\x71\x8d\x16\x6c\x6a\x87\x4c\xb6\x44\x77\x8e\xaf\xc0\x42\x82\x0e\x8b\x89\x6e\xca\x61\x84\x3a\x1c\x5c\x21\x97\xde\xc6\xfc\x34\xb9\x3c\x2a\xbe\xe7\x80\xa1\x61\xfb\x9a\xc7\x58\xd4\x3e\xc0\xda\xcb\x81\x0d\x04\xf2\x13\xdd\xde\x6e\xd9\xb4\x61\x92\x29\x02\x25\x5e\xf4\x5c\xda\x5e\x77\x69\x26\xda\xe5\xab\xb6\x02\x08\x6e\x57\x3e\xeb\xd8\xe0\xe6\xaa\x4a\xb9\x59\x51\x61\xc9\xe0\xe7\x66\x46\xbd\x45\xb1\xf2\x5b\x95\x8e\xfd\xc9\xfd\xd0\xc5\xd5\xf8\x26\xbd\x2d\xfd\x59\xe8\x4f\xea\x55\x67\xfe\x44\x1f\xd8\xb5\xd8\x18\xfa\x13\xf3\x40\xb2\xa1\x20\x9c\x94\xff\x32\xd2\xef\x0c\x5e\xaa\x0d\x9e\xf6\x7a\xae\xa0\x3e\x19\xe3\x68\x80\x18\x67\x04\xb9\x42\xe2\x48\x1e\xe1\x29\x19\xf4\xdd\x09\x0d\x08\x18\xba\xe6\x44\xdf\xa4\xab\xb9\x2d\xe1\xe8\xe0\x65\x4b\x6b\xd5\xc0\xeb\xc3\x06\x7e\x74\x4c\x49\xfb\xab\x34\x09\x69\x90\x20\x63\xb3\x94\xeb\x8a\x7e\xe0\x84\x50\x65\x0f\xbb\x7a\x04\xa9\x65\xe7\x5e\x14\x61\xb8\xde\x9e\xf0\xa8\xa5\xd9\x7d\xef\x47\xf9\x0f\x6b\x38\xf7\xa3\x7c\xf8\xb0\x0d\xcf\x7b\x08\xf3\xc5\xbf\xa9\x9c\xb5\xc8\xa9\x3c\x33\x1a\x10\x45\x65\x3a\x84\xa9\xab\x9a\x40\xed\xed\xed\x34\xd7\xc6\x56\xc8\x9d\xfb\x53\x6f\xf8\xd7\x15\x9d\x4e\x0b\xab\x6e\xda\xc8\x7a\xab\x86\x91\x96\xd0\x96\xae\xe0\x2b\x65\x59\x0a\x2c\xa7\x67\x34\x6f\xf1\x90\x56\x66\x26\xbc\xb9\x83\xc4\xcf\x57\x4f\x24\x14\xb3\x42\x1e\x59\xbd\xb1\x9a\x84\x71\xe5\x45\xcc\xda\xbd\x43\xae\xdf\x3b\x64\x9d\xee\x03\xf6\x8a\x9b\xe9\x3e\x12\xc6\xf8\xf5\x19\xfb\x5a\x67\x60\x60\x67\x56\x7b\x91\xe1\x4f\xde\xeb\x27\xe2\x17\x94\x5c\xea\x67\xae\x83\x67\x8a\x79\x64\xb8\x85\x9a\x4d\xb8\xd2\x30\x9c\xe4\xcb\xba\x5f\x5c\xcd\x1a\x61\x21\x8e\x8d\xe3\x8a\xbc\x3d\xfa\x0d\x18\x63\x3d\x3b\x2c\x29\x84\x0d\xde\x15\x3f\x09\x39\x85\x30\x6b\xac\x22\x9b\x47\x53\xc5\x3c\x72\x4b\xa1\xb4\xfc\x0b\x2f\x0f\x79\x0e\x03\x62\x88\x50\xce\x06\x55\x1b\x0e\xce\xb0\x18\x11\x2f\x8e\x88\x3e\x9c\xb5\x9f\x8b\x21\x7a\x2e\x20\x25\x67\x97\x96\x1a\x1c\x66\x80\x07\xe5\xfc\xbc\x80\xa4\x90\xa6\x2a\x84\xa3\x5c\x65\x7d\x0a\xde\xd4\x56\x40\xda\x7b\x78\xd6\x57\xb6\x51\x4b\x23\xca\x4a\x17\xed\x84\xf1\x38\xa0\xde\x4e\xba\x07\xec\xa4\x41\x64\x99\x8b\x32\x5f\x3c\x13\x5c\x76\x63\xc7\x69\x5b\x35\xd4\x67\x9e\x23\x56\x50\xdf\xa6\x0e\xd3\x6e\xc8\x41\x02\xcc\x64\x3c\xaf\x55\x3b\xde\x33\x26\xa2\x0f\x17\x9f\xeb\x51\x50\x07\x99\x4a\xbc\x0a\xda\x5b\x53\x2d\x58\xad\xf6\x21\x78\x6b\xa2\x9e\xc1\xfb\xdd\x5f\x95\x26\x2d\xd5\x5e\x95\x42\x10\x93\x03\xe3\x6c\xb1\xd8\x5a\x06\x65\x55\xc1\x4a\x56\xf8\x18\xd3\x31\x76\x54\x03\x9b\x19\xe2\xe8\xf5\x5b\x31\x0d\xc8\x45\xaf\x74\x4d\x94\x4d\x1d\x03\xd1\xed\x76\x51\xc1\x72\x5e\x3b\x1f\xaa\xe9\xcf\xf2\xc1\x06\x3e\x0c\x73\x47\x5a\x1d\x2e\x72\xb5\x3d\x50\x85\x02\x22\x35\x3a\xce\x93\x1b\x72\x65\xde\xcb\x5c\xee\x00\x48\x56\xa2\x21\x09\x34\x54\x69\xdc\x5c\x6c\x47\x5f\x03\x7f\x4e\x2b\xd6\x15\xee\xad\xbb\xb0\xd4\x64\x55\x77\xc3\x5e\x6f\x15\xf6\xb9\x8e\xcc\x34\x2d\x6c\xe4\xcc\xac\x52\x24\x6d\x62\x4d\xb4\xce\xb5\x59\x8d\xdd\xfc\x26\xee\xbb\x8b\x6b\xae\xc2\x91\x77\xdd\xad\x5b\x9d\x6d\x55\x72\xc9\xa9\xa0\x2f\x28\xa0\xb8\x66\xfa\xbe\xfb\xc0\xfe\x2f\x08\x2f\xf1\x3c\xf8\xc0\xa0\x4d\x67\x44\xa2\x0b\x35\xae\x7d\x1b\xf9\xee\x03\xfb\xc0\x5a\x7f\x6f\x3b\x9d\xce\x87\xab\x47\xc4\x41\xfb\x01\xf5\xce\x0d\x54\x77\x86\x99\x1f\x90\x63\xf2\x7b\x4c\x84\x6c\xb5\xd1\x07\x66\xc1\x18\xb9\x74\x94\x4c\x84\x54\x79\x3a\x71\x90\xfa\xe8\xaa\x53\x88\x17\x47\x54\x2e\xf6\x67\xc4\x3b\x47\x8e\x5a\x72\x1f\x98\xe3\x38\x4e\xe7\xa7\x53\x19\xc5\xe4\x2c\x81\x3c\x84\xe3\x31\x94\x57\xf9\xaa\x0e\x2a\x5e\xf2\xe8\x12\x47\xfe\xf3\x42\x49\xc6\x55\xb9\x88\x7b\x44\x08\xc7\xe3\x4c\x46\x3c\x10\xb9\xa2\x9e\x31\x01\x70\x42\x0d\x45\xd9\x34\x57\x09\x54\x04\x7d\x3f\x5d\x10\x71\xe6\x0c\x87\xc3\xe3\x17\x6f\x0f\x5e\x1c\x1f\xbe\x7d\x35\x1c\x0e\x35\x10\x09\x04\x29\x81\xab\xb6\x01\xfa\xe0\xf0\xf8\xc5\xfe\xc9\xc7\xfd\x5f\x5e\xec\xff\x33\x2d\xc2\x7c\x3a\xb1\x1d\x49\xcb\xaf\x6f\x2a\x5b\x4e\x8f\xdd\x39\xe2\x42\xe6\x47\x9e\xa9\xc5\xa2\x4d\x01\x01\xda\x52\x80\x24\xcf\x06\xb7\x42\x0e\x16\x8e\x3e\x7a\xe4\xe0\x56\x0c\xa3\xd8\x73\x8d\x71\x5d\xed\x2b\x52\x6a\x31\x5b\x79\x32\x94\x52\x25\x13\x1c\x08\x52\x87\xbd\xa4\x98\x1a\xfd\x01\x77\xec\x0b\x88\xe2\xdc\xeb\xd1\xdb\x5c\x27\xd2\xc4\x88\x0a\x03\xfb\xf9\xc5\xcb\x77\xc7\x2f\x3e\x1e\xbc\x18\x9d\x1c\xbf\xfb\x55\x37\x90\x74\xc7\xb4\x50\x49\x5c\x01\x99\xc8\xa4\x15\x03\xb1\x41\x23\x05\xe4\x45\xea\x10\x61\x09\x56\x4f\x87\xa3\xd8\x86\x23\xc9\x3c\x0c\xb0\x24\x4d\xab\xd4\xc8\x49\x70\x54\x98\x68\x23\x7d\x66\x56\x64\xeb\xef\xed\x0f\xec\xff\x12\xe6\xc7\xf3\xe0\xbb\x7a\xfe\x6c\x99\xc7\x48\x0d\x90\x29\xe1\xad\x8e\x79\xa0\x1c\xf3\xc0\x9e\xe4\x91\xf3\x33\x1f\x3b\x7f\x8b\x88\xff\x81\x7d\xe7\x9c\xcc\x88\xc3\x59\xb0\x70\x7c\x3a\x99\x90\x48\x55\xe6\x8c\x89\xbc\x24\x84\x39\x00\xfd\x81\x7d\x87\x99\xef\x84\x38\x92\xd4\xa3\x21\x66\xd2\xa1\x42\x61\xde\xf1\x23\x7c\x49\xd9\xf4\x03\xcb\xe6\xed\x05\xd4\x23\xf9\xa4\x0f\xe8\xd0\x99\xe1\x0b\xe2\x60\x27\x22\x38\x08\x16\x01\x67\x53\x87\xe1\x39\xf9\x00\x14\xfe\xda\xf9\xdb\x0f\x3f\xbc\x7c\xf9\xc3\x0f\x1f\xd8\xce\x77\xce\xaf\x3c\x76\x3c\xcc\x1c\x1c\x08\xee\xf8\xc4\x0b\x70\x44\x06\x1a\x9b\xd9\x4a\x5f\xab\x92\xa5\x9a\x9d\x6c\xd5\x69\xb5\xaa\xf0\x77\x3b\x6a\x02\xa0\x7b\x9d\x9f\x7e\xe6\xe3\x81\xb3\x97\x1e\x85\x28\x67\x8e\x61\x8f\x1f\xd8\xcf\x7c\xdc\xf9\x09\x00\x2b\x60\x44\xc8\x99\x22\x13\x00\x7a\x3d\x70\x5e\xf3\xa9\x23\x23\xcc\x84\xde\x32\x93\xc9\x43\xeb\x27\xef\xbd\x20\xfb\x58\xac\x98\xbb\x3c\xe3\x1f\xbc\xc1\x94\x39\x7b\xfe\x9c\xb2\x81\x1a\x3c\xfc\xfa\xc0\x5a\xef\x05\x81\xe9\xc0\x61\x18\x98\x7e\xb6\x55\xbe\xca\x68\xab\x31\xbf\x17\x24\x72\x3a\x3f\x39\xad\x91\xaa\xab\x6d\x13\x34\x29\x26\x50\x50\x9d\xd3\x29\x26\x33\x2e\x89\x03\xcb\xc1\xe1\x13\xdd\xa6\x33\x70\x4e\x66\x54\x28\x32\xc0\xcc\x21\x57\x78\x1e\x06\xa4\x5b\x06\x36\x75\x28\xe4\xef\x39\x90\x65\xe7\x55\x27\x8e\x15\xe5\x39\x82\x5c\x90\x08\x07\x4e\x40\x19\x11\xb0\x54\x00\x36\xa9\x0e\x41\x5b\xf0\x93\xc2\xa6\xc1\xe0\xf1\xa0\x23\x79\x52\x94\xc3\xb1\x49\x74\x81\x9a\xde\xee\x7e\x60\x66\xa4\x4e\xb7\x0b\x9f\x6f\x77\xd5\x2f\xd3\x1d\x33\x3f\x1f\x58\x83\xe5\xa5\x5d\xfa\x34\x5c\x5b\x10\xff\xc1\x79\xc9\x79\xdf\xb9\xd6\x03\xb4\xa4\x1c\x5b\xbe\x52\x18\xab\x4a\xea\x76\xf5\x5f\x2c\x9c\x05\x8f\x9d\x4b\xcc\xa4\x49\x60\xbe\x03\x37\x9c\xfa\xd3\x72\x14\x39\xa3\x6c\x2a\x1c\xc9\xa7\x44\xce\x48\x64\x4a\x7f\xfc\x98\x6f\x51\x2f\x0a\xe1\xcc\x31\x5b\xe8\x5a\x44\x4d\x33\x9d\x8e\xfe\xfb\x82\xf9\x6a\xce\x60\x10\x1f\xd8\x52\xa1\x5f\x0f\x08\x88\xe5\xda\x76\xd6\x19\x51\x35\xdb\xce\x2b\x22\x25\x89\x92\xde\x3f\x74\xa6\x44\xbe\xc5\x73\xd2\x6a\x67\x12\xf6\x7c\x3f\x22\x0a\x81\x69\x69\x3e\x27\x8e\x28\x96\x15\xf9\xb2\x1f\x3f\x3a\x61\x44\x2f\xb0\x24\xe0\xc1\x3b\x19\x1c\x65\xd2\xc1\xd3\x64\x6b\x72\x08\xf3\xa2\x45\xa8\x68\xc1\x0e\x62\x04\xda\x40\x27\xc4\x42\x5c\xf2\xc8\x37\xe3\x68\xbe\x22\xad\x2c\xf6\xb6\x70\x88\x5a\x31\xeb\x1f\x18\xfc\xfe\xc0\x06\xab\x24\xae\x1f\x3f\xb0\x81\x12\xb5\xd4\x1e\xf2\x23\x6c\x95\xad\x2a\x41\xab\x0d\x3b\x9a\xd3\x52\x12\x96\x41\xc6\x20\x27\x66\xfd\x98\x6c\x84\xad\x54\xc8\xb2\xa5\x18\x4f\xca\x14\x44\xac\x4c\xb1\x2a\x01\xab\x54\x01\xd0\xaa\xe4\x61\xb5\x8c\xd3\xa2\x02\x44\x1c\x5b\x6c\x41\x44\xa6\xdc\x20\x27\xe0\xfc\x98\x6e\xad\x85\xfa\x07\x59\xa9\xe4\xc7\x5c\x4b\xd9\x6c\x2b\x0b\xe5\x21\x74\x7d\x20\x97\xb4\xf3\x22\x48\xcb\xcf\x88\x20\xe5\x1e\x0e\x12\x01\xc4\x8c\xff\xc7\x82\x80\xa1\xca\x4f\x0a\x88\xcd\x14\x2f\x48\x16\xd5\xc3\x1b\x54\x49\x0c\x3f\x56\x4b\x04\x1a\xcd\x9b\x10\x69\xaa\x69\x6b\xb8\x71\xa8\xdd\xd8\x3b\x57\x7d\x41\xb0\xfe\xc0\x44\x03\xd9\x35\xfd\xcb\xc9\xc9\x91\xd3\x71\x4e\x5f\xd2\x48\xa8\xf3\x84\xa9\xfc\x4c\xe7\x9e\xee\x31\xae\xf8\x4c\x2e\x63\xa9\x99\xb3\x4f\x1c\xf4\x0e\x32\xb5\xd1\x47\x52\xe5\x4b\x5d\xe3\x88\x78\x9c\xf9\xe5\x2a\x8b\x2d\xd9\xad\xe8\xe5\xc9\x51\xc2\x79\x78\xec\xdb\xda\x4e\x5f\xe8\x1d\xc6\xe9\xdb\xa6\x3f\x30\xc5\x17\xc6\x58\x10\x07\xbd\x59\x8c\x7e\x0f\x92\x96\x27\x3c\x50\x88\x47\x76\x7f\x9a\x2f\x4c\x52\x02\x71\xfa\x52\x83\x3c\x32\xbd\x59\x9a\x82\x11\x9e\x13\x25\x38\xf2\x0c\x24\xa4\x3d\x4e\x01\x4d\xe3\x15\x38\xb1\x43\xc8\xf5\x35\xf3\x91\xe4\x67\x5a\x4f\x7f\xa7\xb9\x49\x8b\x1b\x09\x81\x12\xcb\xc6\x52\x84\xf0\x70\x40\x9c\xa7\xbd\x9e\x73\x49\x7d\x39\x83\xf1\xfc\xfd\x4c\x89\x07\x50\x4d\xff\x83\x7e\xbe\xdb\xb7\x7d\x82\xaf\x5d\x67\xe0\x8c\x62\xcf\x23\xc4\x57\x52\x63\x1e\x42\x15\x1f\x38\x7b\x63\x1e\xc9\x24\x73\x37\x57\xfc\x51\x45\xf1\xdd\x9a\xe2\xf0\x38\xd8\x16\x33\x33\xa1\xd3\x34\xf1\x42\x8e\x03\xf7\x6f\x6a\x33\x53\xf2\x5e\x5f\x43\xc1\x4f\x67\xe0\xfc\x57\x2c\xa4\x83\x1d\x09\xb2\x1c\x4c\xe4\xdf\x13\x0c\x97\xc0\xb3\xe9\xce\xc0\x79\x4b\x2e\x9d\x03\x2c\x71\x05\x88\xe1\xa9\x2a\xd7\x19\x38\x2f\x18\x8f\xa7\x33\x03\xbb\x34\x63\x7a\x54\x1a\xf5\x4b\x30\xd4\x2a\x66\xeb\x21\x27\x18\x71\x76\x9c\x91\xda\xaf\x8f\x89\x88\x03\x59\x0d\x9c\xe0\xa7\x01\x61\x94\x34\xd5\x0f\x36\xd7\x54\x7f\xfd\x0b\xaf\x1b\xa9\xdb\x25\x1e\x07\xb5\x1e\xda\x13\x0f\x65\x5f\xf8\x35\xee\x5d\x9b\x35\xc0\xa0\xeb\x23\xe3\xe8\x9e\x9e\x28\xa0\xc1\x77\xff\x00\x60\x1b\xab\xec\x72\x21\xe8\xe5\x62\xda\x81\x44\xe4\x08\xb9\x08\xc8\x10\x01\x63\x18\x38\xfd\x5e\xef\xff\xf7\x23\xfa\xe9\x1f\x72\x46\xb0\xff\xd3\x3f\x64\xa4\x7e\xfe\xf4\x8f\x71\xf4\xd3\x3f\x76\xd4\x8f\x86\x1f\x3b\x52\xff\xd2\x95\x8c\xb9\xbf\x30\x75\xf9\x85\xf6\x76\x9f\x74\x7b\x3d\xd3\xa6\x2e\xed\x7f\x0d\x28\xe8\xef\x5f\x1d\xfc\xdc\x0e\xee\x98\xa9\xd6\x4b\xf2\xa7\xef\x6e\xa8\xde\x2e\xbf\x43\x29\x2b\xb1\xeb\xe2\x5c\x9b\xfc\xac\x47\xd2\xaa\xea\xb2\x0b\x64\xe3\x88\x4d\xd6\xab\xc8\xdf\xb2\x77\xa7\xe9\x0b\xab\x1f\xf3\x1e\x8f\x48\xbb\x3b\x89\x38\x0e\xb0\x79\x76\x73\x2d\x39\x0f\xc6\x38\xd2\x37\x03\xe0\xbc\xce\xa4\x1c\x32\x75\x46\x1c\x6c\xf5\x5c\xc0\xdf\x31\x11\xf4\x0f\x12\xbd\x9b\x4c\x04\x91\x83\xbe\xe2\x41\x6b\xaf\x59\x6a\xa3\xb3\x93\x76\x97\xb3\x16\xca\xf6\xc4\x06\x95\xd1\xf6\xa8\x7e\x21\xce\x54\xde\xc0\x74\x79\x93\x68\x53\x45\xcf\x4f\xd5\xe8\x6a\x77\xf9\x64\xb2\xba\x67\x37\x79\x93\xbc\xb1\xed\x4b\x23\x1b\x17\x57\x0c\x9b\x8e\x2a\x37\xe9\x10\xe1\x52\xc1\xe8\xdb\x89\x92\xa5\x4c\xd6\x43\x1d\x5c\xcf\xd7\x92\x6a\xc9\x24\x46\x34\x37\x81\x69\xfa\xda\x38\xb3\xa3\x7e\xbb\x32\x41\x1c\xe0\xe8\x06\x7e\x4b\xe7\xdc\xc7\xc1\xaa\x97\x41\x5f\xc1\x6b\x69\xfa\x02\x28\xf5\x5f\xba\xee\x5e\xbf\xe9\x13\xe7\x5b\x14\x48\x14\xc6\x6b\x45\x12\xc0\xeb\xad\x37\x03\xb5\x56\x3c\x54\x9e\xab\x79\x3e\x30\xf1\x72\xf4\x57\xd6\xd2\xf3\x2f\xf9\xe8\xcf\x28\x7e\xdc\xfb\x0e\x7e\xb3\xf2\x51\xd6\xc7\x48\x66\x31\x21\xf7\x5a\x91\xb0\x89\x6e\x0b\xe6\x7b\x27\x8b\x10\x5c\xe6\xd6\xc4\xf9\x5d\x33\x3c\xec\xfb\x6b\xde\xf0\xaf\xa9\xc0\x44\xfa\x4b\xea\xc8\x54\x78\xdd\xcc\x46\xc5\x18\x26\x7a\xd8\x9b\x91\x8f\x22\x9e\x4c\xe8\xd5\x00\x3d\xbf\x18\x3e\xe9\x3f\x42\x26\xcc\x04\x8f\x06\x75\xdb\xbe\x1b\x91\x00\x4b\x7a\x41\x3e\xc6\x51\x00\xaf\xe7\xc7\x11\xbf\x14\x24\xfa\x28\x42\x12\x04\xe0\x9b\x55\xe1\x4a\x48\x2c\x63\x31\xc6\x91\x7e\x75\x69\xe5\xbe\x10\x0b\x49\x3e\xfa\x58\xe2\x8f\x74\x8e\xa7\x04\xf0\xaa\x7f\x7d\x8c\xc3\x80\x63\xff\xa3\x56\x32\x47\x83\xe2\x23\x54\x13\x0f\x6b\x80\x1e\x92\xee\x38\xe0\xe3\x56\xbb\xab\x36\xbf\x87\xe8\xc7\x31\x16\xe4\xe9\x63\x17\x32\xe0\x67\x0b\x42\x1b\xaa\x5a\x3f\x62\xff\x42\xe2\xb1\x6a\x65\x4e\x7c\x8a\x3f\x06\xaa\xeb\x64\x3e\x26\x3e\x34\x6d\x3c\x05\x08\x1a\x5c\x28\x04\x89\x73\xca\x06\x88\x5f\x51\x08\xef\x0e\x7e\xef\x3f\x82\x31\x20\x65\xd3\x81\x92\x48\x90\xab\x77\x2c\xe2\x7f\x84\x07\x62\x1f\x89\x9e\x38\x31\x40\x63\x97\xba\xe3\x1d\x35\x9b\x6c\xea\xd2\x1d\x32\x47\xee\x84\x33\xa9\x44\xdc\x8f\x3a\x46\xa1\x18\xa0\xef\xc3\x2b\xa7\xdf\x53\xff\xec\xaa\x7f\x1e\xab\x7f\x9e\xa8\x7f\x9e\xaa\x7f\x54\xee\xae\xca\xdd\x55\xb9\xbb\x2a\x77\x57\x65\xec\xaa\x8c\x47\x2a\xe3\x91\xca\x78\xa4\x32\x1e\xa9\x8c\x47\x2a\xe3\xb1\xca\x78\xac\x32\x1e\xab\x8c\xc7\x2a\xe3\xb1\xca\x78\xa2\x32\x9e\xa8\x8c\x27\x2a\xe3\x89\xca\x78\xa2\x32\x9e\xaa\x8c\x67\xea\x9f\xef\xd5\x3f\x3f\x40\x87\x7a\xbd\xf0\xca\x46\x53\x14\x83\xeb\x31\x0f\xfc\xc1\xb5\x99\x39\x34\x46\x4b\x97\x4a\x1c\x50\x2f\x4d\xa3\x68\xb9\x74\xc3\x20\x9e\x52\x25\xe4\x23\xec\x5f\x04\x54\x48\x07\xc7\x92\xab\xbd\xd9\x01\xa7\x7a\x0e\xfc\x84\xb9\x70\xbc\x19\x8e\xe6\x38\x74\xc2\x88\x32\xe9\xcc\xb4\x2a\x19\x8c\xc5\x91\x8b\xb4\x23\x64\xf3\x92\xdd\xb9\xe4\x91\xef\xf1\x98\x49\xe7\x82\x8a\x18\x07\xe3\x80\x7b\xe7\xc2\x7c\xa8\x7a\x84\xe3\x71\x9f\xc0\x3f\x42\xeb\x23\x27\x71\x10\x08\x2f\x22\xf0\xd8\x8f\xc2\xb2\xb4\xae\x57\x1d\x98\x7b\x87\x71\x06\xad\x51\x36\x75\x04\xbe\x20\x8e\xde\x16\xb5\xea\x9c\x72\x86\x03\xaa\x4e\x03\xc8\x2a\xb7\x1d\xa0\x56\x47\x92\x2b\x19\x62\x29\x49\xc4\xf4\x40\xd4\x69\x46\x09\x89\x73\xc2\xe2\xc1\xf5\x12\xfe\x1a\x4a\x87\x1a\x3f\x9a\xe3\x0e\x44\x1d\xd6\x3f\xfb\x03\xad\xd0\xd0\x4d\xfa\x24\x20\x92\x38\x9f\xf4\x57\x18\xf1\x50\xe8\x9f\x11\xbf\xcc\x7c\x79\x24\x08\xf4\xa7\x81\xd4\xa3\x8a\xf8\xe5\x98\x4c\x78\x44\x0a\x89\xb0\xd4\xb3\x0d\x44\xfc\x32\x5f\xd2\xe3\x41\xb9\xa4\xc7\x83\x52\x49\x8f\x07\x49\xd7\x77\x07\xc8\xd2\xb1\xe6\x0e\xce\x27\x47\xd5\xe1\xf1\x80\x47\xce\x18\x7b\xe7\xfa\x17\x4c\x74\xcc\xe0\xcf\x27\x47\x91\x8f\xa3\x29\xc6\x89\x15\xf7\x51\x34\xe3\x08\x19\xd1\x73\x22\x67\x11\xe8\x19\x3f\x39\x38\xa0\x53\x16\x90\x89\xd4\xbf\x3c\xc2\x54\x47\xe0\xb7\xbe\x70\x85\x9f\xbf\xc5\x42\xd2\xc9\x22\xe9\xd1\x47\x21\xa9\x77\x0e\x3e\x19\xd4\x34\x7e\xe4\x4c\xfd\xb1\x1e\x27\x07\x0d\xdd\x67\x2c\x1f\xa0\xd8\xbe\x8e\x45\xc3\xa1\xe2\x25\x7c\xe2\x48\xca\x16\x73\x8f\x3c\x4f\xbd\xff\x4e\x89\x1c\x79\x11\x0d\x65\x0b\xed\x98\x5c\xfb\xb7\x3b\xa7\xac\xfb\x9b\xb0\xcc\x33\xd3\xb0\xf1\x24\x61\xe1\x7c\x3e\xef\x42\x74\x56\xf5\xeb\x35\xc7\x3e\xf8\x89\x75\x6d\xb6\xe2\x5a\xef\x8f\x5f\x0f\xd1\xce\x0e\x7a\x58\xf2\x7b\xc9\x85\x7c\x98\x34\x8d\x92\x42\x9a\x75\x0f\x91\xea\x44\x9a\x0a\xef\x7a\x48\x7b\xd9\x1e\x94\x52\x96\x6e\x7e\xf3\xb8\xb6\x10\x3a\xe1\x0d\x66\x78\x4a\xa2\x2e\xb9\x22\xde\xbe\xf6\x47\xd2\x42\x73\x8f\x1c\x67\x0a\xa9\xc3\x9d\x5b\x79\x1a\x4c\x1d\xa7\x1d\xc2\xfe\x09\x1b\xab\x3a\x3d\x19\xe3\xf0\xf4\x21\x32\x69\x7f\xfa\xd4\x1b\x0e\x87\xa4\x22\xfe\x71\xc9\xaa\x2d\xb7\x19\xb7\x5d\x36\xfc\x3c\x59\xf6\x3b\x78\xa8\xd3\x35\x7b\xfa\xf6\x76\xe6\xf1\x4d\x17\x04\x8c\x09\x25\x81\x2f\xda\xed\xdc\x67\xde\xc1\xf1\x90\x3d\x44\x4a\xd8\x55\xdb\x8d\x76\x66\xf3\x10\x81\xd0\x8b\x8c\xb7\x70\xc7\xbe\xe2\xe1\xc3\xfe\x8f\xfc\x1f\x66\xa0\xa7\xbd\x33\xfb\x9c\x87\x3f\x7c\xd8\x4e\xaa\xd9\xe7\x41\x3c\x67\x0e\x7a\xc8\x6d\x35\x0f\xd8\xc3\x21\xca\x49\xd0\xc8\x85\x24\x2d\x5c\x21\xd7\x60\x2e\xdb\x2b\x3a\x69\x69\x90\xe8\x27\x94\x7f\x52\x44\xaa\x7a\xef\x17\x7b\xef\x27\xbd\xb7\x47\x3d\x38\xcb\x09\x50\xee\x34\x2d\xbf\x4c\x3a\x8e\x96\x6d\xd7\x7c\x98\x3e\x9b\x2f\x10\x0b\x53\x6a\xcd\x53\x9e\x9a\xf1\x6a\x55\x83\x20\xe0\x46\x47\x49\x48\x2c\xef\x68\x66\x34\xe3\x97\x9a\xe2\xde\xa8\x93\x92\x15\xa0\xe0\xd8\xf4\x2e\x24\xac\xa0\xbf\x30\x87\x34\xd4\x76\xaf\xc5\x8c\x5f\xaa\xb3\xaa\x8b\xfe\xe6\x89\x8b\x4e\x1a\xf7\x53\x57\x57\x71\x50\x4b\x0f\x5d\x05\xff\x06\x79\x2a\x4d\x1e\x83\x41\x63\xfb\x01\x17\xa4\xae\x17\x59\x31\x96\xe4\x1e\x4e\xb0\xe1\x11\x0e\xb1\x0d\xbc\x60\xc5\xd0\x41\x42\xbb\xae\xbf\x60\x78\x4e\xbd\x93\x05\x78\x2d\x92\xdd\x54\x38\x55\x52\x4c\x08\x75\xea\xf0\x10\xea\x3c\xfe\x20\x77\xab\x92\x5d\xa2\xac\xde\x35\xcd\x66\x93\xe4\xb2\xa1\xf5\x8d\xad\xd8\xd6\x34\x9d\xb2\x7c\x54\xe3\xac\x1b\x02\xe2\x5a\x15\x11\xb3\xce\x10\xd2\xba\x57\x39\xc4\xe9\x52\x73\x6b\xac\x5b\xe0\x45\x7f\x37\x66\xea\x36\x1b\x81\xa9\x7d\xab\xe0\x21\x49\x57\xd2\xde\xde\xde\x2a\x32\xb2\xed\x6d\xd2\x4d\xda\xbc\x3b\x77\x39\x2e\xdf\x78\x24\x6b\x1d\xec\xf0\xdc\x04\x35\x77\xb0\xd3\xd4\x29\x6e\x4e\x3f\xf5\xad\xea\xd8\x22\x12\x04\xfc\xaf\xd0\x40\x1b\x86\x06\x1a\x73\x1c\xf9\x26\x34\x10\xe3\x3f\xeb\x2f\x05\x18\x86\x26\xdc\xab\x46\xec\x3e\xbc\x8a\x8c\x23\x52\xd6\x99\x69\xd0\x8a\xa7\x23\x5b\x55\xc7\x7e\x03\x0d\xaf\x46\xa0\xf1\x91\x12\x03\x4a\x95\x1a\xc7\x11\x00\xb1\x52\x21\x97\x03\x4c\x9e\xb7\x81\x27\x16\x52\x0a\x70\x91\xb0\x6d\xf4\xb7\xc7\x9e\xfa\x1f\x19\x21\x86\x74\xc3\x88\x4c\x44\x57\xc9\xa4\xd3\x88\xc7\xcc\xdf\x57\x72\xb2\x65\x61\xba\x77\xda\xb6\xab\x3b\x93\xf3\x60\x84\x27\xa4\x85\x52\xe8\x0e\x88\xd5\x03\x07\x3d\x94\x4d\x5c\x13\x6e\x14\x64\xa9\xc0\x70\xae\x97\x89\xf7\x8d\x68\x71\xcd\x36\x78\xc7\x2d\x72\xcf\x15\x4d\xc8\x7a\x13\xe3\xc4\x84\xee\xd5\x84\x00\xc8\xd4\x3f\x6d\x48\xa3\x4a\xcf\x45\xac\x99\x1b\xa0\xfa\x98\x4c\x99\x90\x73\x86\x88\x48\x57\xff\x2a\x86\x97\x93\xda\x31\x0c\xd1\x3f\x6c\xc4\xbe\x92\xf8\x8d\x05\x84\xe7\xd9\x2a\xc6\x35\x31\xfb\x81\x89\x7b\x62\xb1\xcb\xd2\x18\x31\x7f\x33\xef\x0f\x21\x48\x4c\x76\x9f\xff\xf4\xa9\xba\x23\xed\x25\x42\x5b\xc3\x21\xcf\x53\xf5\xf6\x76\x36\x35\x57\xa4\xfd\x9c\xe7\x5c\x3c\x0d\x2a\x4f\x2d\x36\x36\x00\x0e\x69\x57\xaf\x3c\x88\x0f\xd0\xdf\xd1\xee\xfe\xd5\x01\xe6\x9c\x2c\x86\xe8\x61\xa1\xe1\xec\x12\x39\xd1\xe5\x7c\x92\x44\x12\x68\x95\xfc\xf4\x54\xc6\x9b\x81\xe5\x7f\x83\xf0\x25\x9a\x89\x54\x87\x9d\x31\x0b\x33\xff\x2c\x55\x2b\xd1\x53\x97\x49\xe5\x48\x60\xe6\xdc\x21\x8d\x18\xfe\x3c\xed\x8d\xe5\x52\xd0\xa3\x41\xab\x32\xa3\xaf\x65\xb5\xfa\x30\x37\x32\x1b\xe6\x46\x56\x86\xb9\x31\xac\xa7\x32\xcc\x8d\xc9\x93\xb5\x61\x6e\x56\xad\x08\xee\x22\x13\xc2\xa0\x69\x04\x97\xea\xd0\x2b\x26\xee\x8a\x8e\x6a\xac\xc3\xd1\x96\x42\xac\x24\x92\x0b\xcb\x75\x95\xe8\x00\x91\xc3\xad\x5e\x95\x87\x49\x3e\x54\x22\x9b\x17\xc4\x3e\xf1\xd5\xbe\x65\x7f\x83\x53\x92\xca\x68\x29\xf2\x8e\xa2\xa5\x94\x82\x72\x00\xe2\x1d\x83\x81\x52\x64\x8e\x9b\xdc\xcc\x2a\x72\x07\xcb\xd7\x31\xbf\xaa\xf7\x82\x64\x91\x9e\xc7\xa2\x9e\x83\xad\xe1\x50\x6e\x6f\xe7\xdc\x75\x59\x8c\x21\x77\x2b\x83\xca\x6c\x7c\x5b\x08\xfb\x55\xb1\x2b\xea\xce\x16\x6f\x75\x35\x27\xe8\xe0\x30\x2c\xc6\x7a\x25\x51\x04\x1e\x21\x4d\x98\x57\x17\x64\x8b\x94\x5e\x6b\x83\x90\xc8\x6a\x0f\x45\x0f\x8a\x21\x5f\xdc\xcf\xe3\x52\xe5\x11\x56\x30\xaa\x94\x4d\x5d\x2b\xf1\x6d\x90\x3c\xd1\x41\x2e\x65\x92\x44\x6a\x4e\x2f\x40\x23\xad\x03\xed\x1d\x18\x31\x0d\xb9\x10\xf6\x64\x70\x1d\x11\xec\xab\xec\xcb\x88\x4a\x32\xd8\xea\x2f\x5d\x72\x15\xd2\x08\xeb\x97\xbd\x8c\x80\xba\x38\x24\x91\xa0\x42\x82\x22\x2a\xf6\x3c\x22\xc4\xa0\x10\xcf\x6b\x65\x10\x9c\x3c\xfb\x37\x3d\x87\xaf\x56\xbb\x1c\x29\xc7\x02\xcc\x09\x38\xae\xb5\x9b\x32\xaa\x5a\x14\x99\xf0\x3d\x6a\x25\xad\xe6\xd3\x6b\x22\xae\x31\xd7\x32\xe3\xcf\x88\xb5\x63\x6b\xb0\xb1\x76\xb2\xdb\xc2\x1d\x2e\xeb\xea\x58\x3b\x40\xe0\x83\xdb\x89\xbc\xb4\x34\x1e\xbd\x60\x40\x9b\xc7\xa4\x31\x5c\xbf\x61\x4c\x9a\x3c\xd6\xfe\x0a\x33\x93\x86\x99\x31\xd4\x55\xae\xfa\xcf\x12\x64\x26\x7b\x16\xfd\x46\x8f\xd3\x46\x57\x7b\xef\x0c\x59\xef\x99\x9d\x89\x55\x69\xd7\xd9\x99\x08\x2f\xe2\x41\xf0\x92\x5e\x69\xdf\x14\x77\x74\xbf\xbe\xe1\xe5\x36\xd2\xbd\x52\x12\x48\x41\xd0\x50\x47\x5b\xd4\xee\x7a\x4a\xb2\xe0\x17\x24\x9a\x04\xfc\xb2\xb3\x40\xed\xe7\x19\x31\x3b\x19\x92\x5e\xf1\xcd\x6a\x70\x51\xcc\x04\x91\x28\x27\x4c\x67\x6b\xea\x37\xf5\x28\xfe\x65\x6e\xc4\xc1\xe4\xef\x4a\xc2\xa5\xe1\x56\xbf\xfa\x82\xbc\xff\x35\x2f\xc8\xf5\xb7\x67\xbc\x97\xdc\xe7\x1b\xf3\x6f\xf5\xb2\x3c\xbd\xad\xfe\x68\x0c\x40\x3f\x7a\x42\x0c\x56\x5d\xfb\x85\x11\x15\x73\xfd\xaf\x5a\x01\x28\x5b\x47\x80\xd9\x34\x06\x1a\x39\xbd\x96\xe0\x9d\x66\x6f\x74\xd4\x7d\xfb\xe2\xc4\x69\xed\xff\xad\x8d\x6c\xc0\x02\x2c\x42\x46\x24\x5a\xba\x06\x68\x3f\xc9\xf1\x32\x89\x7f\x4b\x53\xc5\x0c\x47\x61\x26\xeb\xe1\xc3\x34\x2f\xcc\x66\x8c\x46\x99\x42\x22\xcd\x38\xe0\x3a\x96\xa9\xc9\xf3\xf5\x67\x92\xfd\x22\xa0\x57\x34\xcd\x26\xfa\x33\xcd\x8e\xd4\xc0\xd2\x6c\xfd\x99\x64\xbf\xd4\xdd\xb3\xd9\x93\x42\x6f\x5f\x51\x99\xe4\x4d\x69\x66\xd8\xaf\x78\x9a\xce\x33\xc9\x11\x0e\x67\xff\xfd\x3a\xcd\x53\xdf\xbf\x07\x29\xc0\x2f\x58\x9c\x93\x20\x48\x00\x66\xe6\x3b\x05\x38\x79\x93\x16\x9f\xe3\xe8\x3c\x0e\xb3\x99\x27\x47\x69\x51\x29\x33\x59\xff\x85\x2f\x70\x92\xf5\x9b\xfa\xc8\x65\xe9\x83\x51\x0e\x40\xe8\xa4\x14\x6c\xf4\xee\x6d\x0a\x20\x38\x4b\xb3\x5e\x13\x45\x2c\x26\x2b\x20\xd9\xd9\x79\x83\xcf\xc9\x84\xaa\x4d\x33\xe9\xb3\x49\xc8\x80\xd8\x50\x19\x99\x61\x41\x42\x02\xc2\xa6\x94\x5d\x25\xf9\xfa\x2b\xc9\xd4\x5b\x36\xbd\x20\x4e\x4a\x6c\xdc\xa6\x65\xa8\xee\x88\x44\x29\x62\x43\xf5\x91\x66\xfd\x92\xe2\x2d\x9c\x65\xd0\x76\xc4\x2f\x49\x24\x66\xd9\x29\x09\xd3\xa4\x14\x6c\x21\x67\x3c\x1d\x40\xa8\x3f\x93\xec\xe3\x78\xbc\x48\x32\x23\xf5\x91\xc9\x12\x32\x93\x25\x32\x08\x1f\x61\x21\x9c\x51\x96\xee\x45\x8e\xf0\x47\xb9\x6e\x8d\xb1\x98\x65\xf2\x32\x44\x26\xb2\x04\x36\xba\xa4\x93\xb4\x41\x01\x5f\x49\xe6\xc9\x22\x24\x05\x4a\x50\x4c\xbd\x48\x09\xff\xb3\x82\x04\x7f\xdd\xcb\x64\x2e\xf0\x3c\x40\xcb\xb3\x55\x76\x3b\xea\x47\x04\xa6\xf9\xff\x99\x26\x3c\xc6\x78\xe7\x14\x19\xf6\xae\x8d\x5e\x4a\x36\x30\x4d\x2c\x5c\x40\x54\xd2\x73\xe5\x88\x78\x6c\x7e\x01\x26\x7e\x8f\x39\x98\x00\xad\x31\xa5\x41\x2e\xe2\xb1\xf4\x09\x93\x8e\x0e\x4b\xe3\x8c\xe3\x00\xe6\x8b\xc5\x73\xf8\xbb\xa1\x15\x8d\xb5\x08\x72\xb4\x34\xa1\xa7\x55\xff\xab\x51\x9c\xce\x07\x3a\xfb\xcb\xe2\xe6\x33\x2d\x6e\x36\x35\xf1\xbc\x45\x8b\x9c\xec\xc1\x39\x91\x8a\x21\xb0\x79\x9d\xb4\xdc\x54\xee\x36\xb2\x7e\x21\xe4\xcf\x5f\x26\x04\x7f\x99\x10\x34\x32\x21\x68\xfa\x48\x27\xa7\x2f\xf8\xe6\x74\x1e\x32\x0e\x77\x6c\x4e\x07\x3e\x6b\x02\xf3\xc4\x92\x06\x62\x47\x2b\xa0\xea\x94\x20\x5f\x20\x08\xcf\x3a\x35\xc8\x18\x5e\xf3\xbd\xc6\x63\x12\x0c\x90\x2a\x0d\x26\xac\x66\x60\x33\x2c\x4e\x14\x9d\x40\x94\x83\x82\x02\xa4\x0b\x9e\x22\x75\xc4\xb0\xa0\xab\xc9\xa9\xad\x4a\x80\xc7\x04\x86\xe7\x0d\x4a\x4d\x2c\xa8\x2e\xf9\x1a\x37\x2d\x18\xe0\x6c\xb9\x17\x73\x4c\x83\xf5\x85\x88\x02\xd3\x25\x8e\x8c\xd3\x95\xf5\x85\xac\x7b\x16\x5d\xee\x9f\x64\xb1\xbe\x08\x5c\x42\xc0\x96\xa3\xaf\x31\x12\x66\xaa\x36\xd7\xaa\x5b\xa6\x1c\x9a\x51\xfb\x79\xab\x97\x9a\x72\xb4\x5b\xe8\x6f\x30\x1b\x1d\x83\x62\x7b\x7f\x33\xc8\x95\xcf\x23\xbd\xb6\x8e\x0c\xc2\xab\xeb\xc9\x4d\x41\x6d\x35\x29\xfa\xab\x6b\x49\x27\x04\xb5\x3f\x7d\xda\x4a\x45\x00\xaa\xb3\x5a\x39\x9b\xb9\x74\x6a\xea\xda\x33\xd9\xd5\x8d\xe5\xe6\xb2\xa2\xcb\x8c\x5c\x76\xd2\x59\xac\xa8\xc3\x74\xc1\xa7\x9a\xb7\x15\x62\xa9\x31\x21\x31\x38\x83\xef\x1e\x45\xdc\x8f\x3d\xd9\x85\x80\x80\xea\xe8\x0e\x7b\x35\xe5\x2c\xeb\xb7\x37\x43\x24\x15\x7d\x49\x49\xa3\xa3\xaf\xe7\x6c\x6f\x5a\x59\x35\x7e\xb2\x22\x91\x8b\x46\x44\x82\x87\xd3\x38\x74\x9d\x30\x20\x58\x10\xe7\x12\x53\x09\x9e\x4e\x33\x57\x78\x5a\x1e\xc0\x17\x44\x6d\x26\x9b\x47\x88\x50\x5c\x0d\x68\xa3\x13\xc5\x6c\x75\xa4\x31\xfd\xce\xf0\xeb\xc5\x08\x57\xe2\x5c\x30\x92\x3c\xc2\xd3\x1a\xbb\xa6\xf6\x0d\x1e\xf0\x68\xb1\x22\x53\x35\x6a\x77\xa9\x5e\x55\xc7\x31\x6b\xd9\x77\x47\x59\xfb\xd3\x04\x5f\x1d\xf3\xf4\x32\x31\x3d\xcd\x0b\x50\x60\x29\x5a\xb6\x62\xb5\x06\xa4\xc5\x6a\x36\xde\x56\x43\xec\x11\xf3\xa7\x13\x68\xaa\xf9\x5a\x7b\xa9\xc4\x53\x1d\x88\xc2\xa7\x17\xc8\x05\x5b\x6e\xf5\xad\x8e\xa3\xd9\xfe\x9d\xb9\x58\xca\x88\x8e\x63\x49\x7e\xa6\xcc\xa7\x6c\xaa\x20\xbc\x58\x48\x3e\xd7\x36\x5e\x60\xf0\x8d\xce\xdc\x6c\x5a\x51\xff\x6e\xc6\x5a\x76\x43\x9c\x99\x50\x05\xd2\x1d\x4f\xc1\x42\x0b\xb5\x97\x6d\x17\x52\xcc\x5b\xca\x1b\xe9\xd8\x4d\xab\x26\x4a\x57\xa1\x29\x81\xda\x3a\x5e\x57\x3e\xf9\x10\x02\x4e\x6d\xea\x94\x3b\x37\xaf\x3a\x34\xf6\x8a\x65\x09\x96\x42\xf7\x7b\x55\x5e\x50\x72\x79\x40\x98\xa0\x72\x31\x40\xfd\x2a\x97\xfd\xeb\x3c\x17\xd4\x2e\x55\x75\xb4\xd4\x3e\xe0\x0f\x25\x99\xb7\x34\xb5\x89\xae\xaf\x5b\xcb\x1a\x10\x55\x59\xfa\x19\x9f\xc0\x30\xbf\x99\x4e\xea\x98\x15\x59\xa3\xf4\x4b\x2a\xbd\xd9\xbf\x28\xb9\xcc\x5f\xbc\x16\xca\xd4\x73\x14\x21\x79\x44\x56\x75\x14\x82\x8a\x6e\xb4\xfc\x63\xba\x03\xc2\x47\x07\xfc\x0e\x7d\xc5\x68\x38\x1e\x67\x03\x74\x41\x05\x1d\x53\xad\xac\x99\x06\x8b\x50\xce\xb4\x6b\xf5\xe2\x44\x0b\xc0\x64\xb3\xf8\x0c\x9e\xda\x94\xdb\xd7\x1e\x16\x24\x5b\x7f\xe6\x76\x48\xb7\x84\x5c\xa4\x1f\xc2\x7c\x8c\x88\xff\x91\x2c\x08\x32\x21\x4b\x1e\x40\x51\x63\x27\x52\x55\x2c\x51\x33\x89\x12\xf7\x5d\xb7\x4a\x63\xba\x03\x4b\x5c\x5b\x75\x76\x42\xaa\x35\xe4\xf7\xd4\x67\x3e\x67\xda\x94\xc1\x46\xfe\x0e\x78\x24\x36\x66\x86\x66\x2d\xea\x26\xf6\x5a\xa7\x67\x0a\x5f\x61\x2c\x66\x7a\x70\xad\x6b\x7d\xd2\xd7\x46\xc3\x1e\x84\xe8\xf8\xdb\xee\xd3\x47\xbb\x8f\xbe\x47\x30\xa0\x35\xa0\x8f\x9e\x3d\x7e\xf6\x78\xd2\x08\xf4\xf1\x93\x27\xf8\xe9\xe3\x46\xa0\x4f\x1e\x3f\x25\xcf\x70\xb3\x5a\xb5\xb9\x6f\x13\xd0\x67\x4f\xd4\xff\x8d\x40\x9f\xf6\xd5\xff\x8d\x40\xfd\x27\xbd\x5e\xaf\xd7\x08\x74\xfc\xac\xef\xf5\x9b\xf5\xf5\xfb\xef\x7b\xa4\x21\x5e\xbd\xdd\xfe\xf7\x4f\xc6\xcd\x90\x85\xfb\x8f\xbf\x6f\xd6\x81\xa7\xb8\x3f\xfe\xa1\xd9\x14\x3c\x1b\xf7\x27\x78\xb7\x19\xb9\xf4\xfb\xe3\x1f\x9a\x81\xf6\xfc\xc7\xcf\x70\xb3\x29\xe8\x3f\x79\xfa\xc4\x6b\x36\x05\xbb\x3f\x3c\xdd\x9d\x34\xc3\x6b\xef\xd1\x0f\x63\xd2\x8c\x5c\x7a\xbd\xef\x1f\x7d\xdf\xb0\xd6\xde\xd3\x5e\xc3\x55\xd0\xeb\x7d\xff\xc3\xb3\x66\x13\xbb\x4b\x9e\xf9\x8f\x1a\x4e\xc1\xf7\xdf\x93\x47\xcd\x68\xe0\xb1\x87\x27\x4f\x9a\xe1\xf5\xd1\xa3\xa7\x3f\xf4\x49\x33\xd2\xde\x7d\xf6\xac\xff\xac\x11\xe8\xe4\x07\xfc\xfd\x6e\xb3\x29\x98\x4c\x3c\xbc\xdb\x8c\x67\x91\xc9\x53\x0f\x56\xec\x7a\x4e\x38\x9e\x3c\x7a\xda\x6b\x86\xac\xc9\xe4\x91\xdf\x90\x0f\x3c\x26\x8f\x1e\xef\x36\x43\xd6\x53\xff\xb1\xf7\xb8\xd9\x2a\xf8\xde\x7f\x4a\x9e\x3e\x42\x05\x83\x7e\xb5\x69\xe4\x4c\xdb\x40\xba\x6e\x91\xd3\xde\x59\x57\x15\xd4\xd1\xd5\x4c\x62\x95\x95\x2c\x54\xa0\x44\x32\x82\x95\x0c\xe0\xca\xe1\x4f\xd7\x39\x9b\x58\xdb\x15\xe4\x4a\xa8\x71\x38\x1c\x82\x41\xa3\x35\xa1\xcd\x6a\x50\x61\x3f\xcb\x87\xce\x49\x53\x5b\x45\x01\x0e\x2a\xce\x0a\x6f\xb6\x9b\x9b\x6f\xfb\x60\x30\x71\xdf\x37\x7c\x73\x3b\x88\x0a\x3b\xff\xe7\x48\xde\x36\x88\x14\x8c\x1f\xb5\x1f\x94\x72\xb4\x38\x7e\xa2\xb2\x45\xcb\x18\xea\xa9\x29\xce\xcd\xb7\xbd\x0f\x20\xfe\x50\x76\x19\x9e\xc3\x1c\xbb\xda\xd4\x19\xbe\xb7\xb7\x5b\x26\x03\x1d\x68\x84\xc0\xf9\x2d\x25\x44\x68\x1f\x4c\x4f\x97\x75\x93\x5c\x24\x3d\x53\x24\xb5\xc5\xae\x24\xa4\x56\x33\xc2\xb4\x9d\x4e\x7a\x55\xa6\xbd\x1b\x50\x55\x4c\x3b\xf8\x02\x4b\xfc\xad\x28\xc4\x75\x97\xb5\xca\xaa\x33\xc5\xe1\x7d\xd4\x3d\x9c\xa5\x5f\x59\x75\x03\x0e\x3c\xb0\x8c\x47\x67\xee\xe5\x8c\x44\x64\x80\xe0\x56\x15\xb9\x49\x4e\x51\xe5\x50\x52\x35\x20\x7f\xfe\x47\x66\xf0\xa9\x51\x1f\x10\x04\xd4\x0a\x1e\xe8\x6e\x88\xd0\x7b\x80\x4c\xdb\x91\xcd\xf0\x59\xa9\xde\xc1\x81\x07\xdc\x66\xe0\x63\x89\x3b\x3e\x15\x73\x2a\x04\x72\x91\x88\xc7\x73\x2a\x75\x96\x5c\x84\x04\x9d\x19\x2d\x0d\x42\xae\x3e\x55\x22\x7d\x54\x51\x3f\x02\x08\x98\xb7\xd5\x77\x79\x2c\xad\x6d\x1d\x2c\x6b\x5f\x9b\x4d\x42\xa5\x90\x18\xc5\x6a\x26\x88\xb6\xc9\x8b\x88\xf4\x66\xea\x67\x1c\x86\x24\x52\xe7\x41\xb0\x8c\xf3\x38\xd3\x13\x8d\xe0\xae\xe3\xd0\x4b\x82\x12\xa6\x6a\xa6\x04\xa8\x42\xd5\x84\xd0\x96\x66\x22\x09\x90\x79\x3c\xbf\x6c\x37\xa2\xa2\x7c\xd9\xb4\x2a\xeb\xa8\x31\x25\x2f\xf4\x20\xab\xdc\xd2\x23\x7e\x4e\x1e\x0e\x51\x47\xf3\xe1\x01\xfc\x36\x96\x8c\x80\x2d\xcd\x94\x00\x5f\xdb\xdb\x2d\xc8\x86\x0f\xeb\xb4\xdb\x20\xd0\xe6\x99\x4f\x9b\x9b\xe0\xe9\xd3\x27\xc8\x07\x53\x8b\x8e\x4a\xe8\x30\x1e\xcd\x71\xe2\xfb\xdb\xe2\xd9\xd4\xa3\xe1\x6c\x62\x12\x27\x55\x4f\x80\x85\x99\xe3\xab\x0e\xf8\x72\xe8\xf4\x7b\x3d\x5d\x22\x20\x13\xd5\x33\x62\x10\xa7\xa9\x61\xdd\xf2\xd3\xc8\x30\x93\xfe\x5c\x3f\xbf\x47\xb0\xc3\x2d\xdb\x6e\x96\xac\x9a\x55\xa4\x4b\x3c\x37\x04\x99\x54\xe4\x05\xd4\x83\xbb\xef\xc2\xe5\x2f\x20\x91\x81\x23\xfd\xb6\xc2\x52\x37\x8c\x20\xcc\xb4\xd9\xae\x5a\x16\xcf\x1a\x44\x6f\x07\x9b\x73\x02\xcf\x3c\x38\xba\x07\xbc\x40\x84\x98\xa1\x9c\x66\x5b\xf5\x2d\xf7\xfe\x2f\xdd\x20\xb7\xb2\xf6\xfd\x26\xf1\x86\x1b\xa2\x4f\x71\xc0\xa7\xeb\xde\x68\xe7\xee\x5b\xbf\xfc\x35\xab\x31\xfc\x84\x00\xc6\xae\x07\xf7\xfa\x49\xc0\x40\x73\xcd\xef\xc2\xeb\x85\x68\x9e\xa4\xbf\xfb\x27\x72\xe1\x56\x6f\x80\xf6\x75\x16\x72\xf5\x1d\x42\xdf\x15\xf4\x0f\x62\x74\x67\x1b\x5e\x65\xd8\x47\x1a\xba\x3b\xc8\x3c\xaa\x8d\xe6\xd6\xe7\xe0\xc3\xe4\x46\xaa\x3b\xc7\xe7\xe4\xd0\x6f\xf5\x7b\xed\x8d\x82\x29\x57\xfa\x91\x4d\x5b\x4c\x3d\x65\xe8\xe9\x9f\xf1\x4b\xd4\xae\xf0\xeb\x0a\xfd\x51\xf2\x86\x5b\x93\x65\x8a\x3e\x48\xbd\x9c\x96\x5d\xd4\x72\xd6\x42\x33\xea\xfb\x84\x75\xc7\xe6\x66\x25\xc3\xa8\x79\xfb\xda\x98\x37\x40\x55\x15\xe6\x30\x69\x63\x3e\x15\x21\x17\x04\x22\xdc\x91\x40\x90\x3a\xb8\x19\xf5\x15\x63\x5b\x5f\x4d\x6e\xa9\x58\xf3\x8f\x55\x5e\x58\x33\x28\xac\xaa\x2e\x6b\x21\x42\x27\x55\x0c\xc7\xbc\xf3\xac\xb2\xd8\xb0\x4e\x48\x2a\xad\x39\x72\x6e\xf5\x12\x4c\x6d\x78\x8b\xa8\x17\xab\xda\xbe\x3a\x60\x9c\xf2\xf5\x19\x16\x2d\xdc\x41\xa1\xf5\x92\x0b\x08\x1c\x5a\x3b\xda\x60\xff\xce\x9c\x8d\x54\x41\x57\x56\xdf\x1c\x3f\xc8\xc4\xc7\x34\x97\x10\xcf\x11\x1a\xb4\x4a\x01\x81\x65\x57\x89\x20\x70\xbc\xda\x0b\x43\xd1\x76\x91\xaf\x50\xe9\xa0\x87\x37\x94\x23\x03\x2a\xe4\x57\x3f\xa3\xaa\x93\xd2\x4b\x4a\x02\x7f\x80\x94\x50\x30\xe5\x8a\x71\x0b\xca\xa6\x01\xd1\x67\x35\xc5\xef\xe6\xf8\xca\x44\x7a\xee\xb9\xf6\x0c\xa7\x27\x02\xee\x02\xf7\xcb\xf3\x80\x92\x22\x2b\x5f\xe1\xa4\x50\xc9\x3c\x90\x9f\x7a\xcf\x33\xa6\x6f\x03\x47\x5b\xbe\xfd\x08\x82\x89\x89\xc9\xec\xa4\x0f\x74\x5c\x14\x5e\xfd\x88\xda\x3a\x32\xfd\x3a\x7f\x0d\xb9\x55\x7f\xc2\xa7\xd3\xc4\x5d\x56\xc5\xe2\xd4\xc3\x54\xcc\x31\xcf\x31\x33\xb8\x41\xed\x0a\x87\x45\x92\xcc\x05\xbc\xc0\xcd\xfa\x70\xca\xd9\xce\x65\x36\xe2\x7e\xfe\xdc\xac\x0b\xbb\xa4\xbd\xac\x2b\x40\xca\xdb\x36\x78\x90\xaa\xea\xb9\x56\x9d\xdc\x80\x32\xf5\x66\xa4\x85\x5b\x71\x0f\x78\x45\xf9\xc6\x5a\xf7\x70\xc2\xb9\x24\x11\x3a\xbb\xe9\x10\x9b\x58\x87\x7d\xe9\x97\x71\x39\x59\xc5\x08\x20\xe8\x2e\x25\x0e\x59\x2d\x71\x24\x2b\x65\xe3\x2b\xcf\x98\x76\x34\x79\x7e\x3d\xca\xf1\x84\x48\xce\x8e\x61\xc4\xe7\xa1\x61\x57\x1c\x84\xbb\x7f\xa9\x7a\x8f\xb0\x9c\x0d\xe0\xfd\xbf\x4e\x04\x9b\x1e\x9d\x08\xd6\x53\x06\x01\xad\xf6\xf5\xd2\xfd\x98\xd8\xc7\x16\x6d\xcb\x22\x82\x7d\x61\x97\xa3\x76\xd7\x93\x20\xce\xd3\x2f\x93\xf5\xe3\xef\x84\x49\xfc\x1f\x0b\x8d\xda\xa7\xbd\xb3\x44\xd3\x76\xc8\x7c\x72\x55\xdc\xa3\xd4\x9c\xa1\xf6\xe9\x56\x46\x5e\xd7\xa3\x41\xed\xe7\xa4\xd3\x1f\x90\xb3\x07\xe9\x1c\xa7\x9d\x84\x27\xdf\x19\xd5\x5f\x62\x17\x7a\x33\x11\x1f\xae\xc1\xbf\xe2\x16\xb5\x99\x7a\x03\x56\xca\x93\x5e\xaf\x91\x8c\x60\xae\xba\xc1\xed\xce\x21\x33\xaa\x21\x55\x83\xab\x16\x01\x5c\x6b\x3b\xfd\x5e\x6f\x60\x34\x0a\x1a\x13\xea\x60\x8c\xe0\xde\xda\xd9\x2d\xe5\xed\x26\x79\x8f\x4a\x79\x8f\x92\xbc\xc7\xa5\xbc\xc7\x49\xde\x93\x52\xde\x93\x24\xef\x69\x29\xef\x69\x92\xf7\xac\x94\xf7\xac\xd7\x43\xcb\x72\xd7\x6f\x24\xac\x98\x47\x09\x7f\x29\xbf\xd6\x2a\xbf\xfe\xbc\x1a\xaf\xbb\xd2\x76\xfd\xa5\xcf\xba\x27\xfa\x2c\xbb\xc8\x7d\x7a\x41\xfd\xaf\xc9\xf2\x57\x48\x7e\xb6\x6f\x37\x11\xfa\x92\xf1\x45\x3c\xd4\x4f\x2d\xbf\x8d\x3d\x2d\xe1\x3a\x09\xb7\xc1\x51\x04\xe6\xac\x79\xa6\x71\xd3\x45\x5e\xb2\xa6\x56\xac\xa7\xbb\xa7\xda\x18\xcd\x71\x10\x1c\xf0\xcb\x54\xed\x6d\x71\x57\xc1\x06\xec\xfa\xb5\x30\x39\x2e\xf0\x1f\xb7\xe0\x56\x06\xcb\xcb\x13\x24\xd8\xd1\x7d\x35\x62\x8c\x78\x2c\x49\x54\x77\x4d\x5d\xab\xb1\xf1\xa1\xd7\xeb\xa9\x37\x21\x5a\xbb\x67\xaa\x51\x4b\x1a\xc2\xb9\x26\x6b\xd8\x50\x47\xbd\x99\xf3\x6f\x49\x97\xa0\xaa\xcb\xec\x54\xe9\x46\x38\x4c\x29\x4f\x6f\x05\xe9\xf7\x43\xe4\xa0\xb6\xbb\xd5\xb3\x07\x7e\x5b\xbd\xd9\x32\x40\x4b\x66\xd3\x14\xa4\xae\xce\xd4\xa2\x0b\x93\xcc\xce\xda\x80\x82\x9e\x57\xe4\x05\x94\x9d\x9f\x70\x6b\xdf\xaa\xe7\xa0\x0b\x01\xc0\xe1\xdd\xc2\x09\x6f\xe5\xdf\xd4\x9d\xf0\xc4\xed\x46\x4a\x75\x9f\xc3\xe5\xbf\xb2\x3d\x7a\x43\xaa\x2b\xef\x00\xd6\x4e\xbd\x31\xdd\x25\xec\xf3\x76\x09\xef\x56\x88\x4d\x1b\xa8\xa6\xea\x9c\x2f\x48\x59\x06\xec\x16\x49\xea\x7e\xec\xa7\x70\x33\x6b\x7b\x54\x4d\x26\x11\xa6\x82\xf8\x83\x0c\x60\x47\x27\x21\x17\x8d\x79\xe4\x93\xa8\x90\x6b\x13\x91\x8b\xb4\xa0\x9f\xcd\xd4\xc2\xac\x8b\x7c\x1c\x9d\xe7\x32\x54\x02\x3a\x73\x4d\x6b\xe0\xa6\xd7\xd4\xad\x4e\x07\x0a\x7a\xab\x9f\x39\x38\x24\xd4\xb9\xd9\x0c\x08\x12\xed\x4c\x78\x34\xe5\x32\x7d\x4a\x75\x1f\x7c\x3c\xc1\xc3\x30\x58\x6b\x78\x71\x32\xc3\xec\x1c\x4e\x42\x02\x9b\x57\x7a\x5b\x7d\x17\x20\x40\xc9\x5e\xf3\x66\x2f\xf3\x2a\x10\xc0\xea\x1f\x13\xc2\x3b\xed\xb4\x3e\xe4\xea\x8f\x43\x5d\x2e\xab\x96\xd1\xa8\xaa\x50\x46\x9b\xc6\x1e\xd0\x49\xcb\x30\xa5\xa2\x97\x78\x27\x63\x70\x34\xa3\xa2\xd0\x46\x95\x1f\xa5\xbf\x15\x5e\xc7\x3d\x28\xd6\x90\xe0\x26\xeb\x3c\x29\x97\xad\x9f\xab\x55\xe6\x16\x9a\xef\x67\xb5\x3e\x7a\x98\xa0\x04\xd6\x66\x5e\xe0\x76\x69\x55\xf3\xbd\x9a\x06\xc0\xc1\xdc\xb2\xdd\xd5\xde\x87\xeb\xaa\xb1\xdd\xec\x95\xfd\xad\xad\xd5\x19\x2a\x0a\xb6\xa4\xdb\x89\x88\x20\xf2\x5e\x10\xb0\xed\x12\x68\x11\xcd\x6f\x73\x17\xac\x92\xe6\xb1\x90\x6f\xb0\x39\xc9\xdb\xfc\x55\xd4\x9c\x79\xae\x6a\x94\xb0\x4d\xa0\xed\xed\xf3\xfa\xb7\xb1\xb0\x06\x72\x1d\x41\x6e\xf2\x9d\xae\x84\x19\x16\xa6\xce\xfa\x5a\xb2\xfd\xcb\x54\x62\xca\x55\xac\x2a\x98\xb5\x4a\x3f\x6b\xc9\x98\x59\x45\x72\x32\xb8\xbc\x8b\xee\x74\xe5\x3d\x6f\x15\x69\xad\x38\xa0\xca\x65\xc7\xc8\xe5\x51\xe9\x59\x69\x7b\x90\xaf\x9d\xad\xa8\xbd\x30\xd2\xca\x46\x4a\x83\xa8\x68\xe8\xf7\x18\x07\x2d\xe2\xb2\xf6\xf3\xc2\x7b\x50\x4d\xe6\x6b\x96\x67\x79\xac\x15\x5c\xa0\xb6\xcb\xfd\xf6\xb2\x3d\x28\x8d\xb0\xf4\x2a\xb7\x72\xe5\x17\x88\x44\x03\xc1\x10\x8a\x90\xc9\x32\x00\x98\x1b\xad\x7d\xf5\x4f\x27\x8c\xb8\xf6\x90\xd4\xc8\xdd\x3f\x3c\xa9\x6b\x6a\x61\xf2\x45\xa3\x69\xae\x33\xfb\xbd\x5f\xaf\xf0\xf3\x8f\xbc\x57\xde\xd5\x66\x1f\x83\xd7\x2d\xd7\x4f\x9f\xb6\x78\xe9\x41\x39\x98\xe1\xae\x61\x5e\x19\xc6\xa5\xe9\x2d\xf9\x4e\x5f\xf9\xbb\xd7\x53\xe0\x31\x85\xb6\x8f\xd4\x52\x62\xb2\x55\xe6\x2e\xe6\xa5\x77\xfb\xb9\xf1\xaf\x5c\x58\xff\xe5\x02\x19\x8f\x02\xed\xe7\x2c\x0e\x82\x81\x9e\xfb\xe5\x32\xcb\x36\x57\x8f\xc3\xab\x00\x6a\xde\xf5\xca\xd2\x6a\x04\x54\x74\x28\x03\x6f\x7e\x48\x49\x88\x8d\xa3\x13\xd8\x11\x0d\x73\xdb\x99\x69\xc6\xb8\x56\x46\xcb\x65\xc9\x11\x42\x1d\x23\xef\xae\xe1\xe8\xdd\x6c\xd5\x55\xd2\x54\x91\xa2\x32\x14\x5e\xe7\x37\xbb\xc2\x33\xc2\xfa\x7a\xd3\x05\x50\x57\x6d\xd9\x53\xc2\xfa\x5a\xad\x33\x84\x9a\x2a\x8b\xe2\x5e\xa6\x3e\x3b\xd7\xa4\x6d\xbd\x8c\xa7\xfb\x50\x9d\x7c\x59\x4d\x4b\xd6\x5b\x78\x69\x43\x2a\x80\xaf\x1a\x57\xb6\x17\xb6\x67\xf5\xfd\x28\xae\xcd\xba\x0e\x94\x5d\x39\x40\x18\x87\xf2\x6e\x78\x07\x0d\x15\xfd\x10\xa5\x20\x19\xbb\x2a\xe3\x85\x81\x83\x07\x78\x1c\x04\x8b\xd5\xfb\x6e\x86\xf7\x20\x54\xbf\xf3\xe6\x69\x5e\x8b\xcb\x1b\xfa\x1c\xbe\xea\x48\xb0\x47\x29\x6b\x65\x94\x14\x3e\x26\x91\xc9\xaf\x2f\x93\xe6\x7c\xbe\xa0\x5c\x5b\xc0\x0c\x07\xb9\xd7\x84\xc5\x73\x12\x41\xac\xe3\xad\x9e\x3b\x25\x72\x50\xa1\x78\xb5\xc3\x07\x97\xdd\xcd\xc6\xaf\xaf\x64\x37\x44\x80\x2e\xf4\xe7\xc0\xc0\x66\x43\xcf\x8c\xd9\xcd\x56\xcb\x26\x74\xba\x43\xd8\x05\x8d\x38\x9b\x97\x31\x72\x3b\x56\xb7\xda\xb0\x81\x0f\x13\xe1\xe7\x34\xd7\x5f\x74\xf6\xe9\xd3\xf5\xd2\xc8\x4d\xa9\x99\x49\x72\xc9\x03\x5e\x6d\x13\x71\x01\x1e\x25\x7d\xfa\x94\x22\xd8\xfc\x78\x37\x99\x68\x0f\x48\x09\xa4\x4d\xf9\xf4\x09\xbd\x9b\x4c\x06\x03\x3e\x99\xa4\xd0\xac\x08\xcc\x12\x58\x36\x18\xa8\xe5\x29\x66\xfc\x12\xd2\x44\x0a\x35\x4a\xd2\x3e\x7d\xb2\x06\xbe\x69\x26\xfd\x43\x75\x6c\x4e\x7c\x1a\xcf\x51\x93\x65\x6d\x6e\x52\xd2\x5f\x77\xaf\x19\xbb\x4e\xda\x32\x12\x89\xa9\xd8\x62\xfb\x3d\x13\xe4\xf7\x98\x30\x8f\xf8\x83\x1f\xd4\x7f\xee\x28\xc4\x1e\x44\xaf\x1b\x5c\x1f\xc5\xe3\x80\x7a\x83\xbe\x7b\x14\xd1\x0b\x2c\xc9\x60\xd7\x3d\x8a\xb8\xd4\x1a\xd2\x47\x4b\x77\x2f\x96\xb3\xa3\x88\xc3\xcd\xdb\xe0\xda\x06\x6e\x18\x24\x43\x46\xee\x3f\xc9\xc2\x0b\x38\x3e\x1f\xa0\x73\xf3\x0b\xb9\xaf\x0f\xf6\x8e\x06\x28\xf0\x71\x88\xdc\xfd\xbd\xd1\x00\x79\x58\x20\x77\x44\xa2\x0b\x12\xa9\x76\xb3\xf9\x69\xea\xde\xc1\x00\x61\x1f\xb9\x2f\x98\x17\x2d\xc0\x34\x47\xa5\xbe\xe5\x8c\x0c\x10\xe3\x8c\x14\x73\x46\x12\x47\xf2\xe4\xf5\x68\x80\x84\xfa\x25\x03\x81\x96\x2e\x74\x91\x30\xa9\xad\x68\xf5\x20\x8f\x09\xf6\x07\x7d\xf7\x25\x21\x3e\x78\x50\xdc\x75\xf7\x39\x33\xe6\x00\x83\x47\xee\x5e\x18\x46\xfc\x82\x0c\x1e\xdb\x5f\xfe\xe0\x89\x7b\x4c\x7e\xd3\x48\x78\xea\x02\x8e\xc4\x6c\xf0\x6c\xe9\xbe\x17\x24\x52\x35\x5f\x50\xb9\xd0\x75\xef\x47\x04\x42\x71\xf5\x5d\x68\x65\xd7\x7d\xe1\x53\xc0\x9d\x7b\x00\xc1\x5d\x7d\x55\x6d\xe4\xcd\xa8\xae\x36\x69\xe1\xa9\x7b\x4c\x2e\x48\xa4\x00\x9e\xd9\x16\x88\x7f\x62\x3c\x69\x0e\xbe\x4f\xd3\x7e\x0e\xb8\x77\x3e\xf8\x21\xed\x7e\xbf\x97\xf6\xae\xdf\x77\x47\x84\xc9\x11\xf1\xe2\x88\xbc\xa6\xec\x7c\xd0\xdf\x75\x0f\x22\x3c\x91\x83\xfe\x23\xf7\x5f\x24\x12\x94\x33\x05\xf7\xd8\x1d\x81\xc3\x50\xf5\xfb\x49\x5a\xf9\xa0\xff\x74\x69\x67\x3c\xc1\x17\xa0\xbc\xe7\xbe\x56\xed\xaa\x71\x5d\x50\x72\x39\xd8\x75\x55\xb2\x75\x49\x06\x16\x4e\xc2\x09\x49\x34\xa7\x52\x12\xdf\xb9\xa4\x72\xc6\x63\xe9\x60\x18\x20\x0e\x10\x14\x37\xe0\xea\x27\xf1\x5d\xc7\x33\xc5\x18\x97\x69\x51\x64\x5a\x28\x54\x1d\x91\xdf\x63\x1a\x91\xa4\x42\xc7\x04\xd3\x0d\x81\x62\xf5\x86\xbb\x34\xf8\xc4\x41\xae\xe3\x7b\x6c\x31\xe6\xfe\x62\xd0\x77\xdf\xe0\xdf\x78\x44\xe5\x62\xb0\xeb\xbe\x67\x98\xd1\x39\x8f\x85\x9a\x71\x0d\x60\x5a\xb4\x75\xd8\x26\x7d\x67\x12\xf1\xb9\x83\xd9\xc2\x34\x4e\x22\x94\xd4\x64\xca\xd8\xcf\xb4\x7b\x85\xc2\xa6\xa0\x40\x69\xc3\xa6\x68\xf2\x5d\x5b\x36\x08\x32\xe5\x97\xae\xc6\xc8\x48\x2a\xba\xb8\x4e\x67\xae\xe7\x1e\x11\xd0\x6b\x0f\xfa\xee\x7b\xe6\x93\x28\x99\xa8\x84\x3a\x1e\x59\x90\xb7\xe4\x72\xf0\x78\xe9\x1e\xe1\xa9\x59\xf7\x27\x78\x0c\x41\x92\xd5\xfa\xd3\xf6\x6d\x49\xdc\xb9\xa5\xfb\xef\x19\xd7\x50\x8a\xdc\x07\x48\x07\x36\x79\x15\xf1\x38\x1c\xa0\x88\x83\xeb\xe2\x17\x17\x24\x5a\x70\x46\x14\xc4\xa1\x3f\x40\x3d\x94\x4b\xd2\x37\x38\x36\x05\xb9\xaf\xe9\x84\x78\x0b\x2f\x20\x83\x6b\x4d\x9c\x3d\xf7\x35\xbd\x20\x83\x7e\xba\x36\x0c\xd9\x1a\x24\xc1\x6f\x04\x40\x96\x86\xe8\x05\x41\x09\xb8\x9d\x3a\xf3\x89\x96\x96\xd6\xf5\x7a\x7c\xc3\x7d\xd5\x7d\x76\x91\x2e\x00\x77\x3f\x80\x1f\xbb\xae\x5a\x26\x86\xbb\x6d\xca\x24\x70\x70\xac\x78\xa9\x90\x4d\x98\xc5\x48\xf2\x88\xa4\xcc\xf3\xcd\x62\xf4\xdf\xaf\x07\x08\xfe\x20\xf7\x88\x0b\x39\x8d\x08\x24\xa5\xbf\x91\x7b\x44\x22\x8f\x33\x0c\xde\x9a\xd5\x0f\x45\x79\x11\xc5\x07\x3f\x83\x9f\x68\xf5\x03\xb9\xa3\xff\x7e\xad\xb9\x26\xf8\x39\xd6\x3f\x11\x2c\x63\x3f\xf6\xe4\xe0\x7a\x9f\xcf\xe7\x31\xa3\x72\x61\x3c\xa1\x81\x0b\x41\x9d\xa2\x78\x68\xc1\x4f\xda\x00\xa5\x49\xc8\x3d\xc2\xde\x39\x9e\x92\x17\x42\x1d\x0c\x28\x0e\xc4\x00\xa5\xbf\x93\xec\x3d\xff\x02\xc3\x86\x82\xec\xaf\x24\xeb\x28\x22\x73\x1a\xcf\x07\xc8\xfc\x48\x32\x0e\xb0\xc4\xfb\xe0\x2d\x77\x80\xd4\x6f\x47\x7f\x20\xf7\x28\xc0\x6c\x3f\xe0\xb1\x3f\x40\xf0\x47\xa7\x8c\x48\x30\xf9\x85\x0b\x39\x40\xea\x57\x67\xc6\x85\x54\xc4\x8a\xa5\xe8\x0d\x7a\xfa\x47\x5f\xb1\x42\xf8\xb5\x3b\xd8\x7d\xa2\x7f\x3d\x1a\x3c\x31\x69\x8f\x07\xfd\x9e\xf9\xf9\x64\xb0\x6b\x53\x9f\xc2\x1e\xb8\x74\xc1\xc6\xea\x7a\xcf\xf7\x35\x8d\xc3\x95\x76\x07\xfb\x7e\x67\xf7\x19\x72\xf7\x82\xc0\x26\xcd\x09\x8b\x3b\xdf\x23\x77\x8f\x31\x1e\x33\x8f\xd8\x74\x1d\x75\xd2\xf0\x21\x4b\x96\x36\x13\x5e\x86\x81\x15\xc5\xfb\x30\xa9\x5b\x7d\x76\xe2\xb0\xb3\x6b\xb2\x0e\xf8\x25\xcb\x67\x82\xe5\x84\xcd\x7e\x4d\x26\x32\x9f\x1d\x90\x89\x4c\xb2\x8f\xe1\xf2\x28\x97\x0f\x0f\x65\x13\x00\xb0\xdf\x48\x9b\x17\xea\xb3\x13\x87\xd9\xdc\x6c\x0f\x74\xbe\xb6\x8d\x49\x21\xb2\x9d\xd0\x10\x60\x42\x95\x81\xc8\xf5\x43\x83\x98\x07\xbb\x7b\x52\x62\x6f\xa6\xf6\xe2\xa4\x9b\x49\x0a\x72\x7f\xc6\xd1\xfe\x0c\x47\x49\x9e\xa7\x3e\x3a\x63\x1c\x75\x1e\x3d\x42\x2e\xec\x79\x22\x37\x07\x4f\x91\xfb\x33\xe7\xe7\x73\x1c\x9d\x8f\x78\x40\xfd\x14\xd7\x3a\x31\xcd\xde\xf3\x4b\x99\x6a\x66\x53\x00\xbd\x33\x97\x60\x74\x34\x76\xe4\xfe\x0c\xd6\x6e\x7b\x86\x2d\x1a\x20\xfd\x9c\x78\x17\xb9\xfb\xe6\xb1\x84\xcd\x99\x04\x78\x8a\x14\x8f\x4e\x86\x32\x56\x83\x91\x2a\x4d\x3f\x12\x4c\xb0\x33\xc3\xe0\x5b\xd5\x93\x98\x81\xb8\x6f\x01\xe0\x2f\x49\x3a\x6d\x9e\x17\x22\x77\x9f\x87\x49\x33\x1e\x0f\x17\xc8\xdd\x8f\xb8\x10\x29\x9c\xf6\xac\x84\x5c\xb5\x9c\xc6\x58\x24\x43\xf2\xcd\x37\x72\xd5\x14\x07\x1c\x27\x75\xfb\xe6\x1b\xb9\x05\x24\x50\x86\x40\x74\xb1\x09\x21\x81\xd1\xbe\xd0\x57\x79\x3a\xcd\xa8\x0a\x5f\x5c\x85\x98\x25\x35\x12\x16\xe0\x68\x4a\x20\x99\xa7\xf3\x09\x16\x95\xda\xeb\xb5\xcd\xda\xb5\x79\x36\xf9\x25\x0d\x64\xba\xf8\x04\x8f\x24\x5c\xa0\xaa\xbd\x26\x9d\xdf\x69\x44\xfd\x0e\x84\x11\x9b\x60\x8f\x20\xf7\x15\x3f\xe1\x09\x55\xab\xe1\x77\x02\xbc\x20\x11\x90\xf6\x2f\x98\xf9\x62\x86\xcf\x93\x61\xcd\x6c\x02\x72\xc1\xce\xba\xb8\xaa\x0f\x99\x24\x53\x1d\x67\x2c\x41\xeb\x94\xf0\x39\x91\xd1\x02\xc1\x46\x61\x53\xb5\x7b\xf0\xd7\x54\xc8\x9f\xe3\x20\x20\x32\x4d\x17\xb2\x33\x86\x24\x85\x2f\x2d\xe9\x24\x99\x5c\x4d\xe3\x1b\x1e\x91\x5f\x78\x44\xff\xe0\x4c\xe2\x3c\x63\x79\x82\xdc\xb7\x5c\xee\x05\x01\xbf\x4c\x4b\x8d\x31\x43\xee\xd1\xc1\xcb\x64\x2a\xfc\x09\x52\xf2\x79\xba\x90\xc0\x21\x3c\x72\x8f\xe2\x20\x9d\xf3\x50\x7d\x28\xd6\x19\x27\x23\x21\x9a\xec\x8f\x48\x24\x52\x4a\xd6\xcf\x58\x3a\xbd\xbe\xca\xe0\x61\x90\x54\x30\x8f\x03\x49\xc3\x80\x74\xfa\x3f\xa8\xe6\xb4\x30\x91\x34\x08\x9f\x48\x0b\xb9\xd9\x11\x3c\x53\x69\x6a\x1a\xb2\x7c\x54\xaf\xa4\xce\xee\xf7\xc8\x48\x9d\x49\x11\x3c\x65\x26\x58\xef\x88\xa4\x34\x24\x08\xf3\x55\x0a\x38\xd5\x14\x69\xaa\xfe\xee\x4c\x09\x56\x05\x66\x38\x4a\xd9\x2f\x91\x97\x3c\x3a\xef\x78\x9c\x31\x6b\xfb\x3e\xca\x90\x1f\x0e\xc2\x19\xee\xc0\xa5\x3b\x72\x47\x61\x90\x12\xb6\x50\x1f\x9d\x47\xcf\x90\x7b\x82\xa7\x85\x0e\x9f\x93\x05\x72\x4f\xa8\x77\x9e\x72\x25\x58\x88\x2a\x69\x04\x78\xcb\x65\x18\x5c\xea\xfc\x03\x1e\x8f\x8b\xf9\x3e\xa4\xa9\xfc\x39\xf9\x19\xa7\xd5\x4a\x3a\x57\xa9\x11\x05\x46\x50\xc9\xa9\xa5\xc9\x04\xba\xce\x41\x96\xb9\x76\x02\xab\xd9\x77\x0e\xba\xcc\xc1\x13\x68\xcd\xca\x73\xd0\x15\xdc\x3c\x01\x37\x6c\xfd\x3d\xc3\xf9\xcd\x2e\x65\x29\xef\x59\x90\x23\xff\xd8\x7c\x23\x7d\x6e\x12\x82\x4e\x59\x96\x49\x02\x6e\xff\xcd\xa3\x20\x5d\xec\x01\x1f\x2b\xf1\xd2\x3e\xb8\x1b\x5c\xab\x43\xde\x40\x3f\xb8\x83\x07\x8c\x1d\x01\x6e\x38\x46\x71\x68\xb8\x4d\x26\x47\xa7\x21\xf7\x0d\x11\x02\x4f\x49\x2e\x73\xae\xd3\x90\x12\xdb\x44\x2e\x07\x87\xa1\x50\x7b\xc3\x55\x2e\x15\xb6\xf0\x57\x74\x92\x6f\x62\x0a\xc1\x23\x0e\x88\x19\x49\x9a\xe1\x43\x92\xda\x3b\x82\x71\xbe\x9e\x38\x18\xab\x1e\xc9\x88\x7a\xa2\xd0\x23\x48\x43\xee\x11\x25\x76\x2b\x4c\x73\x43\x4a\x60\x4b\xcc\xed\x94\x99\x6a\xd5\x24\x40\xf6\x4b\xca\xb0\x96\x4b\xd2\xdc\x89\x4e\x43\xee\x6b\x9c\xef\x4d\xa0\x24\xfe\x7d\xf0\x23\x94\x49\xf5\xb8\x4f\x90\xfb\x0b\x09\xc2\x5c\xf2\x8c\x04\xa1\x12\x3f\x59\x0c\x62\x60\xb6\xeb\x3a\x0d\xb9\x2f\x03\x7e\x99\x6f\x39\xe0\x97\xc8\x7d\x17\xe7\x7b\xcb\x63\xa9\x78\x6d\x2e\x4d\x6d\x38\x47\x38\x92\x8c\xe4\xe7\x37\xd4\x69\xc8\x7d\x17\x4d\xf3\x95\x44\x53\xe4\xfe\xc2\xe7\xf9\xbe\xcf\xf8\x1c\x98\xfb\x84\x32\x2a\x49\xa1\x05\x9d\x88\xdc\x13\xee\xf3\x5c\x96\xe4\x3e\x57\x4c\x8e\x7b\xc4\x8f\xa3\x7c\xb1\xd0\xa6\xc2\x38\xa6\x1c\x62\x2b\xe5\x07\x03\x89\xaa\x55\x8f\xcf\x8b\xd9\xd4\x24\xaa\x95\x85\x2f\xd4\x21\x25\xdb\x2e\x24\x21\xf7\xdf\x94\x15\xc7\x7d\x09\x49\xc8\x3d\xe6\xd8\x9f\xe3\xfc\x4c\x44\x3a\x4d\x6d\x25\x8c\x2c\xf2\x53\xa1\x52\xe0\x14\x17\xc3\x41\x37\xb7\x20\x4c\x22\x72\x4f\x62\x96\x1f\xa4\x8c\xd5\xb1\xec\x55\x4c\x0b\xa4\x30\x8d\x21\xb6\xd4\x68\x4e\x83\x7c\x86\x98\xc3\x15\xed\xb1\x5a\xd0\xb2\xd0\x39\x95\xa4\x99\x5c\xbe\x0d\xe0\x72\xfb\x71\x7e\x2c\x02\x07\x44\xc0\xa9\xe6\x9c\xc8\x22\xf2\xe6\x36\x35\x27\x70\x67\xd6\xaa\x49\x54\x6b\xf0\x82\x17\x16\xb2\x0f\x49\x29\x47\xc9\xe0\x56\xa5\xe8\x63\x45\x7e\xaa\x03\xb5\xd5\x26\x57\xba\xa2\xb0\x2a\x6c\x72\x66\xa7\xcc\x94\x85\x24\x23\xc4\x29\x29\x20\x5f\xd8\xa6\xaa\xf3\x3b\x98\x23\x5e\x1f\x2b\xc6\x08\x96\x64\xaf\x22\x42\xd8\x00\x4d\x75\xec\x95\x5f\x49\x00\xab\x68\x01\x7f\x55\x2e\x5e\x40\x64\xa4\x05\x5a\xba\xfa\x9c\x7b\x0d\x22\xed\x9e\xda\xcc\xf7\xb4\xaf\x6a\x32\x40\xf6\x17\x4a\x14\x58\x46\x93\xa1\x52\x32\xa1\x34\x07\x28\xfb\xa5\x04\x58\xe6\x81\xa2\xc5\xf8\x3f\x00\x97\xc7\x70\xf4\x52\xf2\x83\x96\x39\xf7\x41\xda\xb4\x22\xe2\x81\x11\x8c\x0f\xe2\x30\x30\x55\x26\x3f\xad\xd4\xa8\xfe\x4d\x65\x40\xfd\x17\x24\x3c\x32\x40\x2f\x81\x74\x0e\xe7\x3a\x4f\xff\x55\xab\x47\x10\xf8\x86\xbf\xea\xfb\x02\x56\xb0\xfe\x8b\xdc\xff\xe2\x94\x0d\x90\xfa\x17\xb9\xaf\x09\x56\xe3\x83\x3f\x4a\xc8\x9a\xaa\x2c\xf8\xa3\xd6\x84\xca\x7a\x03\xe3\x7e\x0b\x31\x78\xd4\xbf\xc8\x7d\xf7\x4f\xed\xcb\x21\x11\x65\x8e\xac\x10\x63\x64\xa9\x23\x2b\x45\xe9\x13\x3b\x32\x3f\x90\x39\xce\x0f\x90\xfe\x6b\x05\x1c\xf5\xad\xc5\xed\x63\x12\x06\x0b\xf5\x19\x06\x0b\xf5\x25\x08\x00\x83\xf5\xd2\x31\x01\x77\xb2\xf0\xad\x7e\xa8\x14\xad\x31\x40\xe6\x07\x72\x47\x30\x98\x11\x8c\xc5\xca\x47\xfa\xaf\x15\x8b\x46\x5a\x20\xd2\x12\x0f\xfc\x41\xee\x88\x4e\x99\xe2\xa1\xea\xaf\x73\x98\xc8\x3b\x23\x40\x26\xa8\x74\x07\x08\xfe\x98\x2f\x61\x3e\xb5\x0a\x0a\x36\x5f\x45\x81\xe9\x6f\xe4\x6a\xcf\x12\x03\xa4\xff\xaa\x6f\x7d\x56\x78\x6f\x04\x74\xa3\x53\x19\x20\xf3\x03\x2d\x97\xed\xe5\x3a\x0b\x45\x7d\x11\x30\x25\x42\xc6\x11\x11\x3b\x11\xf1\xf8\x94\xd1\x3f\x48\x24\x76\xc0\x55\x49\xf9\x92\xa3\x16\xf6\xae\xec\xbe\x92\x2b\x89\x75\xf6\x2a\xab\xfa\x47\x59\xf5\x6d\xd5\x0a\xe8\x7b\x3d\x9e\x08\x82\x98\x35\x1d\x0f\x40\xdf\xe7\xf1\x44\xbc\xe8\x7a\x79\xe5\x80\x0c\xf8\x7d\x1e\x91\xb8\xa4\x61\xf3\x01\x69\xe8\xfb\x3c\x1e\x89\xc3\xc6\xa3\x51\xb0\xdf\xca\xd5\xee\x8a\x61\x5c\x90\x48\x6d\xc3\x41\x67\x13\x4e\x98\x2b\xf4\x67\x42\xc2\x66\x04\x5d\x28\xf6\xcd\x20\xe2\x82\x30\xf9\xd1\xa7\x22\xc4\xd2\x9b\x91\x68\xe5\x78\xcb\xc0\x5f\xed\x6a\x5f\xdf\x25\x6b\x59\xc1\x86\x00\x9b\x93\x68\x4a\xc0\xde\x46\x0c\x79\xeb\x7a\xe9\x5e\x43\xff\xdf\x0b\xb2\x8f\x43\x35\x82\xc1\x56\xdf\xd5\x4a\xc9\x93\x08\x7b\xe7\x4a\xbc\xdf\xea\xbb\xb1\x20\x2f\xb1\x90\x47\x58\xce\xc4\x60\xab\xbf\x6c\x3f\x50\xc5\x45\x1a\x84\xa5\x6b\x11\xd0\x06\xf6\x42\x2b\x6c\x06\xe2\xb4\x0d\xd1\x2d\xb4\x5a\x6c\x52\x74\xf3\x09\xf9\x0e\x88\x6e\xf6\x33\x77\xa9\x4f\xab\x26\x50\x1d\x83\x15\xfd\x61\xe6\x57\x5a\x68\x44\xb1\x9c\x75\x2c\x50\x16\xf8\x3e\x52\x68\x7d\x9d\x30\xbc\x86\xf5\x61\xe6\xd7\x50\x7b\x32\xfe\x30\xec\x98\xcb\xb7\x1a\x5f\x2b\x15\xe4\x6c\x51\xea\x05\xb4\x93\xa9\xc0\x98\xf8\x46\x64\x4a\xae\x8a\xbb\x80\xa2\x79\xfb\xed\x70\xeb\x5e\x96\x0f\x13\x63\xc8\x6e\x40\xd8\x54\xce\x7e\xea\x6f\x6f\x6b\x02\xdf\x1a\xa6\x99\xa7\xfd\xb3\xe7\xd9\x8f\xc1\xf5\xd2\xd0\x7f\xd6\x6c\x65\xef\xe8\xa8\x6b\xba\x02\xb4\x4f\x87\xdc\x7e\xbf\x63\xc1\xe2\xd3\x27\xde\x9d\x51\x9f\x8c\x66\xd8\xc5\x43\xde\x15\x33\x9c\x4d\x36\xa2\xb3\x1b\x0d\x59\x1c\x04\xd6\x7c\x96\x6e\x6f\xb7\x14\x28\xbf\x7c\x61\x02\x36\x6f\x6f\xb7\xa2\xa1\xe8\xce\xe1\xad\x05\xb3\x0d\xd8\xdc\x63\x32\x7d\x71\x15\xb6\xdb\x6e\xf4\xe9\x53\x15\x9c\xcd\x6f\xbb\xb8\x50\x91\x98\xe1\xb4\xf0\xf3\xe8\xb4\x77\x36\x10\xcb\x1b\xb0\x09\x1c\x86\x66\x28\x43\xbe\xda\x44\xfa\x17\xa0\x81\xae\x26\x85\x16\x5f\x6b\x35\x63\x69\x46\xfb\xe7\xeb\xe0\xa0\xd2\x0a\xce\xe3\xcc\x8b\xa3\x88\x30\x6f\x51\x55\xe2\x3e\x2e\xb6\x55\x83\xf5\x8d\x9d\xca\xce\x84\x06\x64\xcd\x33\xe0\x84\xc0\x33\xfe\x93\x51\xcc\xce\x19\xbf\x64\xdd\x90\x4d\xd1\x03\xe3\xce\x04\xbc\x7d\x4b\xfe\x9a\x5f\x92\x68\x1f\x0b\xd2\xb2\x11\x3a\x9e\xfd\x81\x06\xe6\x07\x0d\xcd\xcf\x3f\x68\x78\x95\xfe\x34\xbf\x2e\x71\x64\x7e\x45\xc9\x2f\x99\xfc\x9a\x02\xa0\x1c\xaa\x02\xba\xe1\x4c\x28\x0f\x7c\x41\x0d\xd8\x9c\x5f\xd8\x5f\xe1\x63\x80\xc7\x17\xb4\x04\x0f\x11\x2f\x55\xa6\xfa\x51\xca\xf5\x84\x80\x4c\x4f\x88\x52\xde\x18\x4b\x53\xbf\x98\x99\x1f\xa1\x48\x7e\xf4\xcd\x2f\xcf\x26\x5d\x8c\x6d\xde\xcc\x0e\x13\x02\x40\x9b\x31\x71\x9b\x66\xe1\xa3\x04\x7e\x91\x64\x71\x66\x6b\x05\xb6\x65\x3e\xae\xcc\x08\x3c\xee\x93\x72\x2f\xa9\x2d\x43\xae\x88\xf9\xe5\x07\xba\xc0\x98\xb2\x32\xfc\x3c\xe9\x5d\x38\x4d\x7e\x11\xfb\x73\x4a\x27\x76\x3e\xe8\xc4\xfe\x14\x17\x36\x5b\xd5\x66\x31\xe0\x9b\x5f\xd8\x4e\x88\x38\x27\xd2\x9b\x41\xcb\x10\x7c\xb6\xd4\xf6\x55\x60\x07\x7f\x15\x88\xab\x04\x81\x17\x50\xe4\x2a\x28\x4f\x41\xc0\x6d\x73\xf2\xca\x4e\xc6\xdc\xb6\x9b\xc4\xaf\x56\xa5\xe5\x95\x2c\x95\x9e\x87\x8f\x12\x7a\xd3\x6d\xcc\xc3\x47\x25\xa8\xd0\x9f\x40\x5e\xe8\x4f\xca\x79\xa1\x6d\x35\x0c\xe5\x95\x06\x0b\xcb\x0d\x5d\x24\xb8\xb8\x10\xbe\x06\xbb\x10\x7e\x09\xcc\xe7\x9e\x9d\x20\xee\x69\x30\x9f\x7b\x00\x66\xdc\xe8\x38\x8c\x5c\x1a\x9b\xe5\x11\x3c\x35\xe9\x2a\xaa\x1d\xe1\x09\x69\xc9\xf6\x4d\xd8\xa9\x5d\xff\x2f\x69\x40\x0e\x3d\xce\x86\x72\xf5\x23\xb5\x3c\x53\x95\x6b\x5f\xda\x58\x3e\x43\x7e\x6f\x2e\xb4\x90\xdf\xe3\xdb\x08\x22\xf7\x45\xc5\x16\xdd\xe7\xa6\x35\x02\xf4\x1a\xce\xac\x03\x51\x4b\xe2\x77\xfc\x95\xb1\x9b\xaa\xb8\xb2\x62\xc0\x2e\x1b\x92\xd3\xfe\x59\xd6\xbd\x64\xfa\x4c\x9b\xb5\xb7\xb7\x5b\x6c\x88\x0e\xb8\xf3\xe6\xcd\x9b\x37\xce\xaf\xbf\xfe\xfa\xab\xeb\xfc\xf2\xcb\x60\x3e\x47\x6d\x77\xce\x15\x49\x74\x63\xe9\xb5\x64\x1b\x42\x24\x07\xad\x76\x57\x77\xa8\xc5\x6e\x44\x67\xc9\x68\x0e\xb0\x24\x77\x45\x64\x29\xca\xc2\x88\x7a\x37\xc0\x59\xde\x17\xa7\xea\x4b\x4b\xb6\x9f\xf7\x86\xc3\x61\xea\xa1\xab\xfd\x1c\xfd\x9f\x1e\x1a\xa0\xff\x83\x1e\xca\x9d\x7e\xaf\x37\x50\x9f\x9f\x85\x92\x23\xd5\xd9\xbb\xc2\xc9\x94\x30\x12\x61\x49\x3a\xd4\xff\x52\xaf\xe3\xf3\x5d\xcd\xb6\x63\x5d\x6c\x9e\xf6\xce\x1e\xa2\x0e\x7a\xa8\x08\x74\xfd\x5b\xf3\x64\x28\xb2\x39\x0f\x99\xde\x4f\x13\xfc\xfa\x3a\xa7\xcd\xab\x9b\xae\x13\xea\xa6\xd5\x0a\xc7\x3a\x4c\xdd\x4f\x25\xc6\x2a\x54\x91\x0d\x70\x45\xd6\x20\x8b\x8a\x0e\x8e\x22\xbc\x68\x8e\xb1\xa4\xc4\xb7\x85\x36\x2a\xf6\xf4\x38\x1b\xd6\x69\xe0\x01\x7d\x65\x57\x42\x19\x64\x10\xfd\xdc\x77\x03\xf4\xe9\x12\xf7\x11\x7d\x6b\x28\xc5\x6c\xf3\x5f\x9b\x8f\x06\x44\x9e\x4a\x97\x9d\x0d\x49\xe2\x04\x6b\x38\x54\xfb\x40\x53\x56\x4a\x45\x87\xf1\x2f\xe6\x1f\x75\xcd\x40\xd2\x61\x6c\xc9\x8d\x86\xc0\x19\xe9\xf0\x49\xd3\x6d\x9e\x4e\x5a\xad\x52\x28\xfe\x4f\x9f\xb6\x32\x8e\xb7\x21\x32\xbf\xd1\xd4\x0c\x77\x73\x92\xc1\x84\x47\x2d\xed\x6a\xbe\xff\x23\xfb\x87\x85\xfa\x91\x3d\x7c\xd8\xa6\x93\x16\x39\x65\x67\xc3\xa1\x34\xaf\x0a\xb7\x7a\x46\x5c\xdf\xea\xdf\x44\x30\xa0\xe2\x1d\x23\xef\x26\x77\x25\x11\x04\x1b\x6c\xa3\xc1\xb7\xb6\x8d\x6e\x50\xdd\xda\xf5\x1e\x6c\xb2\x8d\x06\xdf\xdc\x36\x1a\x6c\xb0\x8d\x06\x6b\xb7\x51\xc6\x65\x67\x93\x43\x9e\x86\xff\xf6\x0e\x7a\x8c\xcb\x17\xbf\x37\xae\x11\xa0\xd7\x63\x6e\x23\xb4\x7d\x7b\x08\xdb\x04\x5d\x6b\x90\xc5\x2b\x2f\xae\xaa\x71\xc5\xa3\x6f\x0c\x55\xe0\xa7\xa1\x59\x75\x3c\x5a\x83\xa8\x90\x44\xea\x80\xd9\x54\x85\x6d\xc1\xef\x23\xc2\x56\x0e\x33\x88\x23\x1c\xc0\x0b\xd0\xf2\x40\x29\x9b\x04\xc4\x93\x3c\xda\x09\xe8\xb8\xa2\xc8\x57\xb7\x4a\xb0\x5d\x8a\x30\xf3\xf9\xbc\x70\x44\xff\x3a\x01\x01\x6a\x64\xb5\xf2\xc4\x64\xbc\xf5\xaf\x77\xb8\x93\x0c\x94\x60\xbf\x13\x62\x39\xbb\x27\xa2\x67\x4e\x86\xd6\x25\xa6\x10\xcd\x91\x35\xf0\x51\x6e\x07\x25\x28\x9b\xc6\x01\x8e\x36\xa2\xc2\x6c\xa1\x7b\x43\x87\x12\x8b\xf3\xa6\x1c\x03\x60\xbf\x35\x76\x21\xe9\x9c\x74\xf0\x94\xaf\x5c\x67\x7e\x95\x05\x56\x72\x96\xb0\xc4\x93\xc5\x6f\x57\xd5\xbb\x37\xe5\x70\xf3\x65\x7d\x13\xa1\x43\xed\x2e\xc7\x81\xfa\xd4\xf9\x4c\xeb\x5c\x51\xdb\x65\x37\x39\x16\x98\x36\x86\x6c\x75\xf4\xb1\x3c\xc5\xb3\xb5\x41\x9a\x2c\x6a\xc0\x07\x16\x65\xd4\xbc\xb0\xbc\x55\x75\xb3\x6c\x6f\x6f\xb7\xe4\x10\x3c\x91\x56\x2b\xa2\x55\x4e\x4b\x76\x45\x3c\xd6\x5c\xae\xd5\x73\xfb\xed\x87\xac\x90\xd0\xee\x4a\xfe\x3e\x0c\xed\xad\xe2\x4d\xb0\xa8\x86\x79\x68\x46\x79\x57\x27\xac\xab\x4d\xa4\x94\xab\x6f\x4e\x4c\xb9\xda\x40\x4e\xb9\xaa\x15\x54\x0c\xa9\x69\xa3\xaa\x5a\x3b\x8d\x6a\x4b\x8c\x4c\xd9\xce\x04\x2b\xde\xba\xd8\xd8\x44\x09\x0c\x34\x5c\xf1\xe0\xb3\x99\x6d\xc6\x7e\x68\xef\xe8\x68\x7b\xbb\x95\xf1\x47\x02\x46\x1b\x0c\xcf\x89\x2b\x0a\x89\x66\x28\xd6\xd2\x08\xe2\x60\x81\xe5\xbc\x63\x8d\x9c\xdd\x74\x94\x83\xbc\xfb\x21\xee\x8a\x9c\xfd\x73\xa5\xbd\x50\x11\xbf\x89\xb7\x82\x35\xfe\xed\xaa\x9c\x87\xac\x33\x76\x49\x19\xe1\x34\xe0\x63\x1c\xbc\xb8\xc0\xc1\x30\x43\x0e\xcb\xb4\xf7\x5d\xfc\x1b\xbe\x1a\x11\x19\x87\xad\x6b\x2f\xe2\x42\x1c\xf0\x39\xa6\x4c\xd1\x90\xc7\x19\xb8\xa2\x88\xc4\xe0\x1a\x49\x72\x25\x1d\xe1\x45\x34\x94\x68\x40\x86\x3f\xa9\xf3\xa7\x71\xb1\x94\x22\x32\xe9\xe1\x03\xd2\x8d\xc8\x94\x0a\x49\xa2\x8c\x23\xf9\x81\xaa\x19\xb9\xbc\xed\x1e\x44\x3c\xfc\x83\x33\xd2\xc5\xb1\xe4\x07\x54\x78\xfc\x82\x44\xc3\x1b\xaa\x67\x12\xc4\xd6\x5b\xa0\x98\xe9\xcc\xa1\x3d\x33\x9d\x7c\xb9\xce\x18\x25\x37\x7b\xe3\x88\x5f\x8a\x55\xe1\x10\xf2\x4c\x99\x18\x9f\x7f\x2d\x04\xae\x97\x91\x8b\x92\x0a\x90\x71\x03\x38\xb0\x29\x7a\x40\x1a\xda\xe3\x4c\x46\x3c\x08\x00\xb0\x69\x91\xd4\xf9\xcf\x8a\x12\x9f\x89\xe6\x5a\x36\x6d\xd0\x9c\xb4\x8c\x27\xf0\x90\x57\x10\x51\x5a\x41\x72\xb9\x8e\x7b\xe7\x50\xde\xc0\x71\xce\x3a\xa4\x67\xaa\x28\x92\x64\x2d\xd6\x1b\x97\x49\xd1\xde\xb0\x88\x34\x2e\x5d\x9a\x97\x30\xb3\xd8\xbc\x00\x38\xa8\x5b\x03\x7e\xc7\x94\x90\x69\xda\xd0\x42\xdd\x12\xdc\x9c\x1e\x24\xa6\x8c\x44\x1d\x9f\x8c\xe3\x69\x07\xfb\x38\x94\xd5\x56\xb4\x11\x11\x3c\xb8\x20\xd1\x8e\xfd\x21\x76\xc0\x05\x38\xf5\x6a\x6b\xb9\xab\x03\x40\x8a\x95\xea\xce\xa7\x43\x4c\x1c\x2e\x66\xed\x10\x3f\x7d\x4a\xbf\x7a\x67\x45\x1e\x5b\x55\xa5\xe1\xb8\xe9\x5e\x55\x20\xf4\xfa\x22\x10\xf4\x4c\xe8\x77\x43\xd9\x49\xb3\x74\xb3\xd9\x74\xa5\x62\xc3\x9c\x46\xf0\xde\xf6\xce\xdd\x5f\x69\x54\x97\x1b\xce\xe1\x78\xb9\xf6\xd9\x52\xd5\x30\xd2\xd3\xd7\xba\xc3\xd9\x9a\xd2\xf7\x51\xce\x6c\x88\x04\x1f\xe7\xa3\xc6\xda\xd1\xab\xf4\x1d\xa1\xe4\x89\x4e\x42\x60\xb9\xcc\x3b\x0c\xf7\x9c\x9b\x73\xdd\xc1\x2c\x87\x49\x06\xb9\xee\x08\x56\x31\x5c\x41\xe7\x61\x40\x3a\xda\xcb\xf0\xa6\x86\xcb\x99\xc2\x06\x2c\x8e\xac\x6b\xc8\x32\x44\xae\x75\x8d\xc9\x64\x03\xdd\x08\xbc\x93\xee\x18\x1b\x15\x8b\xe0\x89\xa2\xee\x60\xd9\x73\xb2\x2b\x5c\x7a\x5b\x53\x86\xf3\x53\x96\x43\x72\x66\x9d\x12\x1b\x32\x11\xa7\x47\xfc\xd3\x8a\x32\xda\xbd\x20\xee\x46\x9c\xcb\xf7\xc7\xaf\x33\xfa\x00\x93\xf2\xe9\x53\x9a\x34\xc6\x82\xbc\x3f\x7e\x9d\x39\x2d\x04\x1c\xfb\x2d\x0c\xbe\x45\x79\x2a\xdc\x13\x48\x10\xc5\x04\x9a\x4d\xc8\xb1\x11\xbc\x9e\xa4\x2e\x08\x93\x9d\x71\xfc\x19\xc2\x0c\x54\xf1\x73\x2c\x32\xd2\x5d\x92\x54\x27\x99\x34\x2f\x93\x91\x80\x9a\x16\x02\x37\xdc\xeb\xe0\xef\x58\xda\x48\xdb\xbe\x5d\x61\x43\x4f\x51\x27\x53\x5b\x47\x9f\xab\x9a\xb3\x82\x15\xea\xab\xf6\xb5\x1a\xc4\xca\x9d\x9e\x4e\x5a\x5b\xfd\xad\x61\xee\xfd\x8b\x6a\x75\x2f\xed\xd1\x2b\xe8\x90\xae\x8b\xa9\x02\x28\xb6\x4a\x1d\xb4\x35\x94\x8b\x90\xf0\x89\x73\x49\x99\xcf\x2f\xdb\x6c\xa8\x7f\x3c\x20\x81\x20\x4e\x0d\xac\x1e\x61\x9b\x0d\xf5\x0f\x80\xbd\xce\xc3\x0e\x2d\xac\x20\xc1\xc4\xc6\x2c\x67\x43\xf5\xb5\x04\x8e\xec\x8a\xf5\x5d\x7e\xc0\x87\xc8\x68\xd2\xd3\xfa\x9e\x5b\xa7\x95\xc6\xaa\x56\x0b\x6c\x93\x45\x2b\xa3\xee\x06\x6a\x39\x8a\xc8\x84\x5e\xb5\x5d\x76\xca\xcf\x3e\x7d\x6a\xa9\x3f\x43\xe2\x2a\xc9\x88\x87\x84\xb5\xae\x2f\x69\x10\x1c\x10\x21\x23\xbe\x18\x14\x83\x9e\x69\x1f\xd9\x5d\x35\xad\xda\xaf\xb3\x9b\xf1\x95\xad\x5d\xbf\x38\xaa\xc2\xe5\xb2\xdd\x5e\x7e\x26\xe9\xd6\x2a\x09\x2d\xe9\xd6\x93\x58\x86\x6e\xd9\x66\x5b\x57\xc0\xa7\xd3\xcf\x39\xa6\xda\xf2\xc9\x4a\x36\x09\x75\x0c\xa6\x19\x7c\x86\xb9\xd4\x16\xb8\x63\x46\x61\xdb\xdd\xe0\x7c\x5a\xb6\xb8\xca\xa1\x1a\x50\xd6\xd1\x83\xe4\x37\x40\x79\x16\x8d\x3a\x40\x53\xf2\x63\xd5\x49\xb0\x1a\xf4\x8e\xb1\x57\x1c\xeb\xcd\x19\x6b\x82\xf8\x9b\x52\x68\x2a\x18\x59\x0a\xb2\x29\xb5\x34\xd7\xb4\x48\x3a\x1f\xcd\x4a\xd8\x0d\x70\x05\xf4\x1d\xcf\x4b\xd2\xf2\x2d\xec\x7e\xea\xd4\xee\x91\xce\xa6\x82\x7f\x0a\xdf\x01\x37\x17\x89\x08\x7a\xc7\x27\xea\x4d\x44\xfe\x8d\x47\x6c\x5f\xa1\x7e\xe1\x43\x6b\xda\x6c\x66\x44\xd9\x56\x91\xfd\x48\x37\x4e\xd2\x0d\x38\x3f\x8f\xc3\xe7\xf6\x47\xc2\x2c\x06\x69\x7d\x36\x1a\xcd\x94\xc8\x77\x97\x8c\x44\x2d\xd2\x5e\x05\xdd\xe4\x8c\x5c\x8f\xbc\x9a\x83\xd3\x17\xc0\x5f\xdd\x69\xa2\xc9\xa9\x3f\x17\x54\xe6\xcb\xdc\x8c\xbf\x51\x4d\x76\x3d\xf0\x53\xdb\x5a\x17\x33\x86\x8a\xac\x07\xee\xc4\xff\xf6\x56\xaf\x90\x93\x78\xe1\xde\xea\x17\x72\xc0\xd7\x76\x29\x75\x7f\x6f\xa4\x13\x0f\x62\x1c\xa8\x0c\xf8\x5a\x13\x57\xe4\x41\x31\x34\x48\x26\x72\xac\x92\x44\xd3\x90\xf4\xd5\xdd\x46\xd9\xd8\xf4\x7a\xdc\x5d\x9c\x81\x43\xed\xe1\x70\x48\xba\xd9\xa2\x5d\x5b\xd6\xc6\x78\x2e\xd7\xfe\xcf\xc4\xed\xf8\xe6\xb5\xdb\xb2\xf5\xb5\x2b\xf4\xdd\xa4\x66\x55\xae\xbe\xd6\xfd\xbd\x51\x93\x4a\x0b\x75\xee\xef\x8d\xda\x37\xed\x4a\x29\xac\x4b\xb6\xf4\xbe\x7e\xd4\xd8\x7e\x50\xb6\xd2\xcd\x18\xe9\xea\x8f\x24\x3e\x57\x76\x6c\x96\x8a\x20\xf6\xd4\xa0\x45\x86\xff\x35\x7a\xf7\xb6\x0b\x6f\x77\x5a\x85\xa9\x4b\x41\x49\x17\x07\x01\xbf\x7c\xc9\xa3\x39\x20\xa7\x14\x42\x6a\xd5\x8a\xd5\x51\x81\xbf\x7c\xb0\xb8\xfc\xea\x85\x5e\xbc\x53\x07\x10\xa2\x83\x4d\xe5\xef\x0b\x49\xbb\x0b\x10\x2d\xe4\x53\x11\x72\x41\x4a\x01\x4d\x12\x08\x56\xbc\xa0\xe7\xed\x4f\x9f\x0a\xb7\x8f\xed\xae\x8c\xa8\x12\x68\x5b\x08\x62\x9f\xa0\xf6\xd2\x85\xd2\x87\x2c\x8c\xe5\x4b\x08\x87\x42\x5c\x56\xd1\x0b\xae\x50\x28\x66\xfc\x92\x75\xc7\xa2\x6b\x70\x97\x65\x71\xf9\x12\xac\xa2\x25\xdb\xd6\x81\x1e\x49\xb9\x50\xc5\x60\x4d\x91\x5f\xa8\xbf\x12\x7e\x46\xfd\x14\x18\xfc\x90\xad\x87\xae\xc3\x63\xa9\xf1\x77\x6c\x34\xe3\x97\xeb\xf0\x52\x83\x16\x06\x21\xac\x72\x35\xb1\x9b\xa2\xb8\x50\x97\x46\x4a\x7d\x55\x6a\x98\x8d\x6b\xf2\xc9\xca\x6e\xcd\x00\x62\x75\x6d\xeb\x6d\xc9\xcc\xca\xd3\x9e\xaf\xbf\x5c\x90\xf8\xfc\x8a\x83\xd6\x17\xa3\xd8\xf3\x88\x10\x70\x05\xae\x78\x8b\x55\x08\x75\x43\xed\xc3\xad\x85\x34\xdc\x7b\xb8\x9d\x24\x2e\x12\xba\x80\xa2\x0a\x9d\x73\xc8\x26\xbc\x79\x71\xca\x26\x3c\x2d\xfb\x6f\x1c\xb1\xe6\x65\x2f\x71\xc4\xd2\xb2\x10\xdf\xa8\x79\x61\x13\x06\x29\x13\xa5\xeb\x3f\x14\x01\xcd\x77\x06\x1b\xc7\xe0\xab\x90\x67\x83\x5e\x72\x9f\x04\x62\x27\xeb\x0b\xbd\xe6\x8c\x65\xaf\x75\x33\x49\x58\xca\xe2\xa5\xe5\x6d\xde\xab\x94\xdd\xee\xd8\x67\xea\x87\xfe\xa0\x95\x31\xb8\x69\xb7\xac\x2a\xaf\xed\x86\x78\x4a\x56\x64\x43\x4d\xe0\x45\xb0\x0e\x62\x42\x83\x55\x15\xa8\x6c\x10\xf7\xeb\x00\x7e\xe3\xe3\xda\x3c\x1e\x4d\x57\x54\xed\x99\xe0\x2d\xf9\xfc\xb6\x1b\x91\x0b\x08\xdc\x5c\x48\x5f\xae\xb5\xe9\x33\x93\x3b\xd6\x8e\xbf\xef\xf1\xbc\xae\xc6\x0b\x5c\x07\xaf\xc8\x8f\x75\xd4\x8f\x5a\xb4\x72\x26\x09\x93\x10\x57\x63\x15\xd5\xac\x04\x90\x54\x06\xf5\xb9\x10\xdf\xa5\x9e\xe4\x3c\x12\x85\x72\x55\xf7\x4b\x9d\x67\xf0\xea\x1c\xb9\xd7\x26\xe9\x5f\x80\x54\x85\xd3\x08\x5f\xfe\x5c\x6e\xcd\x44\xf2\x9d\x96\x92\x15\x86\x23\x86\x83\x11\x8f\x23\xaf\x34\x80\x31\xe7\x01\xc1\xac\xd8\xce\x56\x7f\xa9\x08\xdd\x04\x3b\xac\xed\xb8\x8d\x5b\xf8\xc5\x09\xda\x33\x41\x0f\x3a\x10\xb5\xa7\xa4\xcb\xfb\xc6\xc8\xdb\x8e\x66\x05\xc8\xe5\x8c\xaf\xce\x5d\x5b\xf9\xbf\x28\xb9\xac\x9b\xfd\xb6\xbb\x72\x16\x05\x09\x74\x38\x99\xba\xe2\x1b\xcf\xdb\x37\x3c\x59\xeb\x78\x91\x1d\x62\x2d\x00\x15\x07\x3a\xb1\x7e\x36\x36\x5c\x36\xae\xdd\x15\x45\x29\x47\x71\xc6\x52\x6a\xe3\xe9\xf2\xb9\xd7\x11\xe0\x08\xb8\x13\x11\x11\x57\x3f\x18\xbd\xd7\xf3\x96\xe2\xa6\x36\x63\x45\x99\x51\x10\x97\x19\xaa\xc4\xd3\x32\x9e\xab\x59\x7c\xdb\xa5\x92\xcc\x2b\x1a\x50\xc9\x15\xbb\x8d\xa1\xae\xea\xd4\x8a\x6a\x20\xbd\xba\x93\x36\x70\x5b\x31\xc3\x98\x1b\x57\x55\x56\xbd\xca\x37\xa2\x16\xc0\x5a\x07\x9b\x88\x74\xdf\x1c\xb5\x34\x5f\xe5\x9f\x2f\x87\x82\xc0\xb1\x52\xa6\x58\x23\xd5\xdc\xc2\xf6\x8c\xb3\xa1\x03\xab\x05\x90\x7a\x66\x64\x0b\x6b\x97\xf0\xc5\xe0\xd3\xd9\xaa\x2b\xa2\x79\x23\xe4\xca\x1a\xc5\xad\xf1\x1d\x97\xd1\x0c\x66\xab\x32\x1e\xe4\x1c\xd9\x2d\xc6\x3e\xec\xda\xd0\x87\x64\x88\xf6\x7c\x9f\xf8\x59\x97\x5a\x55\xf0\x10\x3b\x86\x0c\x91\xda\x19\xd7\x43\x9b\x38\x8a\x64\x88\xf4\xaf\x75\xf0\x36\xdc\x22\x19\x1a\x7f\xf5\x6b\x4b\x24\xa1\xe7\xd4\x00\x6c\x20\xb9\x75\x65\x6c\xd0\x37\x55\xc6\xfc\x5e\x3f\x6e\x13\xe8\x91\x0c\x91\xfd\xbd\xae\x4c\x39\x22\x24\x19\xa2\x24\xd1\xb1\xa9\x8d\xab\xd1\x41\x24\x73\x75\x40\xd2\xfa\xbe\x9b\xc8\x76\xd0\x77\xfd\xbb\x71\xa3\xb9\xf6\x12\x4f\x6a\x64\x99\xd2\xb2\x0e\x8d\x70\xbf\x68\xd9\x53\x7d\xea\x4c\x23\xbc\xe8\x3c\xeb\xf5\x9a\x12\xb5\x2e\x35\x0e\xf0\x7a\x9c\xa6\x94\x6d\x9b\x22\x84\x35\x69\x2b\x43\xe2\xba\x64\x44\xfc\xce\xd3\xf5\xe5\xb2\x84\xbe\xd9\xe8\xb2\xe4\xbe\x61\x67\xb3\x54\xbf\x51\x6f\xcb\xa4\xdf\x9c\xba\x37\x9d\xbb\x94\xb8\x6f\xd6\xc5\x2a\xbc\x64\xe8\x7c\xf3\xad\xfc\x4f\x71\xbe\x6a\xb0\x59\xdf\xfc\x7c\xb5\x72\x83\xb5\x2d\x43\x4c\x92\x5a\x71\xdf\x42\xd9\xb8\x29\x6b\x01\x8f\x79\x40\x9a\x55\xa9\x20\xd7\x55\xbb\x31\x55\xd4\x92\x02\xcc\x7b\xdd\x73\xf5\x0a\xa2\x29\x1b\xf9\xde\x16\x91\x88\x21\x2f\x11\x89\x9d\x29\xb9\x46\x47\x53\x99\x6f\x94\x7a\x95\x79\x01\x37\x4f\x14\xea\x00\x12\xf2\xac\xcc\xcd\xc8\x9a\x95\xf9\xa9\x1c\x58\x99\x6d\xcf\x23\xd5\x99\x99\x73\x80\xac\xa4\x94\x30\x09\xb6\x5c\x84\xa9\x57\x41\xd9\x40\xc1\xcd\x4b\x04\x49\xc0\xdd\x46\x45\xfa\xcb\xe4\xa4\x42\x4a\x23\x4f\xfb\x9e\x3b\xcc\x54\x8e\xdf\xfa\xc5\x8e\x7c\x12\x35\xef\xad\x0d\x50\xde\xac\x04\x04\x31\x5f\xb6\xdd\x69\xc4\xe3\x70\x45\x5f\x32\x82\xb4\xac\x39\xd5\xe7\xd2\xb3\x9a\x84\x4c\x46\xbe\xf1\x56\x7b\xf8\xd3\xe9\x99\xea\xb3\x3a\x06\x16\x25\x17\x45\xf2\x39\x89\xc5\x7a\x8f\x4d\x16\xc7\x1c\x9f\xc3\x09\x32\x23\xa3\x40\xa1\x76\x7b\x99\x3f\x12\x56\xcd\x40\x95\xd6\x90\x0a\x1d\x51\xb9\xd8\x95\x84\x02\x2a\x24\xa8\x6a\xe1\xc9\xbe\x11\x49\x32\xd3\x2a\xb4\x55\x41\x12\xc5\xb9\x0b\x4d\x42\xe3\x10\xc6\xf9\x8b\xb6\xad\x5a\xcc\x52\x78\xf5\x79\x68\xf3\x2e\x94\x64\xc7\x4c\x17\x8c\xe0\x58\x42\xc1\xc0\xee\xf5\xc5\x0c\xe8\xd4\x83\x52\x21\xc0\x56\x45\x99\x24\xce\x75\xb9\x48\x22\xbc\x55\x14\xcb\x45\xc3\x36\x72\x07\x42\x8a\x61\xf8\xfe\x31\xf1\x08\x2b\x93\x85\x59\x14\x15\x58\xd1\xce\x67\x5b\xed\xae\x88\xc7\x32\xc2\x9e\x6c\x3d\x73\x91\x8f\x17\x99\xe9\x31\x20\x19\xfc\x99\xda\xda\xed\x2e\x15\x23\x3c\x27\xef\xa2\xbd\x89\x04\x4b\xb3\x65\xdb\x8d\x21\xac\xd4\x17\xe9\x88\x59\xd3\x55\x1d\xd9\xde\x5e\xdd\xed\x9f\x21\xae\xbc\xee\x31\x15\x23\xc3\x8a\xfc\x52\x87\x2d\x93\xba\x39\x4d\x27\x35\xb4\xb7\x14\x49\xbf\x67\x36\xc1\x2f\x88\x8a\x95\x2f\x93\x8d\x50\x30\xe1\x81\x5f\xfd\xfe\xf1\x5b\x17\x09\x56\xef\xda\x6b\x76\x65\xd8\xd4\xad\x5e\x65\xfd\x1e\xb2\x7b\xb3\x3d\x32\xa0\xe7\xa4\x7e\xf3\xa7\x5e\xad\x4c\x52\xa8\x0b\x16\xa9\x4f\x84\xb7\x01\x78\xa0\x16\x79\x2d\x06\xaa\x4a\x78\x3c\x66\x72\xbf\x7a\x57\x5b\xb1\x1b\xeb\x62\xfa\x0e\x6f\x03\x19\x25\x08\xf8\xe5\x6b\xc0\x4f\x99\x17\x9f\x13\x51\xb1\x2d\x6e\xa5\xf6\x64\x59\xae\xab\x80\xdb\xed\xed\xed\x82\xcf\xc8\x32\xc8\x1d\xed\xc2\x10\x43\x5c\x1c\x13\x85\x59\xb5\x1b\xaf\x59\xe6\xa9\x71\x5b\x42\x83\xc8\x25\xdd\x91\xfd\xe8\x1e\x69\x89\x8f\xf8\xed\xa5\xa9\xfb\x28\x82\xc8\x8d\x9f\x5f\x31\x54\x93\x56\xab\x8e\xa5\xde\x67\xd7\x0a\xb5\xb4\x97\xae\x98\xe1\x88\xf8\xff\xa6\x72\x56\x16\x95\x36\x13\xad\x1a\x33\x37\x10\xe9\x3a\x73\xa2\x89\xec\x9b\x3d\x00\x67\x24\xd3\xaf\xa4\x69\x9e\xc4\x41\x00\x00\xc5\xb5\x91\xd4\x8d\x5c\x64\x6b\xa9\x58\x2b\x08\x75\x3d\xce\x3c\x9c\xdd\x35\xd3\xa2\x6d\x17\x39\xa8\x5d\x86\x48\x2a\x54\xeb\xa8\xf1\x31\x17\xb0\xf5\x0d\xcf\xf6\xca\x89\x08\xe3\x28\xe4\xe2\xd6\x6e\xec\x5d\xbd\x36\x8a\x17\x62\xf5\x7c\xb9\xf1\x2c\xc0\xf6\xb2\x4e\xac\x58\x2b\x3e\xdc\xde\x2c\xb0\xfa\x59\xa8\xdc\x7c\x57\x8a\x16\xa0\xa3\xbb\xbd\x83\xa2\xda\x20\x07\x3d\x77\x3c\xad\xd6\x5f\x43\x6b\x55\x1b\x50\x75\x00\x11\x34\xc6\xde\xb9\x5a\x04\xcc\xef\xe8\x8e\x3a\xe8\x61\x96\x79\xab\xda\xda\x0f\xd1\x8f\x48\xed\x4e\xe3\xe9\xe4\x0b\x37\xeb\xac\xed\x54\x63\x22\xe3\xd1\x14\x33\xfa\x47\x85\x3f\xa4\x7b\xb6\xe2\x57\x5b\x1f\x99\x60\xf2\xf5\x06\x48\x73\x4c\x83\x15\x4a\x4a\x70\xbc\xb4\xc2\x7a\xca\x06\xff\x62\x7e\xc8\x69\xe9\x2a\x3d\x73\x9f\xa8\x64\xae\x3d\xc6\xd9\x62\xce\x63\xb1\x07\x16\x9e\x9b\x58\x1c\xcd\xf1\xd5\x49\xf9\x76\xbd\x86\x99\x3c\x5a\xb6\x5d\x39\x23\x5f\xc1\xfa\x28\xc4\x53\x92\x75\x32\x71\x8f\xe9\x26\x2c\x93\x85\x22\x17\x89\x4b\x89\x21\x61\x3e\x65\x65\x4b\x02\x6f\x86\xd9\x94\x1c\x55\xe6\x66\x4d\x56\x00\x6c\xef\x12\x53\x49\xd9\xf4\x58\x87\xb8\x5e\x03\x9d\xdc\x77\xd4\xc2\x29\xc1\xe4\x17\x2c\xf6\x9b\xf5\x21\x07\xdd\xb4\x2b\xb9\x42\x8d\x7b\xf4\x96\x5c\x1e\xe1\xf5\x5d\xda\x8c\xa4\xd4\xbc\xdc\xeb\x1d\x2f\x35\x69\xa8\xdc\xb7\xf2\xf7\x2c\xb7\x7f\xa6\xce\x58\x3e\x16\xf6\x3f\x6b\xf9\x98\x4b\x2e\x5b\x3e\x36\xd5\x61\x7e\xce\x71\x62\xed\x2c\x9b\x85\xf6\x27\x61\x1b\xfc\x92\x69\xcd\x7a\x35\x07\xfe\x8b\x79\xdc\x94\x1b\xdc\x6b\xfa\x68\x70\xa3\xba\xc6\xe4\xf5\x36\x4c\xb2\x03\x72\x41\x4a\x62\x4d\xbd\xb2\x2c\x7b\xab\xd3\xa0\x44\x6f\xf7\xf1\xb2\xed\xea\xcc\x0a\xca\x49\xb9\x92\x62\x0a\xf0\x16\xa6\xb1\x09\x37\xd8\xe3\xaf\xc0\xce\x67\xd8\x9a\x57\x5b\x87\x67\x45\xc5\x8a\x45\x2c\x24\x96\xf1\x06\xfd\x8f\x48\x80\x25\xbd\xf8\x0c\x93\x7c\x89\xa7\x6f\xab\xd4\x01\x30\xa5\x55\xe7\xff\xd9\x2e\x52\xf2\x1e\xf7\x0e\x99\x5f\xa5\xbe\xaf\x2b\xe8\xf4\x7b\x7f\xcf\x6a\x04\x00\xac\xdd\xe9\xb7\xb3\xb5\xed\x8b\xb2\x92\x30\xc9\x5c\xa9\x5f\x4f\xa1\x12\x6f\xcf\x73\x1c\x4d\x29\xeb\x04\x64\x22\x3b\x89\xd6\x02\xb4\xf9\x33\x2c\x8e\x13\x62\x29\xb6\x97\x90\x51\xd5\x20\x0a\x17\x0b\x00\xd6\xfe\xa9\xb7\xdc\xfc\xbc\x4e\xad\xe8\xf2\x5e\x90\xc8\x30\xc5\x34\x22\x1b\x42\xc3\xe1\x30\xdb\x98\x9d\x67\xd4\xde\xde\x4e\xd3\xf5\xe4\xea\x9b\xb0\xed\xed\x0c\x7a\x35\x21\x41\x46\xa5\xb6\xaf\xab\x39\xe5\x48\x62\x49\xba\xa6\xf5\xb7\xe4\xf2\xd3\xa7\x1b\x56\xf1\x9e\xf9\x24\xd2\x4c\xba\xbd\x4c\xc7\xa6\x53\x8e\x09\xf6\x17\xad\x0d\x87\x76\xd3\xe6\x97\xcd\x99\x3b\xbd\xdf\x47\xcd\xd5\x8c\x7b\xcd\xba\xbe\x05\xbb\xd9\xcd\xd8\x34\xdc\xbc\x87\xab\x8e\xaf\x1b\x2f\x10\x50\x3d\x97\xd6\x67\xda\xf3\x4a\xf5\x64\x8e\x5e\x32\xb0\xfa\x16\xef\xc0\x1a\xa1\x6f\x58\xeb\x56\x7d\xad\xcd\xe9\xcd\xaa\xfb\x3b\xfa\xaa\xae\x13\xe2\x48\x52\x8f\x86\xf8\x9e\xbf\xf5\x5b\x43\x6a\xab\x95\x1a\xb7\xa0\xb3\x5e\xfd\x26\x66\x0d\xa1\xe7\xee\xff\x9a\xed\xaa\xdf\x92\x8e\xbc\xe2\x51\xeb\xbd\xa3\x9f\x2f\xf0\xec\xcf\x27\xda\x33\xf9\xaa\xe7\xa4\xd4\xe3\xec\x25\x5f\xa1\x35\x03\x00\xba\xa2\x95\x88\x48\x1a\xad\x3a\xe9\xcc\xb0\x38\x9c\xab\x23\x5b\x91\x72\x6c\xdb\xc8\x45\xb6\x95\xd5\xe2\x45\x02\xd5\xb6\xe1\xef\x6e\x20\x64\x34\xa7\x22\xb5\x48\xfe\x1c\x36\xa6\xeb\xf8\xc1\xcd\x0d\x4c\xa1\xe6\xd5\xaf\xf7\x00\xe4\x0d\x66\x15\x3a\xe0\x02\xd0\xbb\xaa\xe3\x7a\x85\x25\xaa\xbf\x82\xda\x36\x33\x6a\xd5\x46\xe2\xeb\xe1\xde\x34\xb2\x7c\xdd\xe7\x61\xe9\x6c\x53\x86\x3a\xa9\x7e\xfd\xf4\x39\x26\xb7\xaf\xb3\xc6\x19\xab\x41\x4d\xdc\x86\x7a\xc0\x95\x1b\xcb\xea\x0b\xb5\xd2\xda\x2a\xbb\x07\x34\x6b\x2b\xf5\xf3\xfe\xe7\xb3\xcc\xf9\xcb\x58\xf7\x2f\x63\xdd\xa4\xb7\xeb\xcc\x6e\x6f\x62\xc4\x7a\x17\x66\x3c\x9b\xde\xea\x7e\x29\x43\xda\xaf\x68\x47\xfb\x97\x19\xed\x46\x66\xb4\x8d\xcd\x96\x20\x84\xd7\x37\xf1\x0a\xd7\xee\x99\x6f\x9b\xbc\xa2\xf9\x9c\x57\xf9\x9c\xc9\x88\x8e\xe3\x0a\xf5\x7c\xca\x7e\xe0\x1d\xe8\x86\x8a\x84\xcc\xe5\xb7\x7d\x9b\x56\x2f\xc6\x57\xdf\x0f\x14\xf9\xdf\x0a\x08\x5f\x11\xe1\xaa\x3e\x58\xaa\xaa\x37\xff\xb1\x2f\xc5\xea\x20\x66\x58\xec\x67\x90\x55\x36\xea\x48\xf2\x56\x9f\x24\xb2\x80\xb9\xc3\xc4\x0c\x0b\xfd\xe2\xb6\x54\xb7\x9e\x80\xd5\xd5\x1a\x98\x62\x8d\xf6\xbd\x64\x13\xab\xee\x72\x57\xad\xf9\x75\xa1\xd2\xe4\xb5\x61\xe9\x41\xa8\x7d\x69\xbb\xb2\xda\x04\xaa\x58\x6f\x72\x51\x54\xd6\x01\x9b\x17\xad\x6b\x54\xc0\x06\xaa\x84\xd6\x84\x7e\x4a\x98\xb5\x39\x6b\x90\x9b\x80\x15\xab\x3e\x30\x84\x57\xd2\x5f\xe9\xf4\xd5\xd5\x5a\xa0\x12\x7e\x2d\xb5\x96\xf0\x6b\x5f\x3f\xaf\xc6\xaf\x85\x2a\xd6\x9b\x3e\x87\x2c\x56\x9c\x90\xff\xea\x9a\x53\xb0\x6c\xd5\x8d\x8f\xb5\xb1\xb8\xe7\x56\x21\xb7\xa0\x1c\x5b\xad\x7d\xb3\xe1\x23\xeb\x19\x95\xda\x9c\x36\xf2\x46\x44\x7c\x2a\x79\xed\xd1\xb5\xaa\x04\xf6\xe7\x65\xbd\xf0\xaa\x02\x8a\xb7\xbc\xaf\x70\x98\xb2\xba\x15\x86\x83\x85\xa4\xde\x46\x85\xb4\x8b\xfd\x8d\x9a\xf1\xc0\xca\xaf\xec\x79\x04\xc4\xdf\x72\xb2\x9a\xc0\x9a\x83\x68\x7a\xde\xb8\x4d\xeb\xa9\xfb\xa0\xbe\x74\xa7\x84\x91\x08\x4b\x62\x03\x7b\x56\xc8\x86\x99\x2a\xbb\x32\xa2\xf3\x56\x3b\xf7\x7a\x3f\xad\xcf\xe4\x66\x0c\xd4\xd3\xa0\xa8\xc4\xc4\x23\xd5\xd1\x49\x65\xf6\xab\xdd\xec\x26\x08\x5c\x56\x8a\x9d\x88\x4c\xaa\x43\x87\x4d\x3a\x16\xa8\x00\xfd\xad\x84\x6e\x0a\xb9\xaf\xfd\x58\xef\x78\x58\x87\x4d\xb3\x9e\xf0\xbf\x8c\x1f\xc4\xfd\xa4\xc5\x84\xed\xad\x77\x86\x98\xef\xb4\x71\xf6\xff\x65\xfa\x7b\xac\x1a\x4b\xba\x8a\x7f\xc3\x57\x75\x3e\xb8\x8d\xbb\xfd\xba\xec\x35\x1e\xbc\x03\xee\xe1\x60\x24\x79\x94\xea\x8b\x4b\x30\xe0\xb8\xf8\x08\x47\x78\x2e\x06\xd7\x6a\xc3\x1a\x5c\x47\x64\x12\x11\x31\x7b\xa3\x76\x2f\x35\x1a\x57\x52\xef\x9c\xc8\x72\xc6\x32\xb1\x46\x45\xc8\x85\xb2\x28\xe0\x53\x6a\xa3\x03\x00\x5c\x7a\xe1\xec\x30\x72\x69\xec\x81\x8f\x47\xff\x3a\xea\x1e\x45\x7c\x4e\x05\x69\xc9\xe1\x4f\x36\xb6\x72\xfd\xab\x91\x15\x5e\xa7\xb7\x86\x43\x56\x72\x56\xbd\xbd\x2d\x5b\x36\x76\x28\xe9\xea\x01\x3c\x80\xab\x3b\x9e\x66\x89\xe1\xb5\x19\x1a\x5f\x3e\xc8\xbe\x95\x33\xb1\x14\xa0\x21\xc2\x24\xf5\xb0\x24\x2d\x94\xf9\xe2\xd1\xc0\xc3\x02\xb9\xa2\xdd\x55\x69\xad\x56\x7b\xf8\x93\xf6\x2a\x2a\x23\xcc\x04\x55\x74\x73\xc2\x5b\x48\x5f\xc3\x69\xd7\xa7\xc3\x9f\xae\x0b\x71\x90\xbb\xe0\x90\x54\x11\x8b\xc1\xe3\xd0\x24\xa9\x14\xee\x93\xa1\x91\xff\x90\x2b\x5b\x70\x63\x03\x7e\x77\xb3\x38\xd5\x33\x96\x76\x5d\x7d\x66\x8c\x84\x33\x19\x3a\x05\x6e\x39\x60\xc4\x16\x29\x4d\xbc\x9b\xe6\x97\x4a\x95\xb6\xf1\x4e\xc3\xb9\x9f\xbc\x79\xfd\x33\x8e\x44\xd7\x36\xdc\xba\xa6\xfe\x00\xfd\x7a\xdc\xbf\x62\xde\x1f\xff\x85\xb4\x89\xcd\xe0\xbb\x6b\x24\x16\xf3\x31\x0f\x04\x1a\x9c\x9e\xb9\x70\xbb\x4f\xc0\x53\x1a\x1a\x9c\x9e\x3e\x76\x11\x55\xec\xf7\x74\xf7\x7b\x17\x51\xd1\x21\xbf\xc7\xe0\xc3\xfb\x74\xf7\xb1\x7b\x9a\x44\xb1\x04\xf4\x9d\x9d\xb9\x86\x8c\xcf\x5c\x16\x07\xc1\x99\xfe\xe3\x5e\x17\xaa\xec\xb9\xc8\x71\x1c\x07\x9d\xb9\xa7\xcf\x5c\xe4\xd3\x0b\xe4\xca\x28\x26\x67\xee\x69\xbf\xe7\x22\x88\x26\x84\x5c\x24\x04\xef\x8c\xf9\x95\x82\xfa\xfe\xcc\x55\x85\x3e\x7c\x60\x8e\xf9\xcf\x94\x0d\x93\x92\x06\x64\x2f\xa5\x34\xca\xa6\xce\x25\x95\x33\x67\x7f\x6f\xd4\xed\x76\x55\x89\x1f\xea\xea\xa1\xf3\x69\xae\x0f\x22\xf2\x90\x8b\x76\xb0\x10\x44\x8a\x1d\x3a\x9f\xee\x8c\x63\xb1\x00\x1f\x25\xdd\x29\x9d\xd8\x3e\xe5\xeb\xcb\xb7\x00\xd8\x08\x15\x7b\x20\x52\x11\xf2\xe0\xf4\x6c\xa9\xb1\x92\x42\xb8\x9b\x62\xd7\x50\xf5\x57\x43\xef\xfe\xde\xc8\xc9\x2c\x66\xca\x99\x33\xc1\x34\x88\x23\x52\x46\x6f\x53\x74\x9c\xb9\x68\x86\xc5\x8b\x0b\x1c\xa0\xc1\x04\x07\x82\x2c\xbf\xd3\x06\x58\xd7\x3a\x88\x14\x68\x3d\xd6\x2d\xa9\xee\x6c\x2c\xd0\x46\x0b\x72\xc2\xa3\x29\x97\xf7\x63\xcf\x55\x67\xa1\x91\x89\xed\x51\xb9\xdb\x80\x31\x11\x5a\xb3\x6d\x29\x2e\xaf\xcd\xa3\xdb\xa9\xe7\x69\x3d\xcc\x5c\x64\x92\xd2\x49\x2e\xd3\x3c\x6a\x77\x75\x89\x23\x2c\xc4\x25\x8f\x7c\x88\x9f\x77\x03\xbc\x96\xc4\x82\x2f\xe4\xea\xbf\x20\x21\xac\xde\xe6\xc7\xf0\x8a\x5c\xef\xb6\x0d\x1e\x60\xae\xde\x4a\x6b\x62\x60\x18\xbb\xa9\xfc\xee\xa6\x0a\x77\x35\xab\x6c\x2f\x5d\x08\xf0\x98\x92\x85\x46\x4b\x36\xa0\x87\x4a\x50\xe2\x34\x49\xe3\x06\xa7\x09\x02\x2f\x4e\x66\x98\x9d\x0b\x88\xe3\xa0\x9d\x8e\x9b\x87\xaa\x69\xaf\x93\xe0\xd2\xaa\x0c\x78\xd4\xdb\x13\x47\xb3\x08\x0b\xd2\x42\x2f\x61\xc6\x1c\x3b\xe3\x25\x37\xfd\x68\xcc\xfd\x85\xda\xd3\x7d\x7f\x5f\x31\x8f\xf2\x23\xa4\x0e\x1c\x92\x3a\xfd\x5e\xcf\xf1\x3b\x93\x80\x5c\x39\xbf\xc5\x42\xd2\xc9\xa2\x63\xcc\x0b\x3a\x1e\x61\x92\x44\x0e\x0e\xe8\x94\x75\xa8\x24\x73\x61\x92\xd4\xf8\x7d\x92\xe9\x73\x75\xdb\x11\x99\xf3\x0b\x72\x27\xcd\xaf\xf7\xa1\x5f\x22\xee\x7b\xb2\x91\x3f\xfc\xa1\xff\xe2\xe0\x22\x7e\xd2\x6c\x23\x5f\xb1\x17\xa8\xb1\x59\x84\xe4\xf6\x83\x0f\x1f\xe4\x9a\x6d\x04\x8a\x96\xf6\x91\x0f\x1f\xe4\xfa\xa2\x01\x9f\xf2\xaa\x62\x69\xc9\xdc\xb6\xdc\x37\xdb\xf2\xe9\xee\x0f\x76\x7f\x34\x6b\x51\x9d\x08\xcd\xab\x2b\xd8\x66\x76\x40\x35\xe5\xed\xa8\x06\x9e\x7b\xe3\xa1\x2a\xb3\xeb\xa2\x08\x33\x9f\xcf\x3b\xd4\x47\x67\x67\x67\xa6\x2f\x60\xb9\x82\x5c\x94\x44\xbb\x31\xe9\x58\x1d\xf1\x4a\xa9\xb6\xe7\x74\x3e\xed\x4c\x82\x58\xd5\x54\x14\x04\x8a\x43\xa8\x1b\x7c\x1c\x05\xb6\x70\xdf\x2d\x8e\x46\xf7\xea\xec\xcc\x85\xfd\x50\xd7\xed\xb4\x50\x25\x2c\x0e\xc3\x5f\xb8\x90\x05\xe8\x36\xaa\xe8\x55\x5d\xda\xea\x39\xa2\xac\x33\xe1\xd1\x7c\xc5\x4c\xa9\x4e\x7d\xef\xc2\x36\x62\x56\x48\x27\xb4\xcc\x44\x8b\x28\xa7\xa7\x48\x67\x28\x70\x00\xc6\xd6\x34\xea\x74\xf7\x91\xdb\x73\x4f\xd5\xbc\x25\x20\x5a\x2e\xc8\x8f\xa8\x7e\x14\x45\x41\xa3\x24\x76\xdc\x4c\xbc\x28\xac\xf5\xcd\x25\x8c\x73\x13\xa7\xe8\x7e\xc8\x18\x37\xea\xf9\x57\x3c\xdc\x7f\xde\x01\xfe\xdc\x83\xf8\x58\x77\x7b\xbc\xcf\x9d\xe2\xb3\xb2\xc4\xed\x9c\xdc\x93\xed\x1e\x15\xa2\x0c\x91\xae\xe4\xdd\x4c\xff\xe0\xc8\xdb\x7e\x6e\x4f\x07\x83\xea\xfc\xe4\xf4\x90\xb3\x97\xd5\xe7\xde\xac\x71\x77\x6d\x84\x2a\x56\x1d\x86\xeb\xd3\x27\xd9\xca\x46\xb8\xd2\xa8\x57\x82\x24\x91\x9e\x02\x9f\xd0\x80\xb4\xcc\x71\x9f\x54\x0c\x3c\x29\x30\xc7\xa1\x05\x27\xed\x8d\xd5\x0a\xe7\x49\x48\x31\xd6\x5c\xb7\x40\x4a\xba\x05\x62\x74\x0b\x99\x50\x59\x56\x05\xe0\x92\xf6\xa0\x2a\xd5\x6a\x23\x8a\xb3\x66\x11\xde\x36\x5a\x08\x68\x6d\x05\x50\x55\x83\x45\x05\xc6\xcd\xf5\x17\x9b\x89\xf1\x09\x0b\xb8\x27\xb2\xce\x7f\xcd\xfe\x67\x67\x46\xc2\xdd\xff\x14\xa5\x85\x5d\x5d\x7f\x69\x2e\x6e\x07\xc7\x16\x9f\x8d\xd5\x17\xb5\x95\x59\x11\x2c\x19\xa2\x59\x60\x19\x71\xe5\x0b\x2b\x42\x4a\x6b\x75\x73\x59\x05\x56\x40\x8d\xa0\xe2\x56\x47\xde\xbc\xdb\x73\x7c\x59\x82\x49\x4e\x85\xee\xea\x63\x7d\x56\x0d\xb2\x52\x88\x48\xf7\x15\x97\xb2\x0b\x1c\x50\x7f\x3f\x22\xbe\xa2\x0d\x1c\x88\xc1\x56\xdf\x8d\x88\xe2\xc6\xd9\x63\x74\x4d\x88\x4c\xbb\x7f\x0a\x22\xcd\xc0\x29\x11\xad\x6b\x7d\xfd\x8b\x90\x6b\xa5\x61\xed\xe1\xab\x55\x57\x1f\x84\xad\x6c\x67\xdf\x79\x95\x03\x50\xb6\x6b\xda\x52\xc2\xb7\x8e\xaf\x5a\x68\xce\xc4\xff\xb4\xe6\x41\xdd\x19\xc1\xbe\x16\x0e\x46\x60\xf3\xc7\xa3\x16\x3a\x0d\xcd\x74\x0d\xfd\xf1\x0c\x8b\xd9\x99\xbe\x44\x54\x47\xe7\x07\x24\xb9\xdc\xdf\xde\x46\xd7\xd7\xdd\x83\x9f\x15\xc4\x72\xa9\xc4\x88\x2a\xe5\x06\x48\x71\x0a\xb7\x32\x0e\x73\x31\xd0\x80\xc4\x5a\xed\x6b\x1b\x73\x74\x25\x42\x8b\xda\x98\xcc\x50\x11\xa0\x15\xa9\x45\x64\x15\x16\x1b\xcb\x0a\x7e\x12\xdc\x94\xa4\x82\x49\xab\x6e\x2c\x89\xbc\xe0\x92\x76\xbb\xeb\x61\xe9\xcd\x32\xb2\x85\xb9\xf5\x2c\x12\x10\x72\xb7\x7a\x6a\xdf\x5e\x31\x5c\x3d\xdf\xab\x86\x6a\x67\xf5\xf3\x46\x1b\xf8\x38\xfc\x02\x23\x5d\x6e\xa4\x4a\xd1\x1c\xe7\x9b\x50\x13\xae\x3e\x4c\x18\x33\x85\xcf\x38\x6a\x88\x19\xbf\x7c\xad\xd0\xa1\x98\xce\xad\x9e\x23\xca\xae\xf5\x2b\x85\x7b\x63\xe2\x59\x23\xe0\x67\x64\xde\xa4\xa7\xa0\x6b\xac\x12\xfa\xcd\x2a\x5f\x2d\x80\x83\xfa\x33\x95\xd7\xaf\xcb\x67\x2d\x23\x92\x2d\x97\x5a\x00\x76\xd5\x40\x49\x17\x8f\x79\x24\xb5\x2f\x0b\xc1\x03\xa2\x1a\x6b\x49\xd3\x8d\x8d\x5b\x30\x12\x09\xdc\xcc\x67\x5d\xc7\x97\xaf\x44\x07\x66\x85\x66\xe2\xe3\xae\x0e\xc9\xdb\x76\xd9\x90\x74\xe3\x28\x78\x88\x34\x9d\x3f\x37\x93\x3d\x44\x0f\x09\xf3\xb8\x4f\xde\x1f\x1f\xee\xdb\x20\xf6\x2d\xd2\x8d\x88\x4f\x23\xe2\xc9\xf7\x51\xd0\x7e\x70\x49\x99\xcf\x2f\xbb\xd6\x06\xbf\x1b\x91\x30\xc0\x1e\x69\x31\xc0\x85\xee\xea\xd2\xd0\x76\xcd\xdc\xf4\x34\xda\x2a\x8e\x0d\x29\xad\x65\xb8\x48\x52\xb2\xbd\x2c\x69\xa3\x07\xf9\x65\xd8\x44\x2d\x6d\xf6\xcd\x1b\xa8\xa2\x4d\x2f\xfe\x52\x40\xaf\xe6\x9a\xf7\xe4\x4c\xb6\x90\xaf\x7b\xe3\xff\x61\x2f\xef\x4e\xff\x9c\x3f\x68\x64\xa5\xee\x94\x66\xcf\x56\x9c\x26\x1a\xe9\x38\x57\xa9\xb0\x3f\x4b\x8b\xfd\xe7\x50\x64\xdf\x4f\x5d\x76\x8d\x3a\x3b\xed\x2c\xe8\xac\x93\x6a\x1e\x55\x6b\x9c\xed\xc1\xff\xf4\x14\x71\xf8\x8b\x44\x3c\x9e\x53\x09\x44\xb5\x7a\x4a\xeb\x90\xa1\xda\xed\x68\xef\x98\x6b\x48\xb9\x46\xf6\x5d\x4f\xcf\x15\xbd\x31\x8e\x20\x33\xfd\x99\xf0\xc8\xd0\xf6\x0b\x90\x97\xd3\xce\x24\xdf\xd5\x93\x5d\xd2\xeb\x43\x30\xf1\x0e\x65\x61\x2c\x53\x75\xbe\x04\x17\xb4\x08\x38\x88\x22\x24\x1f\xa5\x28\x80\xed\x6a\x66\x5c\x5e\xab\x2e\x70\x8f\xcf\xc3\x80\x48\xa0\x3f\x2b\xbf\x6b\x24\xe8\x0f\x35\x17\x69\x57\x0d\x12\xcd\x69\xd4\x99\xf3\x58\x10\x19\x29\x19\x16\x21\x37\x91\x89\x1d\x5b\xb4\x78\x4d\xb0\x4a\x7f\xb1\x6a\x06\x40\x1c\xbf\x75\xec\xbf\xb7\x22\x7c\x3a\x01\xd9\xa4\xaf\x34\x07\x92\x5c\x49\x3b\x05\xc9\x21\xc3\xce\xc2\xfb\xf4\xd4\x51\x3b\x11\x8c\xc8\x4b\x1e\x9d\x3b\xda\x2f\xa2\x93\x39\xa8\x64\xaa\xdb\x64\x66\x0a\xf8\xad\xc7\xcd\x37\xb7\xfe\x92\x8b\xf5\xb4\x3f\xd9\xa4\x86\x14\xb0\xc1\xdc\x97\x66\x3b\xbd\x8d\xd3\x23\x4f\xbe\xed\x8c\x27\xfd\xc9\xcf\xb8\xaa\x33\x8e\x22\x88\x71\x94\x16\xb9\xdf\xeb\xed\x3f\x19\xdb\x2b\xd7\x90\x53\xf8\x2f\x7b\x73\x4b\x77\x62\xda\x19\xc7\x52\xaa\x0d\xd2\x0e\xda\xb8\xa6\x45\x01\x9d\xce\x24\x4a\xb0\x8e\x38\xdb\x0f\xa8\x77\xae\xaf\x72\xd5\x00\xd3\x13\xa7\x8b\xf6\x4d\xa1\x57\x11\x21\xd0\x57\x35\x49\x6e\x19\xee\xb5\xa9\x6c\x44\xa7\xec\x10\x00\x6b\xaf\x85\xf3\xda\xf9\x8a\x5b\x61\xd6\x80\x43\xf4\x93\x09\x33\x62\x97\x1a\x36\x0b\x08\xa4\x18\xea\x2c\x6b\x36\x54\xf3\x94\x5d\x50\x41\xc7\x4a\x88\x31\x78\x46\x4e\x2e\xf0\x98\x33\x97\x9d\x47\x39\x89\xe1\x50\xd7\xe4\x78\xd9\xaa\x8a\x97\xd4\xb7\xcd\x8c\x4c\x9d\x01\x65\xe7\x1d\xc9\xd3\x69\xd4\x2a\x16\x45\x98\x70\x28\xb6\x97\xec\x67\x55\x55\x1a\x53\xa0\x05\x8f\x23\xc7\xd2\xe0\xf3\x26\xf7\x01\xcd\x68\x72\xbd\x51\xc2\xaa\x9a\x6e\xe5\x56\x3f\x7f\x80\xba\x91\xa2\x9c\xc7\xf7\xc4\x6c\xf0\x06\xfd\xfe\x66\x2f\xf4\xa1\xe3\xd1\xe7\x68\xd9\xec\x11\x3f\xfb\x4c\xa3\x4a\x93\x6a\xd8\x00\x28\x03\x32\x6a\xac\x65\xfb\x26\x74\x72\x4f\x4e\xea\xaf\x16\xa3\xe9\xa3\xab\x45\xc3\xdb\xd3\x9b\xdc\xbd\xd5\xdd\xbb\xbd\xe6\xd3\x29\x65\x53\x87\xc7\xb2\xf2\x2a\xf3\xb6\xae\x31\x6f\xcd\xec\xa7\x30\x71\x9b\x73\x08\xd0\x7e\xdd\x0f\x06\x71\xfb\x76\xc5\x99\xab\xa5\xe4\x37\x68\x3d\xa3\x39\x3c\x65\x89\x85\x7c\x83\xa5\x37\x1b\x6c\xf5\xd3\x9b\x1f\xad\x0f\x5c\x6f\x79\x0c\x70\x89\xe1\x31\x40\x81\xba\x27\xb9\xba\xa8\xd6\x27\x9b\xbb\x8b\x9c\x4d\xed\x86\xd6\x0e\x7a\xce\xee\xc7\x65\x04\x0c\xb9\xca\x60\x9b\x74\x25\x3f\x27\xec\x06\x6a\xd5\x63\x35\xbc\xbf\x0c\x7c\x1b\xe8\x57\x35\x21\xdc\x13\xae\x3d\x7f\xbb\xe0\x61\xc0\x26\x7f\xd9\xf7\xde\x43\xb5\xe8\x3d\xd4\x89\xd6\xa5\x65\xed\x73\x2d\xd3\xee\x00\xa5\x67\x4e\x09\xf0\xb9\xca\x3a\xd7\x42\xd4\x1b\xe7\xde\x91\x21\x6e\x7e\x4d\xde\x60\x43\xfe\x7a\x32\xef\x26\xdd\x84\xc8\x5d\xf7\x43\x6e\x58\x2d\x8b\x6f\x3e\xa8\x8a\x8d\x55\x3f\xe1\x16\x74\x1e\x06\xa4\x03\xa0\x19\xdb\x22\x6b\xc8\xe0\x77\xa0\x64\x07\xb2\xbe\xe4\x26\x9c\xb1\x35\x5a\x73\x6c\x69\x72\xf2\xc8\x3f\x33\xca\x3c\xa3\xcf\x94\x45\xed\xae\x17\x10\x1c\xed\x05\x41\xcb\xde\xda\xe6\x84\x80\xf4\xa2\x57\x1b\x69\x1c\xfa\xc8\x25\x5d\xea\x67\xed\x46\x45\x10\x4f\xe1\xdd\x7d\x10\x4f\x73\xe9\x24\xa2\x38\x80\x1c\xf8\xf5\xf9\x6f\x8e\x4c\x85\xa6\x09\xa8\x33\xc9\x83\x4e\xe8\x1c\xe8\x07\x29\x76\x1b\xf2\xec\x67\xf3\x6b\xe2\x7f\x53\x39\xe3\xb1\x1c\xc5\x93\x09\xbd\x6a\xa1\x7f\x93\xc0\xe3\x73\xe2\x48\xee\xa4\x76\x43\x1b\x6d\xf6\x9a\x38\xef\xc9\x66\x7f\xf5\xbf\x8f\x5e\x04\xd1\xcb\xff\x6e\xb6\xd9\x3f\x71\x51\x80\x17\xea\xa0\x32\xc7\x42\x92\xa8\xc3\xf0\x05\x9d\xda\x10\x4d\x70\xa1\xf5\x7f\x67\xd4\x27\x6f\xd3\xe4\x33\xf7\x14\xf6\xa9\xb3\x1c\x87\x2e\x55\x24\x39\x0f\xc6\x38\x32\xb5\x9c\x29\xde\x9f\x55\xb5\xe5\xcb\x4c\x23\xea\xef\x64\x83\xfc\x24\x65\xaa\x15\x56\x76\x97\x28\xd4\x20\xa8\x4f\x0a\x6d\xd6\x97\x5f\xbf\xf7\x9a\xea\xac\x70\x78\xb3\x7b\x5d\xeb\xbc\xf7\xa6\xf7\x80\x66\x8f\x4f\x4a\x5f\xa6\xe4\xea\x67\xc4\x8e\x95\x77\x1c\xe5\xd3\x34\x91\x1f\xbe\x13\x8e\x92\xe6\xe3\x50\xab\xe9\x8c\xcf\x13\x07\x33\xdf\x99\x12\xd0\xdd\x39\x42\xe2\x48\x92\x3a\x7d\x77\x23\xd1\xa1\x4a\x11\x97\x57\xb9\x56\x4d\xa4\xc5\xf8\x26\x13\x69\xa4\x13\x53\x8d\x92\xe9\x3a\x33\x82\x75\xf4\x97\x44\xff\x6e\xc4\x38\x9f\x08\x2f\x23\x59\xd6\xca\x55\xc5\x8c\x8c\x8d\xae\x5d\x03\x15\x4a\xe4\x42\x8f\x38\x1b\x73\x1c\xf9\x9a\x4d\x74\x6c\x08\x5f\xdb\x25\xcb\x02\x33\x7c\x4d\xb3\xbe\xa4\x5f\x06\x22\xe9\x4e\x02\x98\xa4\x68\xf8\x3a\x61\x6a\xc5\x04\xac\xcf\xbc\x99\xa8\x95\xe7\x88\x9b\x8b\x5a\x42\xf0\xfb\x21\xc1\x6c\xda\xe9\xaf\x28\x23\x6a\xfb\xc1\xd1\x85\x57\xa3\x7d\xd1\xf9\xeb\x8c\x99\x37\x97\x44\x48\x23\x51\x64\xdd\xd3\xa3\x49\x94\x33\x58\x2e\xd4\x23\x88\x7c\x49\x23\x21\x8f\x63\xd6\xca\xfa\xe0\x08\x88\xbc\x06\x65\xc6\x40\x2e\x87\xe4\x33\xcc\x77\x7d\x52\xb2\xa6\x93\xed\x92\xb6\xa8\xaa\x6b\x54\xa4\x3d\x7b\x9e\x42\x25\xb3\x81\xda\x5d\xc3\x00\xd6\x59\x33\xa6\xcf\x89\xca\x26\xb3\xb5\x90\x83\xd5\xef\x92\x56\x5a\x4e\xa6\x4a\xae\xa6\xa2\x53\x0b\x8d\x46\xef\x8a\xd2\x51\x83\x65\x71\x4f\x64\xa3\xde\x0f\x7d\x79\x8c\x79\xfc\xe5\xd5\xd7\x23\x3a\x65\x94\x4d\x1d\xca\x6e\x59\x7b\x9d\x2a\x21\x54\xd6\x1d\xea\xb3\xb3\xd3\xb8\x39\x43\xbf\x2f\x04\xb0\xb8\x7a\xf2\xf0\xbf\x7f\xa7\xcd\x08\xa0\xaf\xf5\x41\x3c\x96\x01\x68\x2c\x2a\x2e\xd0\x6f\x86\xcb\xd5\x78\x2c\x7b\x19\x87\x92\x5e\x2c\x24\x87\x4f\xed\xb5\xa4\xe1\x1b\x1b\xc6\x25\x38\x34\xfb\x9a\xef\x6c\x56\x9b\xb6\xaf\xb9\xb1\x5b\x77\xdf\x67\x6f\x07\x38\x1b\xe1\x0b\xd2\xcc\xd6\xbd\xb4\x51\x74\xa9\x78\x05\x9d\xdc\xf3\xe7\x8a\x27\x96\x38\xb9\x62\x82\xf8\x82\xec\x25\xd6\xd9\xad\xfc\x65\x42\x0b\x78\xb1\x7e\x9e\xc9\xd9\x68\xc1\x3c\x6b\xf6\xde\x5a\xd7\x21\x92\xeb\x50\xda\x5c\xae\x0e\xdd\x16\x98\xaf\xb7\xa4\x79\xc9\xa9\xdb\x79\x7d\xb0\x77\xf4\x39\x6d\xe8\xf2\xd5\xf5\xeb\xf8\x4b\xf9\x2d\x3e\xdd\x5a\xf5\x15\x57\x2b\xab\x21\xa8\x7c\x17\xe0\x92\xdc\x77\x1d\xbc\xb1\x7a\x37\xd0\xfa\xab\xed\x16\xad\xd8\x67\x11\x99\x0c\xd1\x0e\x6a\xfc\x4a\xa4\xb0\x6e\xbe\x65\x1d\xd2\xe7\xad\x94\xd5\xab\xb0\x4e\xb9\x54\xb3\x40\x8c\xb0\xb6\xca\x1d\xcd\x7c\xbd\x3f\x1c\x57\x0e\xaf\xb3\xa4\x31\x58\xf7\xc2\xc4\x4d\x49\x63\xa0\x4e\x50\xcb\x07\xab\xe9\x9e\x55\xd3\xfd\x94\xc8\xcc\x4a\x36\xc4\xcf\x87\x3f\x5d\xdb\x87\x2e\x79\x82\xb5\x9e\xcb\xab\x9f\xb5\x54\x65\xaa\x45\x55\x99\xb1\xbf\x37\x1a\xc8\x0c\x81\x0f\x79\xf6\xcd\x48\x8d\xef\x9f\x7c\x09\x84\x96\x2c\x59\xa3\x8d\x05\xb7\xbd\xdc\x7b\xd5\xe6\x1a\xae\xc2\xf2\xb9\x27\x1b\x39\x7f\xf6\xee\xb7\x88\x9c\x34\xd4\x72\xdd\x40\x35\x40\x3d\x63\xc8\x5d\xc0\x9b\x8b\xf6\x67\x9c\x0b\x02\x96\xaa\xc5\x47\xc0\xa1\x99\x38\xe7\xff\xfd\xff\xff\x3f\x89\x32\xd1\x75\x8e\x89\x3f\xc3\x32\x79\x8a\xed\x3a\x8a\x3a\x76\xf6\x0e\x5c\x67\x9f\x30\x19\xe1\xc0\xc9\x37\xe2\x8c\x48\x74\x01\xfb\x7a\xc9\xdc\xed\xd0\x83\x3e\xbc\xe6\xde\x39\xf1\x6b\x8e\xfc\x2c\xa3\x7b\xc8\xcf\x5e\x47\x10\x29\x29\x9b\x8a\x74\xd8\x79\x46\x8d\xb2\x7c\x18\xe9\x1d\x55\xff\x30\x1b\x45\xf2\xf1\xcf\xe4\x4d\x14\xb2\xdb\x44\xaa\xb1\xb0\x8f\x2b\x72\x95\x27\xda\x8a\x6c\xae\x69\x6b\x95\xd9\x9e\xe9\x85\x35\x9a\x5b\x05\x67\x3b\xd9\x10\x36\x19\x43\x03\xf8\x64\x88\x35\xd7\x56\x37\x93\x06\x6b\x16\xd7\x46\xf2\x75\x5a\xc7\x18\x7b\xe7\x71\x78\x3f\x14\x27\x6b\x44\xbe\x54\x68\xfb\x19\x3a\x5d\x69\xd5\x91\xb0\xeb\xb1\x85\x51\x32\xc9\x31\x11\x92\x47\x44\xef\xbb\xf5\x65\xa2\x0c\x58\x63\x23\x8e\x12\x2e\xff\x92\x16\x6e\x2a\x2d\x6c\x2e\x27\x6c\xb0\x99\x69\xa2\xd9\x31\xa4\x70\x93\xcd\xcc\xcc\xef\x3d\xd9\xce\x08\x79\xb9\x23\xfe\x78\xc4\xee\x7e\x3b\xd3\x98\x73\xb6\x1d\x8b\x3b\x17\xbd\x80\x71\x3b\x38\x08\x1c\xa3\x77\x77\x24\x77\x04\x09\x26\x1d\x7b\x25\xe3\x3b\x82\xb2\x69\x40\x9c\x3f\x68\xe8\x4c\x20\xb0\x5d\xed\xde\x74\x80\x25\x1e\x63\x41\x36\xda\x9d\xf4\x74\x74\x22\xdb\x29\x3b\x0c\xcb\x1f\x60\x9b\xb1\x5d\x5e\x65\x5d\x90\x14\x68\xc0\xd3\xd3\xfa\xee\x88\xa9\x17\x88\xec\x86\x6c\xfd\x5e\xf0\xf3\x5b\xb9\xca\x4f\xc7\x64\x54\x94\xf7\x63\x6c\x37\xee\xfd\xb7\xbc\x3b\x54\x70\xf0\x02\xf3\x6e\xc0\xba\x1b\x33\x6c\x1d\x2f\xd1\x81\x68\xbf\xe2\x26\xfc\xda\xa2\xfc\x9e\x30\xec\xf9\xc3\xa7\x33\xef\xdf\xff\x9c\xde\x3d\xc3\x36\x28\x73\x91\x8e\xed\xe8\x40\xf0\x25\xe1\x3a\x12\x9f\x13\x87\x5f\x32\x12\x89\x19\x0d\x1d\x3e\x71\xe0\xd2\xcd\x87\x0b\x5c\x1e\x85\x33\x0c\x6c\xdb\x94\xae\xe5\xd6\xaf\x22\xba\xf6\x1c\xb1\x9b\xe5\xd4\x3a\x8c\x28\x84\xfb\x48\x54\xa2\x9f\xc7\x25\x8b\x53\x7b\x43\x36\xa9\xc3\x51\x04\xf7\x83\xa5\xf0\x68\xba\xda\x60\x9a\x47\x53\xcc\xe8\x1f\xe6\x30\x9e\x15\x88\xdf\x87\xfa\xcd\x40\x59\xb6\x4d\x2b\x35\xda\xc8\x8c\x6d\x73\xd7\x0c\xbf\xf0\xd4\xc0\xe5\xec\x40\x77\xfc\x35\x9f\xf2\x4a\x29\x3b\x57\x6b\x2c\x48\x1e\xfe\x06\xa2\xb3\x9d\x88\x6f\x99\x3b\x6e\x3c\x7f\x9f\x25\x6b\xdf\x85\x34\x5d\xd4\xba\x59\x7d\x1a\x44\xdc\x4c\x83\x05\x66\x74\x66\x33\x2c\x66\xad\x6b\x33\x7b\x83\x1a\x02\x99\x12\xf9\x2e\x9a\x2a\xc2\xd8\x84\xfd\xbf\xd2\x95\x3a\x23\xab\x7f\xb8\xc1\x0e\x60\xc9\xea\x9e\xec\x00\xfd\xe8\xe2\x32\x98\x06\x8f\xee\x7e\x07\x30\xc8\x43\x2e\x7a\x07\xc1\xaf\x85\x12\xcf\x67\x24\x00\xc3\x1d\x27\x41\x50\x6a\xbd\x56\xcf\xed\x13\xfc\x6f\x22\x9b\x1b\xc4\x57\x28\x8f\xac\x26\xc7\x32\x2d\xf8\x99\xe1\x1f\x45\x8d\xd0\x6a\x35\x8f\xa9\xa3\x81\xe0\x9e\x6f\xe2\x8e\x84\xf7\x22\xbd\xdd\x74\x5b\x82\x90\x51\xf7\x63\x57\xba\x69\xe7\xbf\x65\x4e\xfe\x65\xe5\xdc\x57\x80\xb0\x1b\xb1\x37\x8d\xea\x7b\xc2\xdd\x9e\xbd\x3e\x7f\x82\x9f\xec\x2e\xee\x9e\xbb\xbd\x17\x24\x72\x0c\xda\x94\x90\xab\x46\xe5\x68\x64\x38\x13\x1e\x39\x04\x0b\x4a\x22\xa3\x6e\x67\xbe\x93\x06\xb0\x77\xe6\x70\xa8\x98\x6b\x43\xc1\x3a\x96\x77\x44\x78\x18\xac\x55\x46\xe4\x44\x5c\x88\xe8\xaa\xbb\x70\x4b\x22\x6e\x61\x72\x6f\xc8\x4a\x28\x93\x64\x1a\x81\xc8\xf1\xad\x32\x94\xdc\x10\xbe\x65\xb6\xf2\x1f\x23\x20\xae\x37\x95\x28\x89\x90\xbf\xd1\x08\xaf\x96\x1f\x8d\x1c\xa2\x66\x45\x01\xa3\xb6\x2b\x23\x12\x04\x7c\x45\x29\xdd\xa6\x2d\x88\x46\x2f\xf6\x4f\x0e\xdf\xbd\xed\x9c\x1c\xbf\x78\xfd\xfa\x1d\x58\xc2\xdd\x66\x3f\xae\x71\x18\xfe\x93\x2c\x06\x08\xfc\xfa\x35\xe7\xff\x87\x19\xfa\xbe\xc9\x2e\x90\x5b\x1f\xf7\x64\x2f\x88\xdf\x8c\x7e\xfb\xe5\x70\x34\xba\xfb\xbd\x20\x87\x3d\x17\xbd\x60\x78\x1c\x10\xe0\xfa\x1e\xdc\x13\xc6\x11\x51\xf4\x18\xf9\x4e\x88\x23\xb9\x70\x68\x0e\xbe\x76\x0b\xc8\x55\xbb\x89\xe4\x9b\xa9\xbf\x42\xfa\x05\x8a\x71\x91\xa6\x98\xf2\xe5\x27\x64\x97\x2e\x3d\x2d\xf4\x1d\x08\xac\x95\xb4\x73\xc3\xad\x06\x7c\xb4\xd4\x6d\x32\xf7\xd3\xc8\x0c\xba\x5c\x6f\xfe\xac\xbd\xce\xb4\xdd\x80\x63\x3f\xff\x7a\xca\x94\x33\x66\x21\x41\x90\x8d\x31\x90\xf7\xb2\x1f\x20\x37\x3d\xf8\x1a\x75\xcd\x9e\xef\x17\x4c\xa0\xd3\xfa\x30\xe4\x15\xad\x7e\x75\x0f\xb4\x11\x14\x20\x6e\x31\x8a\x3d\x8f\x08\xd1\xd2\xde\x6c\x1c\xec\xfb\xc4\x47\x6d\xab\xbe\x09\x88\x24\xb5\x4d\xf8\x36\x7b\xe3\x56\x74\xc9\xa4\x1d\xa3\x76\xaa\x6b\x27\xb6\xd9\x1b\xb7\x23\xf0\x85\x69\x65\x73\x76\x68\xc8\xf0\x5b\x16\x14\x1a\x92\xe5\xfd\x93\x0f\x4a\xfb\x7f\xc5\x42\xd9\xc4\x70\x3c\xc4\x1e\x71\x80\x24\x6e\xb4\x33\x1a\x52\xb8\x27\x7b\xe2\xff\xbe\xf9\xe3\xe8\xe7\xe9\xd3\xf1\xdd\xef\x89\x06\x63\xae\x3e\x5a\xc2\x66\x68\xde\xe8\xd9\xbb\x00\x1d\xe8\xe1\x82\x8a\x18\x07\x4e\x60\xc0\x6b\x37\xc3\xfd\x19\xf1\xce\xc1\x76\x7d\x83\x8d\x50\x2b\xfd\x6d\xdd\xb6\xcb\xf6\x1b\x01\x17\x34\xca\x1f\x70\x5f\x96\x53\xe7\x6c\xa0\x02\x52\xd5\x34\xd2\xff\x18\x27\x69\x6b\x21\xf3\x3a\xa5\xdb\xdf\x73\x0b\x54\x79\xc3\xdd\x56\xf1\x4d\xef\xcf\x79\xd1\x6b\x86\xf6\x2d\x73\xf0\x3f\xb1\x1d\xcd\x5b\x98\x9d\x1b\xf1\x63\x33\xb1\xf7\x84\x1f\xff\xfa\xbf\xd1\x0b\xf1\x78\x8c\xef\x9e\x1f\x9f\xc0\xf9\xe3\x08\xce\x1f\x16\x7d\xa9\x07\x10\x27\x96\x34\xa0\x7f\x10\xe1\xf0\x90\x30\x47\xf0\x38\xf2\x88\x13\xd0\x71\x84\x23\x4a\x84\x39\xcb\x98\x27\x66\xc2\x99\x44\x7c\x9e\x39\xd1\xd0\x95\x57\xb5\x7b\x8c\xf1\x98\x79\x2b\x75\x59\xcf\x5c\x14\x46\xa4\xf8\xfa\xe8\xc3\x07\x36\x93\x32\x14\x83\x9d\x9d\x29\x0f\x30\x9b\xaa\x43\xbe\x2e\xb4\xcf\xc3\x45\x44\xa7\x33\xe9\xb4\xbc\xb6\xb3\xdb\xeb\xfd\xe0\x9c\xcc\x88\xf3\x8a\x83\x4d\x2a\x8f\x44\xd7\xd9\x0b\x02\x07\x40\x84\x13\x11\x45\xba\xc4\xef\xea\xc2\xc7\xc4\xa7\x42\x46\x74\x1c\x83\xd9\xaa\x1a\x5c\x2c\x88\x43\x93\x81\xab\x94\x31\x65\x38\x5a\x38\x13\x1e\xcd\x85\xab\xf7\x2a\x1e\xc1\x5f\x1e\xcb\x0f\x1f\x98\x8e\xb8\xaf\x2d\x5f\x5d\x07\x47\x44\xab\xf8\xa4\x24\xbe\x35\xa8\xf5\x1d\x39\xc3\xd2\x91\x33\xe2\x4c\x78\x10\xf0\x4b\xca\xa6\xea\x48\xe8\x53\x7d\x1f\x82\x23\xa2\x2a\x22\x72\xa0\xfb\xf5\x77\x27\xdf\x33\x01\xd7\xe3\xba\x4b\x1e\xf7\x89\x33\x8f\x85\x74\x22\x22\x31\x65\x50\x2b\x1e\xf3\x0b\x95\x65\x70\xf1\xe1\x03\xd3\xe4\xed\x82\xf8\xe3\x04\x54\x48\x55\x45\xb6\x49\xe6\x17\xfa\xe3\x53\xe1\x05\x98\xce\x49\xd4\xad\xec\x02\x65\x59\x54\xd8\x2e\x84\x11\xf7\x63\x8f\xa4\xbd\xf8\xf0\x81\x25\xfd\x70\x3e\xa7\x17\x1f\x3e\x30\x33\x3a\x1b\xb3\x05\xdb\x59\xda\xe1\x91\xc3\xe5\x8c\x44\xce\x1c\x4b\x78\x5d\x2c\x52\x54\xc3\x0c\xc9\x99\xea\x48\x76\x00\x7a\x50\x6f\x09\x85\x72\xaa\x5a\x70\x9e\xcc\x27\xce\x2b\xce\xa7\x01\x71\x0e\x99\xd7\x75\x18\x4f\xf3\x00\xeb\x54\x0a\x18\x11\xd3\x15\xf1\x48\x38\x73\xbc\x70\xc6\x60\x40\xed\x3b\x92\x3b\x84\xf9\x3c\x12\x44\x11\x45\x18\xf1\x39\x97\xc4\xd1\x48\x91\xc2\xf1\x49\x44\x2f\x88\x0f\xeb\xe4\xc3\x07\x06\x68\x10\x7c\x22\x2f\x15\x99\x18\x12\x72\x44\x48\x3c\x45\x41\x4e\x18\x51\x45\x59\x91\xa2\x1d\x96\x51\x14\x1b\x6a\x3d\xf9\xe5\x70\xe4\x8c\xde\xbd\x3c\xf9\xf7\xde\xf1\x0b\xe7\x70\xe4\x1c\x1d\xbf\xfb\xd7\xe1\xc1\x8b\x03\xe7\xe7\x5f\x9d\x93\x5f\x5e\x38\xfb\xef\x8e\x7e\x3d\x3e\x7c\xf5\xcb\x89\xf3\xcb\xbb\xd7\x07\x2f\x8e\x47\xce\xde\xdb\x03\x67\xff\xdd\xdb\x93\xe3\xc3\x9f\xdf\x9f\xbc\x3b\x1e\x41\x45\x68\x6f\xe4\x1c\x8e\x3e\x7c\x40\x90\xbd\xf7\xf6\x57\xe7\xc5\xff\x1c\x1d\xbf\x18\x8d\x9c\x77\xc7\xce\xe1\x9b\xa3\xd7\x87\x2f\x0e\xfe\x3f\xf6\xde\x75\xbb\x8d\x23\x59\x17\xfc\xdf\x4f\x91\x1b\xb3\x4e\x37\x30\x53\x04\x45\xd9\xee\x6e\xcb\xcb\x7d\x1a\x22\x21\x09\x36\x6f\x4d\x90\xd6\xd6\x32\xbc\x7a\x12\xa8\x04\x90\x62\xa1\x12\xce\xac\x22\x05\xfb\xf8\x35\xf6\xdf\xf9\x3d\xaf\x31\x8f\x72\x9e\x64\x56\x46\x44\x5e\xaa\x00\xf0\x06\x68\x4b\xee\x46\xaf\x73\xb6\x45\xb2\x2a\x2b\x33\x32\x33\xae\x5f\x44\xb0\xb7\x9d\x8b\x8b\xce\xe9\x65\xaf\xdb\x4f\x58\xef\xf4\xf0\xf8\xea\xa8\x77\xfa\x3a\x61\x2f\xaf\x2e\xd9\xe9\xd9\xe5\x60\x90\x1f\xf7\x4e\x7a\x97\xdd\x23\x76\x79\x96\xc0\xc7\x97\x5f\x64\x67\xaf\xd8\x49\xf7\xe2\xf0\x4d\xe7\xf4\xb2\xf3\xb2\x77\xdc\xbb\x7c\x07\x5f\x7c\xd5\xbb\x3c\xb5\x5f\x7b\x75\x76\x31\x18\xe4\x1d\x76\xde\xb9\xb8\xec\x1d\x5e\x1d\x77\x2e\xd8\xf9\xd5\xc5\xf9\x59\xbf\xcb\xec\x02\x8f\x7a\xfd\xc3\xe3\x4e\xef\xa4\x7b\xd4\x66\xbd\x53\x76\x7a\xc6\xba\x3f\x74\x4f\x2f\x59\xff\x4d\xe7\xf8\xb8\xba\xde\xc1\x20\x3f\x7b\x7b\xda\xbd\xb0\x0b\x88\x97\xcb\x5e\x76\xd9\x71\xaf\xf3\xf2\xb8\x6b\x3f\x06\x4b\x3d\xea\x5d\x74\x0f\x2f\xed\x9a\xc2\xbf\x0e\x7b\x47\xdd\xd3\xcb\xce\x71\x32\x18\xe4\xfd\xf3\xee\x61\xaf\x73\x9c\xb0\xee\x7f\x76\x4f\xce\x8f\x3b\x17\xef\x12\x1a\xb5\xdf\xfd\xc7\x55\xf7\xf4\xb2\xd7\x39\x66\x47\x9d\x93\xce\xeb\x6e\x9f\x35\xef\xa5\xcc\xf9\xc5\xd9\xe1\xd5\x45\xf7\xc4\x4e\xfc\xec\x15\xeb\x5f\xbd\xec\x5f\xf6\x2e\xaf\x2e\xbb\xec\xf5\xd9\xd9\x11\x50\xbc\xdf\xbd\xf8\xa1\x77\xd8\xed\x7f\xc3\x8e\xcf\xfa\x40\xb4\xab\x7e\xd7\x4e\xe5\xa8\x73\xd9\x81\x8f\x9f\x5f\x9c\xbd\xea\x5d\xf6\xbf\xb1\xff\x7e\x79\xd5\xef\x01\xf5\x7a\xa7\x97\xdd\x8b\x8b\xab\xf3\xcb\xde\xd9\x69\x8b\xbd\x39\x7b\xdb\xfd\xa1\x7b\xc1\x0e\x3b\x57\xfd\xee\x11\x90\xf9\xec\xd4\x2e\x18\xce\x4d\xf7\xec\xe2\x9d\x1d\xd8\xd2\x02\xf6\x21\x61\x6f\xdf\x74\x2f\xdf\x74\x2f\x2c\x65\x81\x62\x1d\x4b\x8a\xfe\xe5\x45\xef\xf0\x32\x7e\xec\xec\x82\x5d\x9e\x5d\xd8\x55\x85\xb5\xb2\xd3\xee\xeb\xe3\xde\xeb\xee\xe9\x61\xd7\xfe\xfd\xcc\x8e\xf3\xb6\xd7\xef\xb6\x58\xe7\xa2\xd7\xb7\x0f\xf4\xe0\xd3\xec\x6d\xe7\x1d\x3b\xbb\x82\x85\xdb\xed\xba\xea\x77\xed\x46\xd9\x1f\xa2\x83\x9c\xc0\xb6\xb2\xde\x2b\xd6\x39\xfa\xa1\x67\x27\x4f\x8f\x9f\x9f\xf5\xfb\x3d\x3a\x36\x40\xba\xc3\x37\x44\xf8\xb6\xaf\x76\xeb\xa5\x82\x2c\xa6\xe5\xb0\x3d\x52\xb3\xfd\x89\xd2\x32\xcb\x38\x96\x60\xf8\x50\xdc\xfd\xd0\xac\xfc\xb0\x5a\x8c\x1c\x3c\x67\x17\x2a\xd5\x72\xa2\xd8\x89\xd2\x5c\xec\xc4\xc8\x4e\x8c\xec\xc4\xc8\x4e\x8c\xec\xc4\xc8\xbf\x89\x18\xb1\xfc\x71\xc2\xf3\x89\x29\xf8\x7e\x2e\x26\x5a\xe5\x92\xae\xcf\x54\xb0\x93\xde\x25\x3b\x96\x23\x91\x1b\xc1\x9a\x27\xbd\xcb\xd6\x1a\x21\xf2\x25\xfb\x4e\x68\x31\x5b\xb0\x3e\x17\xf9\x2f\xf8\xd0\x79\x88\xff\x4b\xc3\xa6\x42\x8b\xe1\x82\x4d\x34\xcf\x0b\x91\x26\x6c\xac\x05\x30\x93\xd1\x94\xeb\x89\xe5\x78\x8a\xf1\x7c\x61\x2f\xb1\x51\x39\x53\x43\xcb\xaa\x2d\x7f\xe3\xc0\xa5\x07\x83\x5c\x8d\x59\x95\x1d\x58\x5e\xc8\x8d\x51\x23\xc9\xad\xe8\xa8\x32\xbd\xb1\xcc\x84\x61\x4d\xcb\x9a\x06\x83\x46\x9f\xde\x19\x0c\x1a\x2d\xf8\x54\x2a\x78\x16\xf8\x65\xbf\xce\x61\xb4\xb0\x7c\x70\x84\x12\x4a\xe6\xa3\xac\x4c\x5d\x9f\x56\xfb\xe7\x4c\xce\x24\x7d\xc7\xbe\x8e\xb2\xd2\xb2\x2b\x65\x99\x5c\x02\x33\x4e\x18\xc8\x39\xfb\x5f\x01\x0b\x84\x12\x96\x66\x9a\x30\xcf\x64\x45\xc2\x0c\xd4\xb5\xb4\xe4\x4d\x1c\x9f\x36\x22\xcb\x50\x26\x48\xe4\xa8\xf1\x0c\x13\x94\x00\x8a\x44\x26\x91\x0b\x70\x66\xb7\x53\xb0\x50\xa3\xd5\x48\x3b\xa7\x71\xa9\x73\x69\xa6\xc8\x7a\x53\xc5\x8c\x82\xaf\x5a\x4b\xdf\xfe\x66\x9d\x88\x7d\x11\xce\x40\x4d\x56\x92\x8c\x22\x51\x24\x4d\x8c\xf3\xa0\x3f\x99\x29\xcf\x32\xcb\xf2\x91\x74\x22\xb5\xb2\x90\x57\x96\xa5\xed\x24\xc0\x6e\x96\x3c\x63\x73\xa5\xbd\xd8\x8e\x97\xe0\x19\x79\x77\x35\x1f\x8f\x78\x73\xc2\xde\xf6\x2e\xdf\xd8\xdb\x43\x0c\x15\x2e\x81\xbd\x55\xdf\xf7\x4e\x8f\x92\x88\x65\x0f\x06\x39\xf1\xde\x88\x53\x3b\x76\xc4\x02\x33\x82\x4b\x75\x27\x77\xb6\x4c\x27\x62\xce\x6c\x35\x6b\x3e\x3d\x62\xa7\x67\xa7\xbd\xd3\x57\x17\xbd\xd3\xd7\xc0\xd9\xd6\xf0\x67\xcb\xdc\xaf\x2e\xdf\x58\x3e\x0c\x1c\xb4\x2e\x9c\x96\x99\x33\xf0\xfb\xc4\xb3\x57\xc7\x5c\x80\xa7\xae\xe2\x5c\x9d\x53\xd6\x81\x68\xbc\x5d\x4c\x60\x63\x96\x63\x55\x38\x53\xe2\x39\xd3\xab\x8b\xb3\x13\xbb\x4c\x62\x4b\x67\x8e\x01\x9e\x62\x54\x1f\x88\xce\x2a\xfb\x63\x39\x20\x32\x2f\x3f\x24\x3b\xea\x76\x8e\x7b\xa7\xaf\x2d\x13\xa6\x85\xba\xc7\xef\x64\x4d\xe9\x44\xcb\xf7\x3c\xbb\xe1\xfb\xef\x6f\x8b\xbd\x89\x5a\xab\xc1\x1e\xf1\x1b\xc1\x5e\xd3\xc3\xdb\xe7\x3e\x6c\xeb\xbc\x87\x6d\x93\xf3\xb0\xad\xf1\x1d\xb6\x15\xae\xc3\x3e\x27\x9e\xc3\x3e\x03\x8e\xc3\xb6\xc5\x6f\xd8\x16\xb9\x0d\xdb\x0e\xaf\x59\xa3\x23\x3d\x91\xd3\xb0\xad\xf2\x19\xf6\x20\x2e\xa3\x4b\x63\xb4\x32\x66\x7f\x98\xf1\xd1\xf5\x58\xcb\x94\x2f\xf0\xe1\x97\xe1\x17\xf6\x58\x87\x0b\x94\xb2\x32\x4f\xc9\x2a\xea\xcb\xd9\x3c\x93\x63\x29\x52\xf6\xb2\x7f\xe4\xb4\x25\x3a\xcb\x7f\x63\x81\x5b\xfd\x7f\xff\xaf\x65\x56\x07\xec\xa2\x34\x86\x5d\x28\x63\xe0\xef\x6b\x8c\xed\xbf\xc1\x1f\xb7\x62\x6f\xff\x8d\x6d\x6e\x71\xc3\x30\xf6\x45\xb2\xb9\x71\x7a\x07\xed\xcd\xed\xee\xbf\x6d\x64\xf3\x06\x52\x3d\x5f\x9e\xcb\xc3\x0d\xf0\xbf\x2d\xb1\x9a\x47\x4c\x07\xde\x0f\x53\x62\x4f\x36\xc2\x61\x20\x78\xb5\x66\x86\xe3\x0a\xb7\x63\xce\xfe\x8d\x6d\xcb\xa0\xfd\x1b\xdb\xd8\xa4\x85\x51\xd6\xf3\xb2\x87\x18\xb5\x78\xc9\x6a\x2b\x7f\x8a\x5d\x0b\x03\x45\xb6\x2d\x7b\xaa\x65\x0b\x03\x2d\xb3\xf7\xc7\xd9\xb6\x48\xdf\xc8\xbe\x65\x4f\xb0\x6e\x91\x36\x75\x0b\x97\x3d\xd6\xbe\xa5\xbd\xae\xdb\xb8\xec\x71\x16\x2e\x72\xbb\x95\x56\x2e\x7b\xa8\x8d\x0b\x63\x3c\xd1\xce\x7d\x5f\x08\x51\xde\x8a\x7c\x7f\xa2\xf6\x86\x32\x4f\x79\xc1\x9d\xbe\x21\x0d\x83\xd6\x86\x56\xc3\xab\xaa\x29\x87\x87\xcf\xd8\x41\xfb\x19\xbb\xca\xe5\x8d\xd0\x86\x67\xac\x49\xbf\x6a\xb1\x73\xd0\xa1\xd8\x11\xf6\x43\x3c\x12\x29\x71\xd8\xc1\x20\x27\xdd\xea\xce\xf9\x88\x8c\xff\xc2\x75\x16\x4d\x67\x0f\xca\x07\x8e\xcd\x3a\x1b\x3b\x61\x5d\x78\x87\x1d\x0b\x39\x54\x37\x72\x64\x39\xc6\xef\xc2\x59\xcb\xb6\xe7\xaa\xad\xf0\x67\x20\xf5\xa3\x05\xc6\x26\xde\xda\xe5\x89\x38\x37\xe5\x23\x27\xb2\x52\x4c\x0c\x06\xf9\x43\xbd\xb5\x4b\x42\x62\x3b\x0e\xcf\x58\x3a\xd8\xd3\xf5\x54\xf9\x50\x97\x0d\xc1\xe8\x7e\x9c\xc3\x73\xad\x64\x18\x0c\xf2\x47\x38\x3c\xef\x95\x0b\xd6\x92\x7f\x88\xc7\xf3\x41\x52\x01\x7c\x91\x6b\x3d\x9e\x8f\x94\x09\xd6\x58\x5e\xe9\xf1\x7c\xa2\x44\xd8\x5c\x1e\x44\x8f\x0d\x06\xf9\xd3\xa4\xc1\xa7\x0c\x9b\xed\x99\x9f\xb3\xbd\x54\x5b\x8e\xbe\x3f\x5b\x98\x9f\x33\x7c\xf6\xb5\xda\x3b\x59\xf4\xff\x71\xbc\x77\x04\x7f\x62\x70\xa7\x81\x8f\xc7\xea\xfe\x89\xfa\x45\x66\x19\x77\xdc\xdf\x39\x47\x7f\x10\x1a\xac\xd1\xe7\xed\x67\x38\x9a\x7b\xce\x94\xb3\x19\xd7\x00\x34\xb1\xaf\xd3\x88\xcc\x8c\xd4\x5c\x30\x6e\x88\x37\x38\xdb\xf7\xe4\xfc\xf8\x05\xc0\x3a\x2c\x9b\xc9\xc4\xb8\x60\x7c\x3e\xcf\xac\xfd\x4a\x1e\x0a\xf4\x2d\x50\xb5\x17\xcb\x51\x4e\xce\x8f\x45\x0a\x9c\xd3\x31\x01\xcb\x8c\x67\x82\x7b\x7b\xfa\x9d\x2a\xd9\x88\x43\xc7\x5e\x98\x42\x99\x8f\xa0\x44\x56\x5a\x61\xbb\x43\x55\x4c\x2d\x4f\x9a\x6b\x00\x24\x39\xfc\xcb\x4c\xe8\x91\xe4\x59\xb6\x68\xb3\xb7\x53\x91\x47\x5c\x27\x9f\x24\x90\xd6\x0a\x9c\x92\x9c\x0c\x30\x7e\x3c\xaa\x1a\xc3\xac\xdd\x07\x71\xf6\xab\xa8\x7a\x7e\x6c\x49\x47\xbf\xe1\xad\xca\x2f\x65\x61\x44\x36\xb6\x72\x69\xd8\x02\x8f\xcc\x6c\xce\x0b\x39\xcc\x02\x35\x9b\xa2\x3d\x69\xb3\xd7\xe7\xc7\xec\x8b\xf6\x33\xfb\x60\x67\xce\x47\x53\xe1\x77\xe7\x79\xfb\x59\x2b\x10\x23\x17\x22\xcd\x07\x7f\xba\x73\xd6\x50\x69\x1f\xd1\x40\x0b\xbb\x4d\x99\xca\x27\xf6\xbf\xc0\xce\xef\x5b\x85\x95\x78\x9e\xca\xe4\x8e\xca\x04\x37\x82\x69\xc1\xd3\xca\xa3\xaf\x3a\xff\x60\x12\x3e\xc7\xa6\xfc\x46\xb0\x71\xa9\x81\xf3\xff\x5c\x0a\x83\x42\x44\x8b\x09\xd7\xe0\x04\x8a\xce\xcf\x9d\x27\x3c\x93\xc3\xfd\xf9\xcf\x6b\xb4\x88\x83\xbd\xe7\xcf\x0e\xbe\x48\xd8\xe0\x4f\xf3\x9f\x07\x7f\x62\x87\x71\xa0\xee\xdc\x39\x45\xa2\xb7\x0e\xf1\x2d\xf6\x32\xe3\xd7\x82\x9d\xc8\x5f\x84\xe6\xf9\x62\xe7\x63\xdb\xf9\xd8\x76\x3e\xb6\x9d\x8f\xed\xa1\x3e\xb6\xf7\x33\x25\xb5\xca\xf7\xcd\xcf\xd9\x3a\x1c\xca\x17\x09\xfb\x8e\x5b\xce\x70\x02\x8f\x6e\xcc\x61\x06\x83\x7c\x33\x1e\x33\x18\xe4\x1b\x70\x99\xc1\x20\xdf\x84\xcf\x10\x2a\xe4\x93\x45\x11\xad\xd6\xf9\x44\x6e\x83\xf0\x8f\x6d\xf2\x1b\x88\xd4\x7e\x1e\x1c\x67\x30\xc8\x37\xe4\x39\xa8\xe2\x3e\x89\xeb\x0c\x06\xf9\x06\x7c\x67\x30\xc8\x37\xe1\x3c\x83\x41\xbe\x09\xef\xb1\x06\xd6\x26\xdc\xc7\x92\xed\xe9\xfc\x67\xb6\x28\xb4\xcc\xc4\xfe\x4c\xce\xc4\x1e\x82\xe5\x1e\x8d\x70\x38\x82\xfb\xaa\xd9\xf7\xca\x14\xea\xe6\xa3\x68\x40\x4b\x90\xa7\x2d\xe8\x40\x30\xe6\xf6\xb4\xa0\xc1\x20\xdf\xb6\x1e\x54\x9b\xe1\x16\x34\xa1\xc1\x20\xdf\x61\x1c\xb6\xac\x0f\x39\x0f\xc9\xd6\x34\x22\x7b\xcb\xb6\xaa\x13\xd9\x45\x6f\x47\x2b\x82\xa9\xfd\x77\xe8\x45\x79\xf9\x97\x29\x2f\x46\xd3\xfd\x89\x2a\x4b\x99\x2e\xf1\x1e\x67\x7d\x0d\x17\xec\x7b\xfd\xcb\xc2\xfc\x52\xa8\x31\xfb\x5e\xdd\xf2\x4c\x5e\xb3\xd1\x54\x4b\xf3\x77\x1c\xa2\x0d\xce\xe0\x1d\x47\xda\x02\x47\x72\x58\xb3\xad\x71\x24\xcb\x8d\x76\xa8\xab\x1d\xea\xea\x77\x82\xba\xd2\x66\xff\xc3\x0a\x56\x84\x6a\xd0\x57\xec\x2c\x93\x37\x52\x68\x76\xae\x64\xa1\xc5\x82\x69\xf3\xf7\x94\xcb\x6c\x31\x53\x10\x89\x18\x01\x70\x7b\x07\xff\xfc\x1c\xe0\x9f\x81\x11\xe1\xec\x76\xf0\xcf\x1d\x23\xfa\xc4\x8c\xa8\xb6\x9d\x77\x32\x22\x33\x2d\xf5\x48\xa9\xe3\x7d\xc3\x73\x59\xc8\x5f\x44\xfa\x4f\x9e\x8f\xa6\x4a\xff\x33\xe7\x33\x41\x01\x93\x60\xbe\xad\xe5\x58\x47\x33\x59\x68\xc9\xfa\xd3\x52\xf3\x6c\xf1\x31\x4c\xb7\x1d\x7f\xda\xc1\xd3\x77\xfc\xe9\x5f\x81\x3f\x3d\x46\x51\x7a\xaf\x74\xca\xf3\xbd\x5b\x38\x77\xfb\x62\xc6\x25\x45\x92\xbb\x19\x56\x30\x70\xe7\xc5\xf3\x04\x89\x55\x7a\xe0\xfa\xb3\x5b\xa1\x05\x41\x33\x29\xe3\x8d\xdd\x3d\xb8\x3d\xd3\x83\x41\x6e\x07\xaa\x5d\x11\xb8\xa4\x23\xc1\x86\x22\x53\xb7\x2f\x1e\xef\xdc\xfa\x82\x7d\x07\x9f\x63\x6f\x1d\x2c\x73\x67\x49\xee\x7c\x5b\xff\xfa\x0c\x72\xe7\xdb\xfa\x88\xbe\xad\x4c\xa5\xdc\x4c\xe9\x3f\x2b\x79\x52\x9d\x1b\x7d\xd7\x67\xaf\x54\x99\xa7\x1e\x32\x4d\x30\xb8\x4a\x36\x31\x15\x4f\xc1\x0f\x56\x9a\x30\xbf\x37\xed\xb1\x7f\xbd\x91\x34\x96\x7b\x2c\x0f\x06\xf9\x4b\x6e\x44\xca\x54\xce\xae\xf2\x54\x68\x33\x52\x5a\xb4\xdf\x9b\x24\xba\x1f\x94\xc9\xd8\x31\xd3\x6b\x91\x73\x03\x99\xa5\xc4\x9b\x0e\x33\x55\x62\xdf\x8e\x5e\x7e\x23\x4c\x21\x27\xbc\x90\x37\x82\x5d\x08\x7b\x03\x84\x36\xec\x8f\xac\x9b\xca\xfa\x3c\xab\xd3\x2c\xfd\x87\xdf\x9b\xb6\xd2\x93\x75\x33\xbd\xac\x70\xcb\x91\xca\x8d\x34\x28\x53\x6e\x54\x56\xe6\x05\xd7\x8b\x40\x19\xb8\x7d\x33\x9e\x0a\x36\x5c\xb0\x19\x22\x34\x64\x9e\xca\x1b\x99\x96\x3c\x33\x6d\xf6\x4a\x69\x26\x3e\xf0\x51\x51\x79\x87\x4d\xa5\x29\x94\x5e\x24\xcc\x08\x44\x07\x69\x71\x23\x4d\xf4\x17\x2b\x70\x6e\xb8\xcc\xb0\xc0\x67\xc1\x1e\xbe\xd1\x81\x2d\x39\x98\x4e\x8c\x65\xca\x32\x28\xa4\x63\x96\x63\xb2\xe2\xc3\x48\xcc\x0b\xc6\xad\x7a\xe8\x84\x82\x48\x2b\xb2\xed\xdb\x6f\xbf\xfd\x76\x8b\x42\xca\xae\x71\x33\x10\x0a\xe6\x89\x6f\x03\x86\x32\x18\xe4\x5b\x00\xa2\xc4\xb9\xfc\x4f\x86\xa2\x0c\x06\xf9\x56\xc0\x28\x24\x03\x3f\x9a\x98\xfa\x97\x0a\x0f\xb3\xb3\x57\xd6\xac\xfd\xef\x0f\x0f\x47\x62\x8a\x14\xf4\xcd\x81\x29\x18\xeb\xde\x1c\x9a\x32\x18\xe4\x5b\x11\x54\x81\x6f\x04\xa1\x63\x0f\x98\x16\x19\x5c\x6f\xba\x62\x63\x7b\x6e\xf8\x6c\x9e\x11\x1e\x10\x6e\x2d\x87\xc2\x14\x37\x92\xb3\xc3\xc3\x67\x6d\xd6\x87\xbf\x83\x46\x94\xc2\x1d\xc0\xb2\x69\x96\x5b\xc0\x09\x8c\xf1\x84\xa9\x34\xf3\x8c\x2f\x08\xbd\x4d\xfc\x60\xae\x95\x11\x74\x12\x23\x4e\xc7\x23\x3c\xf7\xe1\xe1\xb3\x17\xc0\x70\x5f\xec\xef\x8f\xb4\x00\x59\x33\x52\xb3\x99\xca\x41\x70\xec\xc3\x6d\x1f\xa5\x90\x80\xb0\xff\x8b\xd0\x6a\xff\xa0\xfd\x6c\xbf\xbe\xd4\x57\x08\x57\x54\x50\xa5\xcf\x71\xa3\x5c\xa5\xe2\x9f\x58\x37\x11\x71\xea\x37\x50\x96\x83\xa5\x52\x8b\x51\xa1\xb0\x04\x1a\x30\xe3\x42\xe8\x9c\x67\x99\x15\x04\xf6\x3b\xd4\x65\x30\x14\x4a\x83\xb2\x1e\xc3\x45\x8d\x6f\xde\x4e\xe5\x68\x8a\x90\xc6\x62\x2a\xa4\x66\xea\x36\x4a\x8c\x30\xdf\xb0\x5b\x2b\x6a\x00\x60\x9a\xa7\x00\x7f\x74\xd0\xc8\x59\x42\x38\x4b\xa9\x59\x21\xf4\x0c\xeb\x87\xa4\x72\x3c\x16\xda\x95\x61\xb3\x04\xc3\xbf\x01\xd7\xb8\xbb\xbe\xc1\x88\xcf\xe6\x43\x91\x65\xfb\x33\x55\x1a\x51\x68\x3e\xf7\x8f\xb3\x3b\xff\x57\x05\x91\xde\xf1\x78\x04\xfe\x4d\xd8\x77\x3c\x2f\xad\x68\x7e\xfe\xec\xd9\x97\xeb\xde\xa1\x3d\xbd\xbd\xbd\x6d\x73\xf8\x08\x6c\xa7\x23\x0e\xed\xe0\x65\xf7\xe2\xc4\x03\xf4\x8f\x7a\xf6\x1e\xe0\xfd\x07\xf0\xf7\x45\xf7\xfc\xe2\xec\xe8\x0a\xae\x47\x02\x4f\x1d\xf5\xfa\x08\x6c\xc7\x0b\x33\x18\xe4\x07\x6d\x06\x6d\x1a\x90\xd7\xb6\xfd\x9a\x07\x83\x86\x5f\x54\x83\xd8\xe8\x4c\x70\x3c\x19\x44\x57\x2c\xe5\xed\x32\x19\xec\x8d\x00\xa9\xe3\x52\x22\x40\x6a\xe1\x68\xf6\xd1\x6a\xa6\x49\xb8\x0c\xc3\x05\xeb\x0b\x2c\xc1\xcc\x0e\x58\x31\xd5\xaa\x9c\x4c\xd9\xd7\x5e\xce\xba\x53\xbf\x62\x6e\x4a\xaf\x98\x5c\x10\x0f\xd0\x50\xcd\x32\x78\x91\x17\xb2\x58\x40\x83\x67\xa5\xe5\x2f\xf0\x51\x1c\x6a\xd5\x0b\x90\xaa\x22\x0d\xaa\x08\x0e\x54\x7b\x5c\x01\xd5\xd2\x24\xc4\x84\x67\xac\x0b\x83\xaf\x98\x48\x99\xdb\x95\x92\x1c\xe1\x23\x18\xca\xcd\xc4\xaa\x0c\x60\x2c\x31\x46\x0a\x2c\xfc\x05\x34\x1f\xfb\x79\xaa\x1e\x8a\xe9\x34\xbe\x94\xa8\x9d\x77\x62\x17\x84\xe8\xe1\x14\xf4\x5e\x7b\xd7\x71\x20\x7a\xce\xe5\x7f\xf0\x82\x3e\x87\x9a\x1d\x30\x94\x52\xcf\x95\x11\x41\xa3\x4a\xfd\xde\x27\x7e\x59\x34\x8c\x5d\x11\x60\xc4\x59\x53\x22\xd8\x7a\xae\x6e\x85\x4e\xe8\xfe\xdb\x69\x58\xed\xd1\xfe\x1b\x14\x99\x11\x27\xf4\x38\x0e\x84\x7f\x01\x0a\xe8\xa8\xb9\x07\xa4\xf2\x94\xa3\x29\x4d\x2d\x61\xb7\x53\x01\xeb\x1f\x92\xa6\xca\x61\xe8\x88\x32\xb7\xd2\x1e\x2a\xa5\x59\x53\xca\x56\xb5\x49\xde\x58\x8e\x0b\x50\xd5\x46\x76\xe4\xe6\x57\xcf\xfe\x47\x0b\xbe\xa6\x74\xc4\x35\xed\x38\x65\x61\x05\x3c\x18\xf8\xd0\x58\xcf\xb8\x01\x65\x8b\x0d\x45\x2e\xc6\x72\x64\x85\x7f\xb5\x03\x5f\x98\x65\x65\xd7\xdf\xa9\xd2\x92\xa6\xa9\x34\xfd\x64\x0f\x61\x2b\xde\x7c\x9e\xb3\xa0\x57\xdb\x0f\x55\x0f\x8a\x1d\x47\x7c\x10\x7a\x24\x8d\x9d\x50\x50\x5a\x8c\xd3\x4a\x3d\xaf\x5c\x75\xea\xfa\x20\x35\xec\x14\x20\x0b\xa9\x76\xe8\xe6\x5a\x8c\x85\xd6\x22\xc5\xbf\x8e\x81\xf8\xd7\xf6\x3b\x71\x9a\x96\xa1\xdd\x0e\x7e\x8f\x61\x09\xea\x14\x2a\x94\xa8\xa4\x79\x46\x1d\xc9\xa9\x64\x09\xff\xc8\x18\xfd\x3d\xa9\xd4\xf6\x8f\xb4\xdf\xca\xec\xb1\x80\xe8\xaa\xd9\x43\xea\x82\xfd\x9d\x16\xa6\xcc\xe0\xb6\x00\x2b\x9f\x89\xd1\x94\xe7\x72\xc4\xe9\xba\x40\xd5\x54\xfb\x20\x77\xa7\x0b\x7e\x93\xd1\x8f\x63\xc6\x19\x92\x08\x46\x4b\xaa\x6b\xc4\x21\x6a\x0b\x1d\xa9\xd9\x5c\xda\xdb\xa5\x50\x1d\xc5\x85\x62\xcb\xa8\x25\x8d\x3e\xe2\x68\x23\x95\xdf\x20\x5b\x07\xb5\x97\xf2\xb1\x44\x2a\x39\x2b\x16\xf3\xda\xc2\xdf\x2a\x7d\xbd\x82\x49\x40\x52\xa1\x9d\x34\x16\xe8\x9c\xca\x79\xb8\x12\x32\x77\x2b\x71\x17\x02\xa9\x47\x0b\x03\x53\x2e\x18\x5e\x21\xc7\xe0\xd8\xeb\xf1\x06\x0e\x22\x4a\xf5\xe1\x82\x71\xc7\x27\x6a\x0a\xb4\xe3\x78\xb1\x8a\x6c\xb9\x4c\x51\x58\xc1\x93\x3a\x27\xd2\x2d\x2c\xc1\x8e\xd0\xe4\xb9\xb5\x14\x41\xfd\x91\x51\xe6\x19\x69\x0e\x9d\xf9\x5c\xe4\xa9\xfc\x80\x06\x59\xab\x42\x87\x23\x01\xd9\x23\xd6\x24\xb6\x24\x31\x35\x9a\xd8\x53\x60\xbf\xb3\x9a\x0a\xcc\x1d\x1f\x3b\x18\x52\xc1\xcd\x7d\xe8\x8c\x76\x7b\x31\xe3\x1a\x61\xc8\xbb\xec\xb7\x60\xd3\xec\x8d\x40\xcd\xc3\xb3\x07\x01\xe6\xb8\x65\x00\xce\xb2\x35\xf6\x30\xe7\xaa\xa0\xcb\xc2\x44\xc6\x87\x4a\xbb\x9f\x42\xee\x5d\x7c\xa5\x70\x2c\x2b\xfc\x84\x11\x79\x01\xd4\xe7\xd6\x16\xca\xe0\x6a\x30\xa5\xe5\x44\xe6\x3c\x5b\xb1\xe5\xcb\x0c\x9a\xf8\xd6\xb8\xc2\x06\x12\x56\x27\x1e\x51\xce\x9e\x67\xda\x3b\x18\x9d\x84\x88\x16\x56\x1b\xa3\x3b\x2a\xe6\x5c\xc3\x39\xb1\x34\x81\x35\xcc\x84\x16\xd9\x82\x65\x32\xbf\x06\xa2\x0d\x65\x0e\xa7\x24\xe7\x33\xd1\x72\x7b\x2e\xad\x12\x35\x86\xca\xe4\x6a\x9c\x04\xa1\xe9\xe9\xb9\x34\x25\x4b\x19\xa1\xc6\x95\x4d\x3f\x8c\xfc\x09\x6b\x36\xbc\x7e\x09\x62\x6b\x97\xbe\xe9\x29\x48\xb7\xce\xc9\x56\x3f\x17\x3b\x56\x65\x4f\xe0\x14\xa7\xa1\x40\x81\x1d\x48\x21\x71\xe0\x25\xa5\xd7\xce\x3f\x89\x6e\x45\x61\xc5\x80\x72\x2a\xae\xa5\x66\x39\xa4\x04\xd7\x42\x31\xa7\x8b\xc0\xd1\x82\x69\xa3\xaf\x21\x0f\x93\x03\x7e\xbe\xa4\x69\xd0\x26\x83\xec\xbb\x53\x66\xc4\x9a\x8b\x65\xcc\xf0\x75\x7b\xd6\x87\x62\xca\xb3\x31\xfa\x90\x57\x6b\x33\x0f\x93\xfd\x76\x8f\xfc\x9a\x30\xad\x93\x31\x92\xfe\x9e\x2f\xab\x31\x13\x99\x18\x15\x5a\xe5\x72\x94\xd8\x4d\x18\xf2\x0c\x4e\x92\x2b\xaf\x67\x95\x91\x32\x27\xe2\x33\x7b\x0b\x22\x9a\x8b\x40\x28\x4b\x27\x48\x46\xa6\xbb\x02\xe4\x37\xc9\x9d\xe2\xc8\xb1\xae\xf8\x0b\x2a\x8f\x66\xc4\x66\x5c\x66\xe8\x4a\x32\x85\x49\x2a\xd6\x95\xd3\x8c\xcc\xc2\x14\x62\x66\x22\x1e\x2e\x8d\x29\x85\x95\x20\x23\x10\x92\xf4\x00\xee\x3d\x64\x25\x83\xe6\xe2\x15\xaf\x98\xe6\x49\xe0\x20\x95\x23\x10\x11\xdb\xd2\x2c\x95\x66\x54\x1a\x10\xf5\xf0\xc1\x19\x70\x4b\x52\x2b\xdf\x02\xab\xf3\x82\x49\x7c\x70\x04\xa8\x2e\xd4\x1d\xc5\x91\xca\xcd\x5c\x8e\x4a\x55\x9a\x6c\xc1\x66\x5c\x5f\x5b\x9e\xa7\x83\xa2\x44\xba\x97\x30\x72\x92\x3b\x5b\xce\xee\x0e\xd0\x74\xe5\x21\xb4\x6c\x6a\x30\x68\x9c\xaa\x82\x71\x16\xdf\xd3\x36\x9e\x83\xe5\x3b\xbc\xa4\x75\xfb\xd5\xbb\x3b\x78\x9f\xf6\x13\x53\x11\xbd\x45\xd5\x4f\xb3\x29\x37\x6c\x28\x44\x6e\xed\x3f\x01\x9c\x7c\xb8\xa8\x7c\xc6\x5f\x43\x23\x7e\x2e\x45\x5e\x64\xf6\xa3\x23\xa5\xe7\x0a\x45\x76\x64\x44\x5b\x12\x13\x33\x7a\xde\x66\xaf\xad\x86\x65\x3f\x1b\xac\x7b\xa7\x64\xb1\x7e\x35\x66\xb2\xd2\xca\x09\x57\x2d\xe6\xcb\x82\x8f\xa6\x71\x9e\x5c\xc5\xcb\x08\xca\xc1\x3b\x55\x32\x6e\x75\xbd\xb9\x28\x4a\x9e\xd1\x09\xbc\x55\x3a\x4b\x6f\xa5\x55\x37\x72\x95\xef\xc1\xf6\x1b\x79\x03\x3f\xee\x39\x8f\xa4\x56\x0b\x9e\x15\x8b\xbd\xb1\x16\x22\x61\x52\x6b\x71\xa3\x46\x96\x95\xd7\xa5\xb9\xf3\xa1\x16\x2a\xa4\xa5\x27\x56\x23\x9c\xdb\x93\xbc\xc4\xe8\x3c\x3f\x47\x1f\x41\xb6\x70\x4e\x88\x24\xfc\x66\x2e\x34\x8a\xd9\x9a\x7b\x30\x8a\x70\x85\x5b\xe0\xf9\x30\xa8\xce\x4b\xdf\x5b\x21\xc8\x81\xb1\xd0\xe6\x7c\x11\x6d\xce\x39\xb7\x2c\xf7\xf7\xbe\x33\x4d\xef\xa6\x66\x50\xb2\x3e\xf5\xc1\x5d\x83\xa6\x51\x8b\xcd\x71\xa1\xd1\xce\xcd\xf8\xb5\x48\xd0\x2b\x62\x15\x3c\x9a\x0e\x18\xd6\x0a\xfc\x1b\x56\x00\x88\x2c\x4b\xe8\xff\xca\xd9\x5c\xe9\x22\x09\xa1\x10\xcb\x06\x48\x49\x26\x7d\x10\x98\x0c\x2d\xcb\x2e\x1f\xf7\xa7\xee\x71\x57\x79\xb6\x40\x02\x5b\xc6\x45\x13\x83\x4a\x04\x2e\x91\x35\xac\x6c\xb8\xc0\x31\x62\xc2\x7a\x96\x99\x8b\x91\x30\x86\x6b\x09\x97\x72\xac\x65\x3e\x71\x26\x8d\x90\x24\xf4\xe2\xdb\xde\x34\x2d\xc6\x33\x95\x0b\x12\x85\x23\x35\x1b\xca\xdc\xab\xf3\xe8\xe6\xa9\xbd\x40\xab\x71\x85\x0e\xe0\xe4\x81\xe7\xd9\x2a\x76\xd5\xa9\xd1\x17\x6e\xb9\x09\x62\xbb\xcd\x7a\x63\x06\x86\x1c\x5a\x41\xa6\x90\x85\x3d\xca\x7e\x3b\x30\x6c\xa3\x72\xc6\x27\xdc\xfe\x19\xd8\x1a\x19\xef\xcd\x20\xa6\x9c\x42\xad\x95\x31\x7b\x40\x2b\xbb\x86\x91\x2a\xad\xd6\x84\x3f\xcb\x9c\x71\x96\xf1\x5b\x53\xca\xc2\xae\x33\x13\x13\x64\xfe\x54\x0f\xe3\xad\x57\xaa\x2d\x67\xab\xb2\xc1\xbb\x58\x1a\xc8\x02\x9c\xb6\x21\x63\xdb\x0f\x13\x05\xc3\x16\x6e\x4d\x6e\x27\x66\xa0\x9b\x16\x53\x81\xaa\x57\xf5\x00\x92\x8e\xe4\xcc\x50\xba\x1d\xce\xb2\x08\xf7\x8a\xe4\x9c\x53\xa3\x50\x16\xd8\x5b\x69\xf7\x8d\xce\x08\xf7\x3e\xf4\x14\xda\xdb\xe0\x99\xf3\x84\x25\x88\x83\xab\x44\xf2\x65\xbd\x36\x53\x1b\x3e\x3d\xe3\x8b\xa8\xc4\x46\x8d\xf1\x54\x42\x13\x11\x0b\xba\x43\xab\x83\xed\xb0\x5a\xa2\x48\x65\x39\x5b\x55\xcd\xc4\xea\x3d\x15\x4b\x19\xa5\xf6\x1a\xde\x95\xd4\x2a\x9c\xf8\x33\x35\x13\x62\x7d\xbd\x93\x17\x5e\xae\x36\x79\x0b\xd7\x59\x9a\x82\x4d\xec\x74\xed\xec\xd0\xba\xd0\x62\x24\xe7\x32\x06\x89\xd0\xea\x82\xcb\x70\x69\x99\xb5\x18\x15\x6d\xd7\x37\x24\x32\xe9\x9b\xc3\xe8\x9b\xe8\xb5\x09\x8a\xb3\xcf\xc0\x07\x8f\x8e\xb6\xe7\x47\xab\x99\xcc\xed\x21\x41\x6b\xd1\x84\xcf\x5b\xae\xe6\x0f\x33\xd4\x10\xa0\x24\x7e\x9f\x02\x5f\xfb\xf2\x28\xfa\x32\xd6\x6f\x49\x42\xec\xcb\xdb\xec\xae\x24\xc0\xb2\xa9\xe8\x3e\xec\x3f\x18\x47\xb0\x28\xa8\x83\xc2\x30\xa1\x93\x9d\x58\x56\x98\x0a\xab\x2a\x25\x41\x71\xb0\xff\xe3\x45\xb8\x68\xb4\x32\xef\x3b\xae\xcf\xa6\xc6\x45\x59\x45\x55\x43\x86\xe9\x86\x80\xa9\xa5\x0a\xb4\xd7\xb9\xd0\x58\xa3\x86\x62\x8a\x5c\x17\x5e\x4c\x31\xd2\xd7\xeb\x8b\xac\x51\x2c\x6d\x59\x56\xe5\x37\x9f\xac\x3c\xbb\xd1\x56\x69\x3b\xbb\xec\x1d\x76\xad\x36\x56\x88\x0f\x05\x42\x86\xb8\x71\xdf\xa1\x3a\xdb\xf4\xad\xf8\x6e\x45\xf7\x7f\xc5\x45\x59\x22\x2d\xec\x57\x18\xc9\x59\x9a\x1c\xfc\xf1\x60\x53\x86\x43\x27\x56\xd2\x95\x8a\x51\x88\x88\xfc\xc4\xce\x80\x2d\xe0\x3a\x60\xfe\xc9\x43\x08\x1b\x46\x59\x4d\xe1\x95\x84\x85\x93\xc6\x0b\x96\x09\x6e\xac\xf1\x14\x79\xeb\xe9\x8d\x70\x55\xe7\x99\xb5\x78\x5f\xb8\x49\x72\x37\xc3\x40\xe6\xa8\xd0\x5f\x74\xa4\xcc\x9d\x33\xf8\x26\xe6\xe1\x95\x13\x16\x5d\xe9\xaa\xb3\x89\xc9\x71\xe0\x30\x1c\x2a\x4c\x78\xa1\xb7\x3c\xbc\xd2\xc9\x12\x81\xb9\xd3\xea\x22\x87\x16\x59\x02\x2b\x28\x34\xae\xde\x11\x50\x17\x6e\x84\xc6\x6d\x82\xde\x36\x7b\xd8\xad\xd3\xed\x4a\xae\xf4\xcc\xda\xc5\x56\x8d\x10\x5c\xb7\xa9\x32\x09\x98\xcc\x66\x89\xc2\xd1\x46\x83\xaa\x80\x16\xb3\x77\xe6\xf1\x2c\xb2\x52\xad\x3a\x52\x99\x0c\x5d\x2a\x0c\x67\x57\x9c\xf2\x5e\x54\xf0\x34\xb5\xff\x86\x50\x52\x7c\x10\xc3\x20\x6e\xde\x44\x9d\x87\x1c\xff\x04\x09\x6f\x64\x1a\x1f\x19\x30\x9c\x78\x0e\xfd\x1d\xf3\xb4\x9c\x39\xdd\xb4\x72\x52\x1c\x3b\x41\x33\xcf\x6d\x64\x8d\x8f\x01\x6d\x9d\x97\x82\x67\xab\x2f\x10\xb8\xa3\xd8\x10\x41\x1e\x85\x2e\x6b\xc7\x0e\x89\xb2\x36\x58\xb1\x92\x3e\xc1\x70\xf0\x0d\x95\x48\xe2\xd7\x3c\x5b\x61\x1b\xec\x18\xb4\x8a\x78\xc6\x10\x14\xb4\xca\x69\x45\x97\x5d\xa1\xa4\x7b\xc7\xdd\x8a\x48\x11\x8e\x12\xc5\x88\xd4\x78\xc5\x5c\x12\x7f\x59\xc6\x60\x09\x2e\xd6\x18\x1b\xb1\xf3\xcd\x5f\x20\x18\x8e\x52\xe7\xc9\x57\x17\x3e\xbf\x14\xa3\xaa\x08\x5d\xaf\x59\x8f\xd4\x0c\xf5\x65\x2a\xc7\xe8\xdd\x2e\xde\x10\xa9\xe9\xfa\xd5\xcd\xf8\x0a\x8c\x19\x87\x52\x00\x3b\x34\x82\xe7\xb4\xd9\x55\x9e\x09\x63\x60\xc3\xc4\x87\x79\x26\x47\xd2\xda\xb6\x30\x64\x14\x0e\x71\xfe\x8b\x45\x5d\x5f\x8c\x3c\x55\x91\x93\x6a\xad\x63\xca\x6b\xf3\xf6\x7b\x75\x2f\x8d\x87\xf8\x05\xcf\xf2\x23\x0c\x2f\x87\x50\xb1\x93\x8c\x8e\x0a\x8e\x80\x3a\x6a\x1a\x82\x8e\x8c\xb1\x53\x55\xd8\x77\x7c\xa0\xa6\x70\x80\x0f\x6b\x72\xd9\xcb\x3a\x01\xdb\xcd\xca\x0c\x98\x98\x29\xe7\x42\x1b\x91\x0a\x0c\xf9\xd8\xf3\x1f\xb6\x83\x3e\x83\x7a\x04\xfa\x3e\x8b\x50\x0b\x88\x4f\xb4\xc0\xf3\xbe\xa0\x8b\x01\xf6\x96\xf8\x20\x46\x81\xa1\x03\x9f\xf5\xc4\x08\x25\x76\x96\xac\x0b\xe7\xe7\xff\x73\x9b\x5d\x3a\x5d\xc3\x58\x46\x18\xe9\xcb\xa9\x02\x5e\x59\xa0\x6a\x1d\x03\x55\x10\xab\x83\x93\xb6\x6f\x53\x84\x82\xcf\x84\x89\x74\x17\x63\xcd\x3d\xe8\x33\xc7\xe8\x47\x6c\x8d\x61\x4f\x6f\x68\xac\x11\x6f\x5f\xe2\x3d\x4a\x64\x82\x6a\xf1\x73\x29\x29\x30\x64\x25\xb7\x51\x51\x47\x66\xe8\x04\xc7\xf5\xc2\x95\xff\x4b\x85\x19\x69\x39\xa4\x7d\x70\x86\x85\x9c\xc8\x65\xa7\xab\xbb\x45\x6e\xcf\x88\xf9\xaf\x60\xf9\x44\xa7\xbf\xb4\xd9\x51\xa8\x71\xa7\xc6\xec\x2d\xd7\x96\x2a\x0b\x7f\xfa\xfd\x54\x87\x0b\x34\x4f\xc1\xa8\xb6\x56\x94\xbf\xfd\xb0\x85\x60\xa1\x04\x0f\x57\x12\xb6\x8b\xae\xbc\x09\x53\x6d\xda\xb9\x0a\x3e\x9a\xd6\x0c\xd0\xf8\x61\x59\x98\xea\xce\xb6\x18\x80\x0c\x2b\xf5\x50\x5f\x76\xfa\xbd\x3e\x51\xb7\x06\xf4\xe9\x75\x09\x2f\xe3\x63\xf1\x15\x7c\x2a\xf5\x49\x11\x1f\xe6\xda\xae\xd2\x2d\x05\x8a\x03\x8b\x34\x72\x7f\x26\x2b\x60\xc8\x09\x7a\xca\x91\x54\x04\x5c\xaa\x33\x56\x35\x66\x97\xbd\xcb\xe3\x6e\xc2\x4e\xcf\x4e\xf7\x62\x94\x4f\xb2\x8c\x6b\x55\xba\x8a\x18\xc2\x21\x96\x61\x43\x28\x5d\x31\x0e\x98\x89\xcc\xda\x63\x66\xae\x72\x03\xd5\xb5\xc6\x10\x6c\x41\xcb\xaf\x72\x58\xf8\x7c\xae\xd5\x5c\x4b\xab\x84\xc3\x62\xc7\xac\x04\x1f\x28\x1c\xbe\xb8\x44\x58\xcd\x85\x6f\x4c\x39\x03\x83\x84\x78\xb4\x34\xc0\xcd\x3d\xbc\x0e\xae\x25\x30\x72\x8a\xa1\x82\x93\x35\x0e\xa2\x2e\x9b\xab\x74\xf0\xfe\xda\x66\xc7\x01\x2f\xa7\xc6\xec\x58\xf2\xa1\xcc\x20\x42\xde\xb3\xb2\x96\x89\x1b\x7b\x72\xa1\x0c\x26\x0c\x92\x2b\x96\x81\xf7\xb2\x98\x0a\xa5\x17\xc1\x89\xe2\x22\x53\x85\xd2\x45\xec\x10\xc8\xc5\x24\x93\x13\x91\x8f\x44\x2b\xf1\xf1\xec\xa4\xe2\xa2\x75\x1e\x9d\x7b\x8f\x7a\x13\x15\x03\xc3\x52\x91\xc9\x21\xa8\x6e\x30\xb5\x89\x56\xc6\xb8\x48\x84\xfb\x60\xc1\xf8\xa8\x30\x10\xfe\x5e\x7d\x35\x90\x69\x56\x44\x86\xd2\x88\x8c\x63\x8c\x65\x12\x3e\x4b\x06\x3f\xec\x2a\x9f\xf1\x49\xd5\x29\x6f\x5f\x76\x01\xff\x10\xfa\x87\x56\x3b\xde\x6f\x26\xf3\x91\x4c\xad\xfa\x8a\x91\x01\xab\xad\xa0\x87\x56\xf2\xcc\x8d\x19\x95\x7c\xb3\xe4\x11\x9a\x71\x8d\xb1\x70\x2b\xb5\x9d\x6c\x36\x65\x56\xd4\x0d\x59\x20\x64\xe9\x79\x4b\x89\xbf\x91\x39\x6d\x63\xc4\x4c\x23\x77\x40\xf3\xce\x28\xb7\x9b\x93\x5d\x73\xa6\xf0\xa4\x4e\x94\x4a\x6f\x65\x16\xf9\x02\xaf\x99\x29\xd4\x7c\xce\x27\x80\xaa\x9c\xcd\x4b\x3b\xeb\x31\x97\x59\xa9\x51\xfe\xf0\xcc\xb5\xc9\x44\x80\x46\xbe\x12\xe4\x11\xaa\xe5\x05\x5a\xe0\x67\x85\x69\x25\x70\xfc\xac\x0e\x5e\xf7\xad\xe1\x10\xde\x29\xce\xd3\x1b\x09\xc1\xce\x31\xc1\x32\x8c\x91\x44\x00\x87\x5b\xa0\xd1\xe9\xe0\x7f\xdd\x66\x9d\x91\x95\x03\x96\x06\x8e\xdb\x42\x0d\xbc\x20\x98\xa3\xbb\xf0\x76\x6a\xf5\xf3\xea\x2d\xad\x45\xfe\xee\x0c\x9c\x39\x6d\x73\x34\x55\x0a\x9d\x9a\xe0\xb9\x8c\x23\xe7\xe0\x40\x65\x9c\x8d\x05\xf0\x90\x84\x71\x98\x1f\xcf\x47\x02\xd7\x30\x47\xaf\x26\xf1\xbb\x05\x1c\x38\x31\xcb\x65\xe1\x2e\xa1\x0f\xc2\x66\x6e\xe2\x4c\x0d\x33\xf2\x2e\x19\x07\x61\x25\xb4\x1e\x21\xa3\xed\x35\x21\xf3\x49\x9a\x38\x72\x23\xda\xec\x8d\xba\xb5\x96\x0e\x5a\x89\x9e\x58\x40\xcc\x68\xdc\xb0\x38\xc0\xa9\xe4\x59\x88\x68\x78\xbd\x9a\x42\x1b\xe0\x90\xa5\x5f\x5b\xce\x19\xf8\x26\xcc\x16\xb4\x9a\x10\x09\xf1\x0c\x3c\xf8\x7f\xa2\x03\x40\xee\x5d\x6b\x12\xc9\x31\xf2\x63\x7b\xc9\xf1\x8e\x03\x5d\xc6\x8e\x2e\xa9\x18\x8b\x3c\xc5\x17\xa6\x2a\x4b\x57\x78\xc0\xb9\x9e\x01\xef\x71\x1a\xb4\xa7\xa0\xbf\xc2\xa5\xd6\x21\xe6\x45\x3e\x60\x6e\x8c\xd0\xf6\xd2\x90\x4b\x34\x59\x76\x01\x0f\x17\xa4\x58\xf8\xd5\x40\x8d\xc4\x40\x4e\xaf\xaf\xdf\x46\x87\x30\xd2\x0e\xfd\x4c\xe8\xe0\x76\x4f\xb1\x94\xe7\x0a\x98\x1b\x3e\xb0\xb7\xb7\xc7\xba\xa0\xe2\x38\x14\x06\xe2\x0f\x00\x95\xf7\xbc\xfd\xcc\x33\x8e\xbd\xbd\xbd\x3d\x7c\xa5\x03\x66\x9b\x70\x2f\x59\xa3\x97\x62\xf5\x81\xe7\xc0\xb4\x11\x16\x62\xa7\xbd\xc0\x3d\x8c\x50\x30\x0e\x26\x1c\x65\x75\x7a\xb0\x33\x60\x22\x67\x43\x91\x22\x22\x02\x5c\x13\xb1\xcf\xd0\x5f\xd2\xca\x88\x0b\xf0\x1c\xa2\xbf\x33\x72\xbd\x20\x0a\xc9\x8d\xe6\xd1\xc9\xce\x73\x12\x0f\xeb\x74\x06\xb0\x50\x16\x01\x27\x5e\xb7\x4f\xd4\x38\x00\xee\xbe\x6c\xf2\x56\xc2\xbe\x6c\x0e\x5b\x70\x60\xbe\x6c\xa6\xad\xaa\x22\xe9\x64\x67\x2f\xf7\xfb\x94\xb8\x6a\x94\xe8\xa8\x07\xfe\x07\x20\x02\x8f\xa3\x81\x52\xd1\x6c\x89\x30\x64\x31\x79\x5c\x91\x8b\x6a\xae\x28\x93\xf9\xfa\xfc\xf8\xe6\x39\x6b\x42\xd8\x11\x3e\x92\xb2\x18\x39\x8f\x3e\xd9\x31\x08\x8b\x91\x2a\x35\x55\x55\x9e\xcd\x05\xdc\xf1\xf7\xa5\x96\x26\x45\xdc\xbc\x57\x4f\x9c\x0b\x09\x58\x26\x7a\xbd\x41\xf1\x03\x2d\xbc\x49\x14\x19\x0c\xf2\x2f\x5a\x09\x21\x1f\x88\xe1\xac\x78\x8c\x7d\xdd\x0a\x0c\xc8\xfd\xae\x4a\x37\x2c\x71\x36\xce\xe4\xa8\x30\x6c\xcd\x36\xf8\x95\x26\xde\x10\xd1\xa2\xd0\x0a\x5a\x3e\x0b\xef\xff\x98\x6b\x65\x85\x2c\xfd\x2e\x70\xd5\x54\x88\x99\x03\x1d\xc7\x1a\x06\xb9\xd0\xe8\xf0\xd0\xf4\x9a\x56\x39\x70\xb9\x66\xde\x4a\xb3\x02\x11\xd9\x4a\x4e\x81\x16\x2b\xaa\xb5\x20\x8c\x22\xfc\x09\x26\x6f\x99\x57\x5c\xf4\x9c\x76\x25\xaa\x01\x77\x77\x71\x2d\x65\xcd\x2d\xfa\x4f\x94\x96\xdd\x3b\xec\x9e\x42\x49\xdf\xa5\x94\xc3\x87\x24\xfa\xec\x0a\x00\xee\x0a\x00\xfe\x4b\x66\x78\xec\x0a\x00\x7e\x82\x02\x80\xc3\xac\x14\x72\x36\xdf\xff\x8e\xdf\xf0\xfe\x48\xcb\x79\xb1\x77\x72\xf4\x15\x3e\x1e\x7e\xc7\x4e\x8e\xbe\x62\x07\xed\x67\xed\x83\x3a\xd7\x7a\xfe\xec\xe0\x20\x61\x7d\x31\xe4\xa6\x90\x3c\x67\x97\x66\x34\xe5\xf1\xb7\xe8\x03\xed\x5c\xd8\x9b\x7f\xbc\xa2\x38\x74\xef\xd2\x09\xc3\x17\xf4\x1e\xa5\x00\xa8\xb9\xc8\x51\x5d\xa8\xa6\x01\x9c\xf4\x2e\xab\x39\x8b\xd0\xfd\x33\x9a\xad\x9c\xcd\x31\xd3\x3c\x8e\xa7\xb3\x8b\x7e\x87\x1d\xf1\x82\x5b\xe1\x50\x6a\xd0\x46\xa1\x55\xab\x5d\xdb\x89\x30\x86\x4f\xec\x7d\x3a\x92\x13\x61\x0a\xd6\xc9\x26\x4a\xcb\x62\x8a\x59\x17\x0e\xb6\x2f\x73\x76\xf1\xea\x90\x1d\x7c\xf1\xfc\xc0\x52\x35\xe4\x37\x3c\xaf\x95\x86\x3e\xe7\x65\xc6\xbe\x53\xd3\xdc\x14\x2a\x67\x07\x5f\x7f\xfd\x35\xdb\x83\xde\xf4\x76\xb7\x96\x58\xfa\x0b\xf6\x5a\x8b\x09\x7b\xa3\xb2\x22\x61\x9d\x3c\xd5\xe2\x96\x7d\x2f\xe6\xc2\x1a\x03\xef\xd2\x9c\xeb\x84\x1d\x2b\x53\x48\xa4\xe1\xd1\xca\x76\x4b\x51\x8f\x25\xcb\xa2\x84\x70\xc9\x14\x73\xfe\x7e\xaa\x66\x40\xc2\x76\x79\xbd\x3f\xd2\x8b\x79\xb1\x3f\x4b\xbf\x42\x98\xb4\x82\xec\xfb\xb1\xba\xf3\x90\xec\xcf\xb8\xbe\x4e\xd5\x6d\xbe\x27\x8b\xf8\xdf\x0f\x92\x69\x50\x23\xf2\x07\x59\xf0\x6c\xc1\xce\xcb\x5f\xb4\xcc\x13\xd6\xc9\xc4\x07\xf6\xbd\xb2\xe2\x49\xba\xa4\x9e\x9d\x44\xdb\x49\xb4\x9d\x44\xdb\x49\xb4\xa7\x4a\xb4\x8c\x93\xd6\x2d\x72\xb5\x9f\x6a\x35\xff\x05\xc3\xdd\x41\xea\xe0\x0f\xcd\x5a\xb2\xfd\xba\xda\x1f\xcf\xd9\x09\x2f\x24\x37\xec\x44\xe4\x8a\xcd\xfe\x6e\xff\xdd\x86\xf2\x4a\xc7\x6a\xa2\xd8\x1f\xd9\x5b\x31\x34\xb2\x10\xec\x08\x80\xa7\xa1\xac\xd2\x60\xd0\x38\xf8\xfa\xe0\xd9\x60\xd0\x60\x56\x8a\xdd\x0a\xae\x85\xfd\xc5\xc7\x29\x01\xb7\xeb\x0f\xb0\xeb\x0f\xb0\xeb\x0f\xf0\xaf\xda\x1f\xa0\x90\xf9\x62\x36\x12\xee\xbf\xf8\xdc\xeb\xd3\x2b\x76\xdc\xed\xf7\xbb\x17\xec\x75\xf7\xb4\x7b\xd1\x39\x66\xe7\x57\x2f\x8f\x7b\x87\x91\x1a\xb6\x32\x0b\xf7\x20\x61\xaf\xc4\x50\x43\x1a\xae\xd5\x49\x09\x2a\x51\x55\x5d\x0f\xbe\xfe\xfa\x20\x41\x95\xf5\x95\xe5\x44\xfe\xf2\x04\xcf\x04\x2a\xce\xf6\xd5\xaf\x0e\xd8\x2b\xcd\xf3\xeb\x4c\xe6\xac\x5f\x68\x21\x8a\x84\xbd\x92\xe3\x62\xca\x5e\x65\x4a\xe9\x84\xbd\x54\x56\x03\x4e\xd8\x49\x87\xb1\x67\xcf\x0f\x0e\x9e\xed\x1d\x7c\xf1\xec\x80\xb1\xab\x3e\xc4\xde\xba\x37\x42\x2f\x54\x8e\x09\x55\xbe\x81\x1a\xa4\xa7\xcd\x17\x75\xe8\x23\x24\x5f\x14\x72\x16\xea\xd1\x7a\xe6\x97\xf9\x90\x33\x32\x3b\x74\xf2\x00\x32\xcf\xde\x63\x09\x2e\xb7\x5c\x15\xf6\xd6\xa9\x5b\x0f\xc0\xfc\x11\xe2\xd5\xd2\xb5\xaf\xd1\x80\xd0\x83\x8e\x34\x69\x3d\xdf\xe6\x58\x18\x23\x34\x7b\x7d\x7e\xdc\x66\xac\x67\x07\x32\x0a\x41\xaf\x30\x11\x6a\x81\x63\xca\xd1\x48\x18\x48\xf7\x20\x4f\x97\xdd\x2b\x6a\x97\x53\x6d\x8d\x94\xf8\x2f\x3c\x4f\xd8\x54\xe4\xb0\xbb\xf0\x8e\xfb\x7d\x5e\xce\x86\x42\xdb\x7d\x6b\xff\x54\xcf\xcb\x3e\xd7\x82\xcf\x10\x9a\x0c\xbf\xbf\x0c\x3d\x70\x0c\x69\xf6\xa6\x88\x64\x82\x16\x94\x20\x41\x99\x6d\xfc\x5a\x30\x7e\xcb\x17\xe0\xe6\xb5\xea\xaf\x16\x22\x55\x00\xe8\x81\x64\x51\x17\xb1\xc8\x27\x82\xc9\xa2\xcd\xd8\x4b\x97\xaa\x6a\x10\x49\x0b\x2b\x7b\x0d\xe8\xaa\x8c\x56\x16\x24\x2d\xe6\xc8\x03\x32\x23\xc5\x0f\x4e\x4a\x0e\xf2\x4d\xa0\x5f\xf9\x8e\xcf\xd1\x64\xfc\xdc\xf7\xf6\x08\x20\xce\x4c\xa9\x11\x33\x60\x62\x7e\xae\x31\x9a\x02\xfc\x54\x16\x90\x77\xaf\x43\x16\xe2\x65\x74\x3a\x92\xca\x46\x56\xa6\x1e\xa5\x0f\x86\x5a\x2c\x46\x81\xb8\xa7\x58\x5f\xb6\x88\x53\x4c\xfc\x14\xe6\x7c\x74\xcd\x27\xc2\xec\xed\x15\x8b\xb9\x1c\xc1\x73\xbe\x08\xc0\xde\x9e\xc7\xe9\xae\xbb\x4b\x91\x97\x8f\x32\xc1\xac\xdc\x62\xa9\x18\xc9\x54\xb8\xd8\x1e\xec\x00\xc2\x6c\x5d\xc7\x2a\x69\xc5\x95\xc2\x73\x7e\x6b\x69\x33\x01\xbb\x75\xa1\x4a\x3a\xc8\xc5\x14\xdc\xd3\x5c\x8b\x71\x09\x58\xb5\xa1\x15\xd2\x14\xc6\x0d\xcd\xf9\x7c\x88\x11\x93\xcd\x52\xec\xf5\xb7\x9a\x3a\xee\xa6\x0c\x45\x51\xc0\x18\xa6\xd0\xbc\x10\x13\x1f\x83\x94\xb9\x47\x24\xca\x51\x99\x71\xcd\x46\x1c\x3c\xae\x2e\x4f\xd1\xbe\x2d\x3e\xcc\x33\x9e\x53\xc8\x0a\x92\x25\xfd\x6e\x41\x2b\x2d\xbb\x9a\xb9\xe0\x90\x1c\x57\x39\x09\x89\xfd\x93\xa5\x1e\xa6\xfb\x42\x18\x5d\xf9\xa3\x04\xc1\x76\xb0\xa6\x00\x85\xaa\xe5\x48\xb4\x19\x3b\x2b\xd7\x6d\xb5\x59\xba\x14\xf1\x21\xe3\xd6\xaa\xf3\xdd\xa7\x80\x3d\x84\x23\xbb\x12\x8e\x5d\x99\x2a\x22\x2f\x50\x83\xb3\x07\x5a\x69\x97\x03\x81\x78\x16\x0a\x26\xdc\x4a\x33\x6d\x7d\x83\x2e\x7a\xac\xf5\x00\x99\x3f\xd5\xa6\x5b\x1a\xba\x94\x4d\xc0\xf6\xb7\x8c\x8c\x5e\xe5\x79\xc1\x64\x11\xbd\x6c\x9f\xa2\x1b\x5b\xb9\x24\xae\xc1\xe5\x5c\x8a\x91\xab\xbd\x66\xc7\xc9\x59\x2e\x6e\x71\xda\x73\xad\x26\x9a\xcf\x10\x87\x1b\x46\xe4\xe4\x1c\xd0\x33\x91\x56\xbf\x93\x52\xf1\x1a\x88\x3b\xcb\x7c\x12\x5d\x38\x65\x47\x2b\xac\x3a\x05\x37\x1d\xd5\x40\xd8\xba\x5c\x44\x74\x8e\x94\x49\x8a\x51\x8c\x95\x1e\x42\x7d\x65\x4f\x5e\x7b\x19\x40\x29\xcd\x81\x4f\x31\xfc\x20\x29\x96\x0a\xb2\x42\xb8\xb9\xc6\x3f\x29\xbb\x73\x5a\x38\x7f\x08\x68\xfb\xf8\x64\x1b\xb8\xa3\xa9\x7f\x92\xf2\xa7\xe1\x8e\x8d\x08\x51\x5b\x89\x56\x4a\xe4\xa4\x74\x0e\x88\xec\xeb\x90\xf8\xbe\x27\x9a\xd2\xee\x51\xc2\x6c\xca\x50\xc4\x81\x6a\x4d\xcd\xe6\x99\x48\x1e\x3a\x60\xc8\x09\x9e\x68\x5e\x40\x04\x97\x52\xee\x20\x90\x1c\xf5\x9a\x03\x24\x3d\x68\xde\x01\x43\x0f\x29\x0a\x91\x32\x6e\xe9\x7c\x2b\xd8\x84\x43\x7b\xe7\x85\x2a\xdb\x2c\x80\xd3\xab\xe7\xdf\xbe\xb7\x48\x90\xc9\xb8\x73\x19\xce\x22\x1d\x31\xcc\xca\x87\x5a\x2f\x56\x2c\xe2\x92\x20\x2e\xe6\x02\x17\xa9\x08\x81\x20\xbf\xa4\xd0\x1f\x0f\x51\x48\x30\x84\x25\x4b\x21\x5c\x3e\xba\x07\xe4\x57\x57\x94\x30\xa3\xc2\xf4\x60\x36\x5a\xc0\x07\x8b\xa9\x98\xc5\xc1\x3f\xdf\xa4\x6e\x5c\x08\x5f\x0f\x00\xef\x87\x09\xf5\x21\xe9\x19\x80\x74\xf9\xd8\x27\x5c\x90\x36\x63\x1d\x2a\xc1\x02\x53\x35\x53\x75\x0b\x1f\xa1\x63\x88\x68\x3b\x98\x8d\x58\xb0\xeb\x1c\xff\x2a\xdd\x89\x0f\x3c\x4d\xac\xba\x10\x48\x14\xce\x8a\x5b\xb5\x67\x0a\x31\x67\x33\x51\x4c\x55\xfa\x82\x35\x0f\x5a\x76\x87\x82\x79\x81\xe2\xc3\x93\xce\x4e\xb5\xf9\x1c\x9e\xc1\xd4\x28\xbc\x18\xb1\x94\xc3\x84\x20\x7b\x1c\x0c\xee\x87\x98\x40\x1d\x81\x2a\x00\x0f\x0d\xb2\xe8\xf8\x91\xad\x15\x41\x8d\xe9\xa3\xab\xee\x36\x04\xd8\xa3\x8b\x0a\x17\x1c\x78\x92\xbb\xe0\xb2\xb0\x8a\xcc\x82\x8d\x32\xc1\xb5\xe3\xa8\x00\x97\x40\x5d\x2c\x84\xc3\x5d\xfe\x28\xb0\x22\xf7\x4d\xc6\x3a\x99\xb5\xcd\x64\xf5\x7a\xc1\x05\xf0\x59\x1b\xc3\x05\x08\x69\xab\x40\x8a\xcc\x20\xab\x9b\x73\x83\xc2\x26\xa9\x5f\x06\x33\x55\x65\x96\xc2\x56\xc1\x54\xec\x5d\xf0\x27\x09\xf8\x3c\x29\x89\xab\xf2\xae\x2b\x07\xcf\xff\x75\x30\xc8\x51\x6a\x0f\xfe\x04\xa9\xbd\x25\x19\xc0\xb7\x92\x32\xd4\x87\x82\xf1\xf1\x58\x8c\x08\x81\x3e\xd7\x6a\x98\xf9\x5c\xdb\x19\x6c\x30\x39\xbd\x0a\xcc\xf7\x81\xc7\xe0\xf2\x84\x23\xf4\x4a\x02\xb8\x35\x89\xb5\x0e\xc0\x9a\x33\xc8\xb7\xe5\x88\x8f\x06\xe2\x4f\xb5\xe0\xde\x90\x15\x1f\x00\xff\x01\xf0\x12\x68\xa1\xbb\xa8\xb0\xfb\x36\x1c\xce\x5b\xe8\xf4\x58\x97\x7e\xae\x9f\x64\xbe\x20\x18\xf6\x60\x90\x0b\x58\x08\x06\x64\x1d\x2f\x75\x90\x24\x8d\x00\xa7\xca\xf8\xb0\x92\xe0\xae\x88\xdd\xa4\x37\x01\x97\x0a\x78\x71\xee\xa2\xd3\x53\x95\xa5\x42\x23\xcb\xd6\x62\xac\x48\xea\x4b\x80\xb2\xb8\x53\xb4\x9c\xc3\x45\xdf\x21\xa0\x27\xaf\x2b\xef\xee\xf4\xc0\x45\x1e\x52\x98\xba\x06\x8e\x11\xcc\xea\x49\x35\x75\x02\x81\x5e\x70\xd6\x1c\xb4\x39\xab\xe1\xcc\x4f\xac\xa2\x6d\x95\xe1\xa0\xa6\x04\xdf\x88\x3d\x9d\x41\x1d\x4c\x30\x9d\xf9\x46\x68\x9f\x8f\x00\xec\xdc\x29\x5d\x4b\x1a\x75\x40\xea\xac\x50\x64\xc1\xb4\x00\x65\xd6\xda\x84\xf7\xab\xb3\x4e\xc8\x45\x5a\x6c\x34\x33\x8c\xba\x4b\xc3\x7e\x2e\x65\x21\x22\x68\xbb\xc7\xf3\xdf\xa3\x1c\xe2\x69\x2a\x41\xf0\x56\x74\x4b\xbb\x23\xee\xdb\xa1\x3c\x16\x54\xdb\x48\x31\xb5\x93\x5c\x37\x96\x8d\xfb\x14\x18\xcf\xf3\xf0\xe1\x42\x41\x4a\x6a\x45\x5b\xa9\xaa\x8d\xdc\x1f\x3b\xf8\x76\x7e\xed\x70\x93\x7c\x59\x94\x42\x0e\x17\xea\xea\x00\xcb\x77\xb5\x0e\xc1\x16\x49\xc3\xf3\x88\x5e\xa8\x67\x66\x5a\xa6\x0d\x1f\xb1\x7c\x35\x5b\xa0\xb6\xea\x8e\xf8\xc8\x41\x37\xb0\xa0\x07\xc7\xb2\x1c\x08\x19\xa3\xd7\x3d\x6b\x09\xbc\xee\x32\xa2\xef\xda\xdd\x44\xb0\x99\xbd\x13\x44\x31\xe3\x12\x0c\x91\x6e\x0e\x2a\x85\xc7\x0a\x31\x0d\x95\xe9\x8f\xed\x2b\xf6\xff\x8f\xb4\x84\x06\xda\x4e\x6f\x4d\xd5\x8c\x26\x51\xb5\x8e\x06\x83\xbc\x36\x05\xf7\x61\x08\x1c\x65\xfc\x43\x18\x6a\x4c\x88\x18\x98\x49\x55\xf8\x13\x00\xa3\x2e\x4e\xde\x0a\x36\x42\x05\x25\x3a\x2d\xe4\x99\x74\x07\xbb\xb1\xce\x14\x19\x0a\xcc\xe2\x83\x28\x14\x20\xcd\xed\x2b\x70\x9a\x48\x44\x39\xce\x64\x59\xb3\x57\xde\xa7\x54\x82\xa6\x7e\x98\x97\x56\x1a\x59\xf9\x1e\x2a\x8d\xcb\xaa\x2a\xfa\xa9\xb8\x11\x99\x9a\x5b\x06\x68\x27\x80\xd8\x28\x48\x91\xb9\xe1\x79\xc1\x27\x82\xd9\xfb\x4e\x38\x1d\x40\xcb\x2e\x1d\x63\xa7\x9f\xa6\xd2\xf8\xb7\x0c\x15\xb4\x46\x11\x06\xfd\x1f\x6f\x85\x07\xcd\xdf\x67\xa7\x61\x05\x24\x80\x13\xfb\x4b\xd4\x66\x01\xee\x17\xd9\xc1\x8e\xee\x7e\x91\x61\x0a\xf6\x8e\xd2\xc5\x0d\x66\x30\x1b\x49\x3d\x2a\x67\x06\x60\x8b\x66\xb5\x6a\xab\x72\xa6\xed\xe4\xd5\x68\xc4\xa9\xb2\x0c\x0a\xfe\x19\x5f\x80\x44\x74\xf8\x59\x67\x12\xc0\x71\x1d\xa9\x52\x73\x32\x5e\x6e\xed\x54\x0a\x42\x79\x66\x04\x7a\xb5\xf2\xa5\xca\x48\x16\x41\x2a\x4b\xcb\xd8\x47\x6a\x86\x94\x63\xa9\xd8\x1b\xf3\x91\xb5\x0a\x0a\x9e\xa7\x5c\xa7\x6d\x50\x5f\xf8\x68\x2a\x05\xa8\xc9\xd2\x24\xcb\x5b\x11\x09\x08\x72\x14\xc5\xa9\x0a\x91\x6a\x82\xe7\x7f\xac\x11\xe6\x0b\x56\x2e\x1a\xc7\x20\x39\xed\x98\x41\x67\xc3\x3c\x08\xd0\x97\xf9\x4c\xb0\xf7\x6a\xc8\xb8\x81\x15\x66\x0b\xac\x12\xe8\xe7\x11\x6f\x56\x2f\x77\x88\x4d\xb4\xa1\xbd\xea\x94\xc9\xa2\x40\xd8\xf2\xc4\x52\x62\xb8\x40\xcf\xbb\x43\x95\xc7\x5a\x94\xb3\x8f\x63\x00\x9a\xe5\x12\x40\xb6\xe8\x3c\xdd\xe9\x13\xf1\x7b\xdc\xcb\xdd\xc5\xe6\xc6\x8a\x8c\xe5\x84\x0e\x1e\x9b\xfe\x5e\x65\xcb\xfd\x02\x11\xd7\x85\xa4\x16\x90\x89\x61\x18\x67\x13\xab\xb3\x08\xed\xfc\x5d\x80\x6c\x57\xf3\x4c\x84\x51\x33\x40\xce\x0e\x55\x4a\x05\xd3\x2b\x57\xb0\x5d\x3b\x7d\xab\xf3\x4c\xac\xb4\x3c\xf4\xae\x38\x38\xd1\xcb\xdb\xef\xe6\x34\xc3\xdc\x60\x60\xb4\xf1\x4c\xe0\x68\x4e\x55\x06\xc3\xd9\xab\x3e\x17\x1a\xb3\x81\xb1\x86\x0a\x80\x05\x6e\x45\x96\x41\x15\xaa\xc2\xb0\x1b\xae\x25\xcf\x83\xc7\x6c\xff\x58\xe6\xe5\x07\xe6\xdf\xb3\x1b\x03\x6f\x7a\x22\x77\xb2\x62\x0a\xc5\x00\xef\xdd\x17\x7b\x16\x80\xe7\x11\xc3\x0b\x12\x06\xeb\xb5\x6b\x33\xf8\x93\x63\x7c\x89\xbd\x1f\x70\x0e\x45\x5e\xb1\xf0\x80\x43\xe2\xd5\x72\xe2\x93\x10\x8a\x70\x80\x83\x14\x45\x04\x1d\x52\x6f\xea\x1a\x7e\x13\x57\x45\xa7\x81\xc0\xcc\x49\xfb\x34\xcf\xa0\x1e\x47\x99\x3b\x3d\xdb\x8d\x8d\xe9\x10\x3c\xe4\x5d\xd7\xbd\xac\x75\x8b\x03\xab\xbb\x41\xc6\xc3\xda\x02\x8c\xd6\x92\x01\xb8\x7f\xb5\xda\x22\x28\x34\x71\x1e\x1d\x05\x76\xda\x8c\x9d\x73\x6b\x97\x80\xee\x5c\x50\xf6\x98\xd3\x99\x9d\xe2\x03\x5d\x03\x8a\x5b\x80\x9e\x63\x15\x63\x40\xc4\x57\x3c\x59\x74\xc2\xad\x94\x82\xa0\x1b\x73\x4f\xc1\x9a\x4b\xe3\x7b\xdb\xbb\xc7\x90\xd5\xa3\x43\x68\x46\x20\x10\x2e\x73\x43\xe5\x50\xa3\x02\x5e\x4b\x2e\x00\x2b\x04\xf0\x97\x76\xca\xda\xa5\x27\x0f\x9d\x84\x8f\xf7\x29\xba\x79\x5e\xc7\xd2\x65\xde\x8e\x9d\xc8\x0f\x0c\x22\xac\x2d\xb6\x79\x78\x76\xfe\xae\x77\xfa\x3a\xa9\x94\xd7\x84\x07\x4f\xce\x8e\x7a\xaf\x7a\x87\x9d\x50\x6f\x93\xb1\x67\xb5\xd4\xb0\x8e\x4f\x46\xab\xf5\xf1\xf7\x6c\x2a\xf2\xa7\x28\xf2\x58\xba\x43\x84\xf6\xad\xa7\x1d\x77\x61\x36\x48\x60\x4e\x97\x4b\xfe\xa0\x4d\x81\xa9\x47\xb1\xa7\x15\x4a\x4b\x61\x66\xaf\xe1\x0b\x8a\x13\x90\x88\x4a\x57\x82\x6c\x5c\x86\x9d\x53\x71\xef\xbe\x9f\x4d\x8c\x11\x70\x28\x62\x39\x18\x34\xe2\xa4\x8e\xc1\xa0\x01\x25\xe2\xba\x3c\x54\x25\x81\x1b\xcd\xd3\x54\x0b\xb0\x60\xb1\x46\x11\x40\xa4\x1b\x81\x3d\xd8\xdf\x45\xe7\x8e\xca\x55\xb1\x91\xca\xb2\x00\xc9\xf5\x54\x74\xf9\x19\x3e\x37\x20\xe5\x05\x07\x52\x42\x7d\x9c\xd4\xca\x01\x0e\xc4\xc7\x2c\xdb\x1b\x91\x4b\xac\x2c\x54\xd1\xa0\x31\x47\x07\x46\x77\xbc\x72\x30\xc8\x9b\xb8\x11\x60\x26\x59\x3b\x07\xee\xb0\xbd\x54\x95\xaf\xc2\x27\xa1\xb4\x1a\x00\xb6\x31\xdf\x10\xd8\x6c\xe5\x96\x43\x7d\x53\xb7\xac\x04\xfd\xc2\x09\x7a\x7a\xc3\xe1\x40\x00\xf9\xf2\x09\xa1\x22\x7d\xae\xb8\x2e\xa5\x8c\xac\xdc\x43\xc7\x48\xda\x44\xcb\xa5\x5b\x0d\x51\x8c\x1a\x7d\x29\x89\x2d\xe6\x81\x94\x46\x10\x69\xf7\x30\x12\x7c\x87\x10\x3d\x54\xa0\x88\xdf\xbe\xf0\xa8\x6f\xab\x90\xf0\x85\x35\x0b\x6e\xa9\x9c\x89\x33\x8f\xeb\x63\xdb\x4d\xc2\x38\x30\x56\x35\xf0\x99\x74\x3e\x0a\x46\x15\x3c\x96\xd3\x96\xf7\xa3\xf2\x90\x80\x56\x36\x85\xe6\x76\x2e\x63\xa5\x6f\xb9\x4e\x01\xf9\x0c\x24\xa5\x64\x12\x9e\x4f\x4a\x3e\xb1\x82\xb4\xf9\x06\xb2\x4d\xc1\x67\x96\x54\x6a\x4c\x82\x40\xf0\xf1\xeb\x15\x31\x7f\x19\xca\xe4\x5a\xba\xc6\xb3\xb2\x07\xb8\xe5\x36\xdb\x57\xf3\x04\xa6\x47\x45\x31\x1d\x41\x90\xdc\xc5\x72\x4d\x4f\x92\x0f\xf0\x10\x3a\x65\x57\x55\xf8\x84\xdc\x90\x82\x14\x82\xc8\xee\xf3\xce\xc5\xd8\xb1\x0e\xdf\x42\x4d\x2f\xf2\x66\xe2\xdf\x5c\x40\xc9\x55\x82\x96\x85\xe7\x37\x09\x9b\x67\x25\x56\x88\x0b\x28\x0b\xf4\xe0\x60\xd1\xc0\xa8\xc6\x1c\x7a\x31\xe9\x0d\xf8\x06\x00\x14\xa9\x38\x34\x38\xe1\xb0\x46\x1b\xba\x1e\x1d\x16\x0d\x8b\xaf\x98\x82\x67\x59\xc5\xee\xac\x1b\x50\x1d\x2b\xf4\xd1\x51\xad\xe8\x80\xf2\x7c\xbd\x38\xac\xd0\x0a\xab\x16\x81\x5f\xa7\xe2\x91\x88\x0b\xa8\x80\x63\x0c\x74\xc6\xb2\x30\x32\x15\xa0\xd2\x98\x91\x9a\x0b\xb2\x16\x21\x1f\xc8\x72\x43\x5d\xe6\x84\x49\xa9\x4a\xfa\xf8\x54\x93\x73\xcd\xf9\x80\x04\xe5\xeb\xa8\xb2\x98\x97\xe8\x66\x80\x16\x2e\xa3\x69\xd5\x94\x77\xb3\x73\xd6\xad\xc4\xd4\x26\xf4\x7f\x85\x7a\x40\xee\x04\xc1\x55\xb6\x8c\x3e\xaf\x7c\xbc\x29\xf3\x54\xcc\x45\x9e\x46\x59\xba\xa5\xaf\x33\x1e\xe9\x85\x8c\xb3\x42\xa9\x8c\x0e\x99\x2b\x23\x27\x8b\x56\x1b\xfc\x0c\x8e\xcc\x78\x9b\x75\x69\x77\xdb\x0e\x6b\x2c\xf7\x70\xde\x44\x3f\x9c\xd5\xb8\x68\x3f\xfd\xdf\x2a\x6a\x96\xd7\x11\xe2\x37\xfc\xfe\x1e\x84\x22\x0f\x0f\x88\x87\xd7\xd6\x62\x62\xa7\x7a\x7c\xb6\xb9\xa9\xc4\x9a\x64\x91\xd4\x0b\x04\x55\xca\xfb\x50\xfc\xa3\x5a\x85\x0f\xd4\x9d\x90\xed\x9a\x2d\x1c\x94\x07\xca\x13\x72\x10\xcf\x30\x61\xbb\xfa\xf0\xdc\x6a\xd4\x4c\x5a\x49\x8c\x76\x6e\xe1\x6f\xd8\xb5\x10\x73\xcb\xa9\x38\x54\x79\x72\xd7\xb4\x52\x1a\x05\x98\x04\xaa\x6e\x91\x76\x41\x88\x20\x4c\xa6\x37\xe4\x00\xa5\xf4\xda\x30\x7c\x8d\x9a\xab\xab\x08\xd5\xea\x8f\x04\xe1\xe0\x37\x29\x24\xfe\x55\xd3\xfb\x70\xb3\xa7\x0b\x23\x47\x3c\xa3\x9b\xe2\x4b\x94\xe9\x00\xe0\x4a\xe8\x80\xb8\x64\x18\x4e\x71\x02\x35\xa7\xab\x6f\x57\xe8\x7d\xe5\x4e\xd7\x47\x86\x2b\x3e\x50\xc0\x6f\x4c\x22\x63\x2c\x82\xb9\xf6\x3c\x9c\x1e\xf2\xe9\x53\x86\xd7\x7c\x81\x59\xaa\x2b\x0e\x8d\x13\x6b\x24\x7a\xd0\x9b\x21\xc1\x7e\x29\x41\xd9\x9e\xe1\xc4\x97\x75\xe1\xe3\x38\x40\xe1\x4e\x6b\xa5\xdd\x06\x8a\xef\xa5\x52\xa5\x41\x6c\x56\x54\x2c\x9f\x61\x74\x60\xe9\x83\x25\x11\xaa\x65\xa7\x20\x42\x69\x35\x2c\x28\x3b\x65\x8f\x07\xae\xc5\x88\x95\x55\xa7\x18\x6f\x01\xcf\xf2\xa6\x07\x0a\x1c\x6b\xf0\xcb\xc2\x88\x6c\x4c\x9e\x89\x9a\x7a\x11\x29\xcd\xcb\x25\xa4\x0a\x57\xf2\x29\x8c\x7a\x6f\x09\xa9\x4a\xfd\xa8\xc5\xaa\xfa\x51\xde\x9e\x82\x1a\x62\x21\x6f\x38\x9f\x44\xd5\x4d\xd8\x68\xe5\x6c\xd0\x3a\x8d\xa5\x25\xea\x76\x3e\xdd\x8c\xdb\xf9\xb8\x21\xf0\xc8\x52\xdb\x19\xa8\x74\x83\x06\xbc\x30\xab\x76\x64\x75\x75\x6e\x86\xd5\x9a\x38\x1b\xf3\x11\xa6\xa4\x92\x26\xe0\x49\xe2\xce\x56\xa4\xcc\x79\x15\xd1\xe9\x3a\x50\x18\x06\xd2\xb1\xd5\x18\x34\x46\x9a\xb7\x29\xc1\x3e\x48\xa9\x5c\xec\x0a\x4d\x34\x30\x52\x37\x8c\xa5\x23\xcd\x25\x89\x05\x23\xd5\xae\xd1\x13\x80\x08\xb9\x40\xd1\xed\x54\xe4\x95\x77\x68\x18\x28\x82\x7b\xa3\xae\xad\x9c\x82\xca\x51\x8b\x4a\x9c\x94\x43\xc2\x34\x1b\x73\xcb\x19\xc4\x78\xac\x34\x84\x5d\x22\xf3\xda\x95\x25\x22\x72\xb8\x34\xfb\xca\x1a\x7c\x89\x0c\x58\x27\x69\xb8\x11\x6d\x62\xca\x24\x95\x59\x32\x53\x48\x7b\xe4\xc1\x93\x40\x0e\x7c\x57\xb9\xd2\x80\xb4\x81\x1a\x46\xd5\xf2\x5b\x56\x76\xba\x2a\xad\x58\x28\xd9\x80\x1a\x24\xf3\xc9\xb8\xcc\xa2\x3d\x6d\x56\x3c\x2a\xd1\x76\x61\x65\xbf\xe0\x5d\xa2\xbc\x70\x66\x7e\x2e\x01\x99\xa1\x54\x61\xac\x06\xee\xee\x9c\xff\x9c\x93\x99\xe8\x96\xce\x16\xe0\x26\xd9\x0b\x89\x15\x75\xe9\xec\x06\x08\xc4\xaa\x06\x85\xfa\xe5\x90\x0a\x4a\xb2\xe7\xa9\xab\x28\xe0\x3c\x70\xae\x90\x42\xfc\xfa\x9e\x3f\x4a\xf1\xd9\xc3\x33\x57\xe9\xd5\xe1\xff\x1c\x55\x00\x1b\x0a\xe2\xc7\x3c\x7b\xe1\x42\x92\x77\xed\xa3\x24\x97\x0f\x92\x85\x06\xb1\xc4\xa9\x8e\x4e\x9b\xb8\x8a\x88\x4e\x61\x76\xd0\x05\x58\x1f\x76\x4f\xe4\xf0\x09\x12\x70\x55\x76\x16\x2a\x00\x41\x38\xde\xaa\xa5\x96\xa6\x72\x8c\xa5\x0e\x8c\x4b\x81\x05\x1a\xf3\x82\x5e\x42\x4d\x70\xd9\xff\xe0\x78\x3a\x49\xa8\x11\xcf\x2d\x21\x7c\x19\x95\x05\xa6\x98\xa7\xa0\x9e\xc5\x3b\x08\xe5\x50\x5d\xfd\x99\x5b\xaa\x83\x8a\x41\x80\x99\x11\x19\x94\x3d\x2e\xf0\xda\xc5\xd5\x73\x40\xed\x2d\x0c\x32\x9c\xc4\x95\xbe\x8a\x56\x8b\x61\x21\xbf\x88\x5b\x77\x2b\xab\x75\x59\x67\x50\x7b\xb4\xf2\xf9\x36\x63\x2f\x11\xfc\x94\x53\xce\x71\xf5\x15\xf4\xcc\xfa\x81\xa3\x92\x66\x44\x4d\xf2\x39\x48\x73\xb7\x9a\x99\x90\x0b\x69\xb9\xa0\x12\x8e\x42\xee\x65\x27\x33\x97\xdc\x09\x21\x82\xaf\x5c\xac\x85\xea\x7b\x8c\xa3\xd4\x7f\x74\x16\x18\xe8\x41\xe3\x35\x9d\x10\xf1\xf1\xd5\xd7\x53\x94\xda\x96\x2b\x59\x8d\x0c\x6a\xc1\x40\x48\x1e\x16\x87\xc5\x7d\x32\xaa\x53\x72\x3b\x55\xec\xd6\xea\x16\x88\x7d\x70\x67\xaf\x34\x49\x04\x9e\x2c\xa8\x36\x7a\x1e\x6a\x54\xb8\x3b\x68\x59\x01\x94\xfe\x0c\xe8\x1c\x50\xd2\x0d\xe9\x8f\x3a\xc2\x83\x03\x01\x5d\xf9\x6c\xcf\x0f\x86\xa0\x9f\x7c\xc3\x34\xb7\xcb\x4c\xe2\x8f\x49\x6a\x42\xe9\x8b\x9f\x78\x48\x4b\x6c\x43\xad\x22\x7d\x1c\x7c\x43\xb3\x1c\xdd\x24\x37\xee\x5c\xae\xd2\x61\x56\x65\x7f\xcf\x84\x16\x8c\x4f\x26\x96\x6a\x6e\x70\x67\x3f\xc3\x7a\x20\xd8\xbf\x62\xb0\x18\x92\xe2\x8d\x11\x67\xba\xdf\xa1\x48\x61\x15\x1e\x68\x69\x37\x73\xf1\x7b\x66\x0a\x05\x21\x92\x7a\xd5\x30\x54\xdc\x03\x17\x1a\x6a\x67\x7c\x45\x33\x74\xae\x09\xb4\x43\xd5\x5c\xac\x95\xe9\x5f\x04\xcd\x51\xcd\x81\xc6\x74\x09\xab\xda\x40\x1c\x87\xba\x03\x0c\x0a\xa6\xac\xe0\xe9\x92\x6a\x0d\x8a\xc0\x44\xde\x88\xbc\x52\x4b\xf1\x38\x44\x45\x95\x03\x9a\x49\x13\x81\x86\x78\x06\xe5\x53\x1e\x6c\x0f\x24\xcc\x28\xe7\x88\x06\x93\x36\x7a\xea\xce\x35\xac\x82\xea\x82\xa5\x1f\xd6\x53\xfd\x52\x9b\xb1\x26\xe8\x42\xb9\xb8\x45\x57\x8d\xa1\x4a\xe6\x79\x18\x22\x08\xb8\x07\x7c\x1a\xbc\x59\x58\x66\xb0\xa2\x88\x58\x5e\x8c\xd8\x84\x85\x5b\x9a\xfb\x80\x9b\x5e\x84\x31\x6c\xb7\x18\x3b\xa2\x4a\x82\xa0\xbc\xf8\x7a\x1b\x0e\xe2\x9b\x7b\x3c\x1f\xd1\xd3\x1f\x86\xb3\x7c\x84\xf1\x32\xff\x2c\x35\x54\x04\x55\x20\x6c\x9f\x63\x14\x50\x11\xda\x4e\x85\x4a\x25\xb9\xe9\xe1\x33\xe6\xc1\x44\xaf\x75\x45\xc4\xf6\xae\xc6\x05\xdc\xd0\x78\x01\x13\xae\xea\x81\xa3\xc9\x91\x0c\xa3\xef\x56\xe1\xc0\x64\x59\x49\x70\xc3\x8c\xcb\x2c\x08\x12\x87\x85\x81\xe3\x18\x57\xb5\x44\x24\x66\xa8\x24\xe0\xbc\x05\x70\x84\x6b\x81\x13\x94\x5a\x4b\xf6\xc3\x97\x77\x1b\xf3\x75\xfe\xc0\x99\x77\xff\x59\x12\x56\x51\x04\x56\xbd\x40\x05\xdd\x59\x49\xcf\x5b\xe0\xed\x0f\xbd\x5c\xa0\x05\x94\xf7\xb5\x82\xe9\x36\x18\xe4\xeb\xed\x2c\xc3\x0e\x60\x4a\xcf\x29\xbf\x65\x85\xad\x35\x22\x44\x10\xe2\x47\xa3\xf2\x0e\xe4\x64\x18\x29\x8d\x00\x4a\x80\xbe\xcc\xf8\x68\x2a\x73\xb1\xe7\xeb\xa5\x56\x2a\x7f\x80\x3c\x1d\x0c\x72\x27\x11\xef\xf6\xb7\xaf\x9b\xa4\xc2\xe0\x0c\xb1\x3f\x57\xd0\x4d\xba\xb8\x2a\xf4\xab\x0b\x3d\xa6\x0b\xa1\x6b\x56\x54\x6f\xbc\x24\x31\x62\x12\xca\xd0\x3a\x14\xcc\x70\xb0\x7d\x01\xe0\xef\x0e\x09\xc4\x22\x01\xbf\x14\xa1\x6a\x20\x0e\x41\x77\xd5\xbf\x67\x15\xb8\x1b\x9e\x61\xd1\xaa\x78\x08\xe2\x05\x15\xef\xa3\x53\xc0\x40\x2d\x81\xe1\x98\xe1\x85\x34\x63\x49\xee\xa2\x48\x1f\x44\xd1\x58\xd7\x67\x62\x5a\x43\x85\x25\x1f\x55\x8c\x8d\xbc\xd8\x07\x38\x9b\x0b\x08\x54\x44\xd3\x72\xc3\xd4\x6a\xb0\x46\x24\xf2\x94\xfc\xaa\xcd\x3a\xd5\x8b\xe0\xe3\x33\xb9\xaa\x61\x60\x22\x07\x43\xe0\x85\x5e\x83\x1a\x96\x05\xb6\x0d\x0c\xc0\x6c\x54\x18\xea\x52\x74\xb8\x60\x43\x41\x6d\x23\xa8\x95\x91\xae\x05\x2d\xc1\xb7\x65\x5c\x08\x66\x5d\x7c\xee\x38\x8e\xcf\xf5\xc1\x01\x69\xa5\x36\xe0\x77\xa4\xe5\x13\x2a\x73\x85\x69\xdd\xe5\xae\xbb\xfd\xab\xa2\xcb\xa1\xa9\x02\x5e\x67\xcc\xb3\xcc\x78\x37\xea\xfd\x12\xd8\x23\x35\x1c\xa2\xe6\xfe\xb9\x2f\x11\xc8\xee\x2a\x44\xd6\xa9\xf6\x8f\xe7\x05\x8e\x4f\xad\xc2\x26\x79\x16\x54\xc1\xd7\xf8\xbd\xac\xa7\xa6\x39\x65\x25\x21\xb5\x8d\x0c\xed\xd5\x93\x0d\x90\x08\x1f\x0a\x8d\xa7\x25\x4d\x04\x70\x5a\xe3\x93\x6e\x43\x6e\x3b\xb2\xbc\x3f\x63\x85\x50\xb2\x17\xb0\x7e\x5b\xed\x32\x63\x21\xa1\x15\x11\x27\x42\x8c\xdd\x4b\x53\xf8\xdd\x8c\x03\xc2\x29\x73\x50\xc5\xa9\xe0\x96\x41\x8d\x65\x26\x9c\x70\x93\xd5\x22\xc8\x15\x73\x20\xe6\x28\xce\x2f\x88\xbe\x27\x42\xc3\x54\xd9\xfb\x8a\xf3\x54\xbb\xc1\x55\x77\x2e\x9e\x49\xbb\xb2\xe0\x9e\xa6\xa4\x26\x5d\xc2\x9f\x45\xc8\x60\xb1\x77\x0a\xdc\x6f\x79\xe1\xcc\x58\x0c\x44\x81\x69\x57\xbd\x3d\xaa\x2c\xaa\x8b\x41\x68\xbb\x7f\x47\x1a\xe7\x38\xe3\x55\x24\x1b\x10\x45\x0b\x03\x95\xb8\x7c\xea\x03\xfa\x73\xdc\x9c\x30\x47\x03\x02\xfb\x90\x58\xe3\xdb\x22\x66\xfc\x36\x66\xcf\x18\x0f\xc8\x63\x54\x38\x6e\x0a\x84\x03\xf2\x72\x26\x34\xf8\x57\xad\xb5\x37\x13\x85\xd0\xd6\x70\xc4\x18\xa7\x29\x74\x39\x2a\x4a\xc0\xa9\x2d\xec\xd5\x43\xaf\x35\x25\x68\x91\xc7\xc4\xcc\x20\xcc\xc3\x47\x5a\x99\xe8\x17\xd2\x12\x02\x02\xf5\x3e\x94\xd9\xb4\xd6\x4a\x06\x25\x95\x94\x66\x60\x37\xc9\x9c\x65\x22\x9f\x14\xd3\x96\xb7\x67\x2b\x51\x05\xe5\x1a\x77\xc1\xb4\xad\xbe\x91\xc7\xd1\x8f\xba\x05\x46\x05\x16\x8b\x18\x5b\x18\xdf\x51\x62\x4a\x56\xc9\xec\x86\x33\x5d\x0d\x22\x5a\xf5\x26\x3a\x6f\x10\x78\xaa\x5d\xda\xc0\x6c\x11\xa6\x8c\x3e\x08\xcb\xa1\x6a\x3a\xc5\x9f\x43\xd0\xee\x2c\x34\x25\xac\x1d\x81\x3b\x98\x88\x2f\xf0\xb4\x2c\x9f\xd6\xde\x89\x3b\x1c\xc1\x7f\xb6\xe7\xa2\x93\x2f\xe2\x0b\x5d\x5d\xbc\x77\x68\x64\x46\xad\x5c\x50\x02\x41\x62\xa4\xb3\xd2\xce\xa6\xc5\x18\x17\x9d\x7c\xac\xf0\xe8\x2a\x40\x55\xb4\x3d\x38\xec\xfe\x70\xfe\xb9\xcd\x6a\x55\xd5\x9c\x45\xe1\x95\x15\x72\x5b\x7b\xcf\x3e\xa6\x0c\xba\xfa\x61\x74\xdb\x9e\xc2\xda\x09\xe6\x88\xfd\x21\xe8\x58\xc4\xa4\x58\xc3\xa6\x57\x74\xb1\x21\x92\x05\xd5\xd0\x51\x1d\x63\x05\x53\x25\x47\x4b\x8e\xf7\xb0\x3b\x88\x06\xad\xc3\x6c\x6a\xb1\x5a\x54\x12\x41\x37\x43\x30\xa6\xba\xc5\x14\x36\xcc\xba\xb0\xb6\x02\x7a\x2f\x26\x32\x17\xa8\x2c\x61\x85\xd5\x61\x39\x99\xf8\x7a\x84\x95\xb8\x41\x35\xf8\xe2\x93\x5f\xea\x2e\x77\xa4\x5b\x08\x47\x55\xdc\xe2\xb4\x92\xe8\x36\x48\x8a\xcb\x5a\x99\x5f\x84\x4c\xa8\x98\xee\xce\x45\x05\xd3\xaf\x88\xa9\x9a\x0f\x27\xce\xab\x21\x9f\xe0\xea\x00\x13\xa6\xcd\x14\xa1\xd3\x60\x5a\xa2\xbe\x08\x87\x1c\x7c\x8b\x58\xca\xde\x2c\x05\xcf\x62\x9b\xd8\xf5\x27\xc0\x15\x2d\x85\xd9\xdc\x36\xf8\x75\xcc\x14\x3a\x08\xaa\x90\x35\x8e\xa6\x31\x25\xa3\x52\x37\x53\xf2\x24\x00\x50\x8c\x4e\xf8\x9a\x85\x60\xc6\x86\x9f\x53\xaa\xa8\xe3\x80\x8f\xcb\x60\xae\x58\x35\x26\xd3\x71\x66\x45\xd8\x9b\x7b\x4c\x0b\x7a\xf7\x2e\x03\x63\x69\xc1\x51\xb9\x02\x72\x8d\x87\x18\x08\x64\x04\xdd\x0a\x2d\xfc\xf6\xfb\x99\x10\xc4\x65\xad\x95\x42\x83\xac\x36\x4f\x5a\x10\x63\x5c\xe6\x98\x15\x65\x0c\xd9\x0e\x8d\x53\xbf\xe7\xc9\x0a\x52\x2c\x2d\x3b\xe6\x1e\x34\xce\x0a\x1e\x02\xfb\x1c\xb3\x5d\x57\x5a\x21\xb6\x14\xa2\x14\x97\x30\x12\xe6\x7c\x55\x3a\x10\x84\xcb\x00\x62\xcf\x65\x60\x45\x4c\xc9\xfb\xa5\x69\x9c\x68\xc5\x35\xd0\x4b\x3d\x4c\x04\x3e\x94\x02\xa5\x65\x2a\xb4\x29\x94\x4a\x7d\x64\x27\x06\x2d\xde\x4e\x55\xc8\xe7\x8a\x1a\x30\xa0\xdf\xcf\xb7\x77\xa6\x98\x9a\xcc\xa3\x55\x55\xe4\x9f\x95\x02\x71\xfb\x26\xab\x92\x51\x5d\x60\x97\x13\x26\xea\x0e\x7f\x37\xa1\x00\x0b\xf5\xcb\x88\x3e\x1d\xe4\x27\x04\x0f\xaf\x00\xcb\x6a\x4a\x89\x74\xa8\x26\x1b\xb8\x96\xaf\x66\x56\x41\xd2\x47\x81\xe7\x68\xe2\x00\x5e\xf2\x03\x85\x37\xad\xf4\xcf\x89\xad\x37\x0f\x5a\x78\x0e\x78\xc1\x74\x99\xb3\x42\xce\x84\x0f\xb5\xc5\xec\xd0\x27\xc1\x65\xf6\x48\x2d\x18\xf5\x27\x74\xfe\x48\x07\xa1\xf7\x15\x80\x09\xea\xea\x82\x1a\x7c\x09\x79\xe2\x47\x0c\xca\x13\x78\x4a\x8a\x8a\xbe\xef\x53\xd9\xfc\xd9\x0f\xe1\x2c\x7b\x8e\xe6\x42\x3b\x29\xbc\x1e\x2f\xea\x11\x3e\x72\x1c\x45\xff\xe0\x78\x10\x80\x06\x28\x02\x87\x1f\x8c\x58\x02\x51\x2e\x8d\xe7\x4a\xe3\x86\xde\x9f\x7b\xc0\x96\x0a\x70\x63\xf9\x5b\x18\x79\xf4\x8a\x88\x5f\x71\x72\x14\xd8\xe7\xaa\x21\xda\x75\xdc\x8d\x7b\x07\x38\x96\x09\x66\x37\x3c\x93\x94\xbd\xe4\x6e\x31\x36\x6d\xb1\xaa\xb4\x60\x0b\xc1\xad\xca\x5a\xa8\x90\xe6\x09\xce\x01\xe4\xca\x76\x45\x64\xa4\xf8\x30\x73\x9c\xb8\x14\x05\xcb\xfe\xcc\x13\xa7\x97\x20\xee\x8a\x82\xc0\xb9\x02\xc0\x73\xb8\x69\xae\xb1\xb8\x29\xa8\xd6\xb8\x8b\xfe\x63\x1f\xcd\xb8\x6b\x55\x3d\x16\xbc\x32\x00\x42\xdc\xef\x7e\x87\x8a\x1d\x67\xad\x53\x05\xe1\x10\x77\x3a\x53\x70\x79\x4b\x64\xf0\x04\x5a\xe5\x5e\x89\x96\x20\x5a\xec\x07\xa1\x91\xd7\xc5\xec\x06\x1c\xb1\x74\x45\x7c\x87\xc6\x58\xa6\x0b\xdf\x0b\x3f\x7c\xca\x75\x0c\xf3\x99\xe4\x6e\x04\xb8\x61\x40\x49\x18\x9c\x57\xdd\x94\x00\x5f\xcb\x2b\x97\x25\xf2\xfa\x54\x21\x71\xeb\x4c\xed\x18\xc4\x18\x6b\x08\x80\x5a\xe4\x05\xc7\xbc\xf0\x02\x83\xc9\x1e\x01\x9f\x0b\x91\xe2\x07\x20\x5d\xaf\xda\xe5\x20\xf6\x27\x5a\x1a\x02\xd4\xce\xbb\x2a\x40\x7f\x70\x89\x1d\xa1\xd4\x30\xf9\x4c\x03\x4d\xd0\x10\x8c\x45\x29\x64\x81\xc4\xfd\x7c\x79\xbe\xc0\xe6\x17\x01\x8b\xee\x7b\xee\xc4\x2f\x36\x65\xee\x60\x91\xc6\x77\x2a\x1b\xa2\x67\xd9\xd2\xa8\x15\x6e\xee\x8c\xbf\xa7\x08\xd0\x6c\xae\x72\x90\x13\x4d\x62\xee\x3a\x61\xd7\x42\xe7\x22\x23\x93\xd0\xaa\x2d\xbe\x22\x70\x1d\xe2\x8f\xe5\x06\x7d\x33\xe5\x98\x26\xba\xcc\x4d\xe2\x6a\xdc\x93\x0f\x8c\x3e\xe6\x2d\x65\x62\x07\x58\xbe\xa4\xfa\x7e\x30\x7b\x0b\x6a\xcf\x31\x9f\x0b\xcf\x6a\xa4\xa9\x38\xfd\xb0\x16\x47\x0a\x85\x76\x8b\x50\xfb\xa3\x5a\x8a\x0e\x44\x21\xfa\xf9\x11\x82\x25\x0a\x4b\x99\x90\x57\x17\xf7\xed\x72\x04\x1e\x0c\x72\x5e\x61\x5a\x75\x0a\x78\x27\x59\x34\x09\x0c\x42\xf1\xdc\xb8\xe0\x04\x7a\x15\xad\x70\x1c\x2a\xdc\x81\x90\x26\x10\x8c\x98\x89\xef\x29\xb0\xc2\x43\x55\x0f\xd4\x7a\xfa\xfc\x25\x78\xd2\xd1\x37\xea\xe5\x0d\x62\x23\xfc\xca\xa0\xfa\xc1\x72\x88\x2d\x52\xf9\x8d\x4c\xc5\xde\x70\xb1\x87\xe8\xc6\xdc\x1e\x60\x99\x4f\xb2\x38\x81\x86\xe6\x88\x4d\xf3\x28\x02\xeb\xfc\x6b\xd1\x07\x2d\x09\xd7\x38\xad\x96\xcc\x2e\xe3\xc8\xe7\xeb\x09\x7b\x39\xb6\x6c\x69\xf9\x48\xf6\x5a\xae\x3a\x0c\x65\x30\xeb\xea\x99\x3b\xc4\xf1\xbc\x63\x32\x49\x53\x69\xa3\xeb\x4b\xf0\x10\x9c\x64\x29\x06\x90\x2a\xa7\xc9\xdf\xaa\x07\x68\xf3\x3e\x35\x21\xf3\x0a\x57\x31\xad\x32\x4d\x64\xc2\xa1\xcb\xfa\x1a\x54\x59\x99\x57\xd3\x1c\x42\x04\x2b\xec\x06\x08\x0e\xbf\x36\x97\x33\xfb\xc0\x08\x43\xd0\xb1\xaa\xe6\x7b\x15\xff\xf5\x7a\xbd\x99\xb9\x72\xbd\xae\xc9\x1a\x77\x8d\x2a\x91\x94\xa1\x59\x5d\x1d\x52\xb0\x12\x4e\x07\x15\x53\x40\x63\x76\xba\x12\xe4\x82\x15\x8a\x8d\x25\xdd\x29\x7f\x65\xed\x3d\x8d\x88\x15\x4b\x0a\x4f\x69\xbf\xa6\xbf\x86\x9b\x84\xe7\x37\xae\xd1\x16\xd7\x61\x03\xfd\xde\x2e\xb3\xda\xb1\x4a\xd4\x8e\x5c\x68\xbc\x43\xfd\x5e\xb2\x45\x38\x44\x2b\x5a\x94\x30\xd6\x81\x70\x12\x2f\x0a\x31\x9b\x17\x71\x2f\x57\xf5\xd0\xd9\x2c\x3b\x97\x22\x7b\xfe\x46\x49\x3a\xcb\xa0\x5e\xf2\xb2\x50\x33\x9f\xfa\xeb\x7b\x77\xba\x22\x48\x04\x51\x58\x39\x51\x2f\xe6\x5c\xec\xc4\x9a\x1f\x20\xd2\xbd\x32\x80\x41\xc9\x04\x2b\x74\xb8\xba\x27\x20\x28\x17\xab\x1b\x8a\x7a\xf3\xc3\x15\x99\x91\x3a\x6e\x4a\xea\xe7\x07\x32\xc9\xa9\xaf\xc0\x3c\xdc\x24\x10\xc4\x65\x39\x17\x24\xaf\x63\x9f\x2e\x9e\x47\x0a\xcd\xd7\xa1\x95\x0d\xa2\xaf\x49\x85\x28\x14\xb5\x28\xa8\x87\xca\x65\x3e\x12\x41\x5f\x41\x3e\x4e\xa1\x98\xaa\xbc\x77\x0d\xaa\xa0\xf2\x02\xb5\x16\xb6\xef\x55\xf3\xef\xc8\x6e\xbc\x6b\x9f\xa8\x33\x7a\x3d\x90\xeb\xf3\x62\xb9\xbb\x8f\x9a\x12\x08\xa7\x72\x28\x0b\xef\x2e\xf6\x95\x54\x08\x2f\xb4\xbc\xaa\x2a\x72\x0c\x7c\x35\xa1\x77\x5c\x25\x6c\x50\x83\xac\x37\x09\x0e\x7b\x87\x08\x69\xa1\xc3\x43\xe6\xa9\x35\x0d\x45\xdc\xfc\xc1\x35\xf6\xa8\x83\x1e\xa8\xea\x20\xc6\x88\x5c\xd9\xaa\xc7\x64\xb7\xe1\xac\xfd\x12\x6a\x97\x90\x30\xb5\x11\xb6\x25\x2a\x41\x73\xf0\xac\xcd\x20\xe7\x08\xcc\x41\xc4\x81\xdf\x15\x85\xbe\x77\xf1\x45\x5c\x63\xa3\x76\xc1\xe8\x66\x18\x08\x10\x44\xd5\x1e\x1c\xfa\xc1\xa7\xc1\x53\x03\xab\x15\x55\x49\xa2\xcb\xce\xaa\xc5\x49\x42\x94\xab\x5a\xbe\x71\x4d\xa6\x60\x9b\x55\x58\x9d\x9c\x61\xe9\x8c\xdc\x5a\xa9\x9a\x12\xcc\xaa\xaa\x53\x5e\x5d\x9b\x19\xfc\xa9\xd2\x7d\xa9\x08\x65\x75\x5c\xeb\x60\x6c\xd5\x66\x69\x5d\xbd\x72\xd5\xd6\x51\x22\x1f\x2b\x3d\x72\x81\x4b\xbc\xae\xa4\x32\x44\xa1\x59\x9f\x37\xbf\x22\x3a\x78\x70\xd0\x66\x3d\xd7\xc0\xc3\x77\x1b\x1a\xb9\x14\x69\xe8\x0d\xf1\xbe\x4c\x27\xa0\x29\x62\x26\x4b\x04\x5b\xc2\xca\x19\x80\x63\x09\xdd\x91\x99\x2b\x2a\x14\x75\xe2\x85\xac\xf3\x66\xad\x75\x90\xeb\xac\x6c\x4c\x29\x4c\x2b\xa9\x54\x00\xc6\x82\x51\x40\x59\x38\x2b\xf6\x78\x35\x9d\xbf\x1d\x9a\x5c\x43\xd7\x0a\x9d\x82\xb9\xe0\x53\x00\x43\x62\x9e\x65\xfd\xad\x10\x3e\x46\xdd\xd2\x39\x77\x2a\x3d\x24\x62\x96\x05\x2e\x7c\xdf\x24\x55\x7c\x18\x59\xb5\x13\x0a\xa1\x39\x43\x6f\xfd\xdb\xa1\x6a\x91\x57\x5a\x63\x45\xcd\x65\xc7\x61\xf4\xdd\xea\x8b\xb3\x32\x2b\x78\x2e\x30\x0d\x02\x81\xfa\x51\x07\x9e\xc0\xe4\x23\xfc\x13\x84\x9d\x3c\x5d\xe7\x42\x17\xa8\x3d\x54\x5a\xec\x60\x73\xda\xfa\x86\x86\x06\x29\x00\xd0\x5c\x7d\x51\x39\xa0\xdf\xeb\x69\xd0\x72\xec\xab\xaa\x80\x82\x49\x22\x07\x4a\xe0\x50\x9f\xde\x99\x2c\x2a\xed\xdc\x2b\xed\x8f\x96\x92\x72\x91\x71\x22\xec\xca\xde\x1d\x2b\x00\x5d\x12\x09\xe1\x71\x7c\xf0\x04\x1a\x54\xf9\x9f\x8a\xa9\x86\xd0\xe5\x42\x95\xb8\x50\xe2\x58\xd8\x69\x03\x8b\x10\xda\xc3\x91\xa5\x9e\xd0\x60\x35\x78\x2f\x7c\x2c\x33\xe1\xb1\xa1\x40\xd8\x83\x16\x63\x6d\x05\xa0\x47\x11\xc2\x96\xdf\xb1\x08\x87\xed\x5b\x81\x42\x88\xd0\x8c\x50\x95\x37\x4b\x99\xcc\xd1\x2d\xa3\x34\x2b\x73\xbc\xb7\x02\x01\xc3\xb0\xcf\x88\x85\x89\xab\xdd\x45\xb5\x11\x90\x35\x0e\x79\x16\xc4\x80\x88\x3f\x10\x57\x47\x04\x78\x9d\x83\xd9\xc6\xcf\x05\x3c\xef\xca\x57\x00\xf3\x83\x38\xae\x15\x55\x19\x7a\x15\xe0\xa6\x03\x62\xaf\x40\x6e\xca\x1c\x9c\xb6\x54\x47\xcd\xb1\x05\xbf\x3c\xf2\xaa\xea\xc8\x94\x14\xba\x58\x10\x02\x93\x3a\x25\x39\xf6\x0d\x98\x4f\xf4\x66\x51\x6f\x2e\x1c\x06\xd4\x16\x7c\xf6\x9b\xea\x04\x5c\x36\x39\xf4\x8b\x8a\x66\xe9\x52\x5d\x7c\x87\x3d\xbb\xfc\x89\xa6\x51\x0b\x57\xea\x20\x54\xe2\x88\x77\x9d\x8c\x75\x07\xdb\xb5\x6f\xbb\xa6\x00\x54\x89\x09\xc1\x66\xa1\xfc\x85\xd5\x32\x46\x60\x36\x9c\x60\xb9\x65\x48\xfc\x07\x25\x68\x86\x2d\x2a\xa1\x97\xb0\x2a\x4d\xa8\xdd\x1f\xf7\x5f\xba\xb5\x26\xa4\x06\x84\x5c\x9c\x81\x5b\xed\x99\xec\x6e\x02\xf6\xc0\xc5\x39\x4a\x74\xa0\xe3\x31\xc9\xe3\xb6\x5d\x31\xc2\x9c\x10\xdb\xbe\x60\xc0\x37\x64\x3c\x94\x73\x9f\xea\x04\x49\xcd\xfb\xa9\xca\x71\x2f\xa8\x84\xa4\x1c\x33\x00\xdc\x31\x33\x85\x43\x64\x95\x4e\x52\x1a\x2a\x95\x0c\xa3\x0e\x45\x38\xc7\xc0\xb2\x68\xa2\x98\xe3\xee\x93\x95\x3d\xc3\x24\x59\x8a\x6c\x1b\x22\x86\x1e\x3f\x5c\xbd\x53\xf1\xf9\x05\x1c\xa2\x9d\xb0\xfd\x56\xe6\xca\x84\xdd\x12\x98\x62\x28\x32\x29\x6e\x5c\x6d\x90\xa1\x58\x96\x73\x28\x9b\xcd\x52\xb7\xbc\x20\x24\x9f\xb7\x5d\x64\xad\x9e\x08\xb9\x8f\xbd\x78\x97\x92\xff\x4c\x94\x9c\x88\x90\x48\x57\x6e\x04\x0a\xbd\x82\xcb\x84\xdc\x4d\xc3\x05\x8b\x2e\xc6\x70\x11\x82\x73\xd8\xff\x0a\x7d\xc8\xc8\xd7\x63\x5d\x67\x29\x2b\xdd\x72\x51\xec\xbc\x5d\x99\xcb\x0a\x6b\x81\x7a\x19\x03\x97\xf0\x7d\x72\xd9\x44\xa8\x89\xe6\xf3\x29\xa0\x20\x2a\x0b\x8d\x72\x73\xeb\xed\xc5\xfd\x72\x12\x40\x9e\x91\x1f\x28\x7e\xb9\x52\x8f\xd7\x35\x4b\xb2\xfa\x01\x04\x0e\x03\x39\x90\xbb\x94\x06\x05\x2f\x24\x07\x63\xed\x12\xbc\xef\x54\xb9\x24\x5a\x85\xcc\x47\x4a\xcf\x95\x46\xe4\x0e\x78\xae\xfc\x34\xb9\x41\x3f\xbe\x73\x8d\x53\x24\x8e\xea\x7e\xac\xd9\xe6\x2f\xb0\xfd\xf6\xda\xfa\xaa\xe0\x26\xa2\xe4\x44\x2d\xb0\x89\x20\x9d\x81\x5c\xdc\x0e\x06\x39\xf9\xf4\x4d\xbd\xd2\xef\x9a\xd2\x3a\xa0\x53\x58\xe5\xd9\x5e\x3b\x39\x43\x48\x92\x5d\x6c\x2e\x6e\x99\x1f\x0b\x4c\xbb\xa1\xb0\x0a\x83\xb4\x92\x41\xe6\xcc\xcc\xa5\x96\xbe\x36\x9b\x8b\xb2\xb8\xf2\x72\xf6\x98\x97\xe8\xf8\xc3\x12\x14\xd8\x91\xb6\xe0\x12\x6a\x69\x50\x59\x00\xf8\x88\x2f\x22\x87\x20\xfb\x91\xd0\x3e\x22\x0e\xaa\x7d\x88\x69\x10\x3c\x17\xda\xa1\x5b\x46\x5a\x4a\x03\x26\x5b\xb5\xc2\x70\x08\x41\x47\x3a\x35\xf9\xcd\x4d\x54\x4c\x2d\xd4\x67\xa9\x4a\x64\xe0\xb1\x11\x5a\x17\xc5\x36\x16\xcd\x80\x56\x7b\x50\xdd\x85\x46\x81\x50\x64\xa5\xb0\xaa\x4f\x74\x8c\x0a\xaf\x17\x71\xdf\xe5\xaa\x8e\x49\x17\xd0\x65\xb0\xf8\x80\x90\x76\xd0\xc2\xca\xe7\xdc\xd6\x87\x18\xfd\xfa\xa3\xb2\x44\x87\x28\xad\x07\xa1\xd6\x10\x3f\x73\x22\xa3\x4a\x96\x00\xf3\xa0\x5e\x65\x76\x2a\xee\x11\x4c\xc5\x7a\xc4\x4c\xfc\xe9\xfe\xb2\xed\xf4\x53\x87\x4d\x8e\x2e\x10\x18\x0b\x4b\x29\x9c\x10\x6b\x0b\xa5\xaa\xe2\x9a\x3b\x98\x57\x52\xb9\xe8\x75\xed\x3d\x5f\x11\xf6\xc2\xb2\xba\xf6\x56\x8a\xaa\xb0\x71\x15\x58\xad\xe5\x10\xcc\x7e\xd2\x44\xbd\x40\x89\x84\x70\xcc\x25\xa9\x4e\xc7\xfa\x22\xe3\x95\x0f\xbe\xc2\xa5\xac\x78\xf0\x1b\xa8\x18\xac\x66\xc2\xde\x46\x83\x82\x45\x84\xf6\x88\x0e\x80\x86\xc5\x80\x01\x6b\x37\xc2\xc6\x76\xee\x8e\x4e\x4a\xf0\x4f\xd1\x7c\x8a\x5b\xc5\x26\x0a\x82\x37\x63\xbc\xa5\xfa\xa6\x52\x5b\xc9\x14\xbc\x28\x5d\xa1\xaf\x2c\x8b\xfc\x16\xe8\x6f\x2f\xeb\x25\xc2\xc8\x11\x3b\xd7\x6a\xa6\xbc\x8b\xc1\x40\xef\x9b\x09\xe9\x7c\x5a\x90\x3c\xf2\x2f\x4d\x90\xfd\x64\x8b\x76\xbd\xf4\xf7\xe9\x99\x2f\xea\xef\x8f\xc9\x57\x6d\xf6\xb2\x7b\xd8\xb9\xea\x77\xa1\xb6\xfc\x71\xef\xe5\x45\xe7\xe2\x1d\xeb\xf5\x5d\x35\x97\x23\xf6\xea\xa2\xdb\x85\x82\xf7\x6f\x3a\x17\xaf\xbb\x89\x7d\x0e\xfb\x07\x9c\x9e\x0d\x06\xb9\x6f\x13\xf0\x8a\x6a\xd7\xd3\x10\x89\x2b\xfe\xdf\xfd\xcf\xcb\xee\xe9\x25\x3b\xef\x5e\x9c\xf4\x2e\x2f\xbb\x47\xec\xe5\x3b\xd6\x39\x3f\x3f\xee\x1d\x42\x25\xfe\xe3\xce\x5b\x28\x67\xf2\x9f\x87\xdd\xf3\x4b\xf6\xf6\x4d\xf7\x34\xd4\xd1\x67\xfd\xcb\x8e\x7d\xa3\x77\xca\xde\x5e\xf4\x2e\x7b\xa7\xaf\x61\xc4\xe5\xc2\xfe\x9d\xd3\xa3\xfd\xa8\xfd\x07\xb4\x10\xe8\xfa\x06\x07\x95\x95\xc5\xcd\xa9\xd7\xb4\x3a\x18\x0c\x72\x6a\x76\xd0\x83\xe1\xa8\xe7\x41\xf7\x68\x75\xd7\x83\x64\x45\xdb\x03\xa0\x92\xd5\xa4\xf1\xe9\xbb\x3b\x20\x40\xf1\x9b\x75\x4d\x10\x06\x83\xdc\xb7\x96\x46\x7a\x9e\x5e\xf6\x2e\xba\xec\xa2\xd7\xff\x9e\x75\xfa\x8e\xca\xff\xb8\xea\xf8\xa1\xce\xbb\x17\xaf\xce\x2e\x4e\x3a\xa7\x87\xb0\x6f\x38\x93\x68\x67\xa1\xed\xc0\xbb\xb3\xab\x36\x63\xfd\x37\x67\x57\xc7\x47\x15\x02\x59\xa2\x75\xd9\x51\xf7\x55\xf7\xf0\xb2\xf7\x43\x37\xb1\x4f\xb2\x4e\xbf\x7f\x75\xd2\xa5\x1e\x12\x87\x67\x7d\xe8\x67\xd0\x39\x3e\x66\xa7\xdd\xc3\x6e\xbf\x6f\xdf\xeb\x77\x2f\x7e\xe8\x1d\x02\x3d\x2e\xba\xe7\x9d\xde\x05\xf6\x60\xb8\xb8\xc0\x66\x07\x81\x33\xfd\xb9\xda\xbb\xe1\xea\xf4\xd8\xae\xfb\xa2\xfb\x8f\xab\xde\xc5\xaa\xe3\x61\xc7\xe9\xbc\xbe\xe8\x62\x3f\x89\xde\xa9\x3d\x74\x74\x1a\xde\xf6\x8e\x8f\xb1\x8f\x43\xed\x48\x24\x8c\x1a\x3c\x84\x03\xf1\x8e\xbd\x7d\x73\xc6\x4e\x3a\xef\xb0\xce\x90\xdd\x65\x3c\x36\xec\xa2\xeb\x4b\x11\x55\xcf\x4a\xa7\x1f\x1d\xdb\xce\xcb\x33\x4b\x8d\xd0\x43\xe2\xf2\xcc\x92\x66\x30\xc8\xed\x96\x51\x07\x89\xb8\x19\x86\xfd\x3c\x55\x48\x4a\x58\xff\xbc\x7b\xd8\xb3\xff\xe8\x9d\x1e\xf6\x8e\xba\xa7\x97\x9d\x63\x6c\x58\x73\x78\x76\xda\xef\xfe\xe3\xca\xee\x6a\xe7\xd8\x37\xa2\x70\xfd\x23\xa8\x73\x44\xd4\x13\xa2\x77\xea\x4e\xcd\xe5\x19\xa3\x6b\x1b\x6d\x6f\xf3\xce\x66\x1c\xc7\x67\x7d\x38\x80\x47\x9d\xcb\x0e\x83\x59\x5f\x76\xd8\xcb\x2e\xb6\xde\xb9\xe8\x9e\x1e\x75\x2f\xe0\xba\x75\x0e\x0f\xaf\x2e\x3a\x97\xf0\x41\xfb\x4e\xb7\xcf\xfa\x57\xfd\xcb\x4e\xef\x14\x37\xc8\x1e\x09\xb8\xee\xbd\x8b\x23\x7f\xdb\xa8\x2d\xfa\xab\x4e\xef\xf8\xea\xc2\x9d\x3c\x4f\xcb\xcb\x33\x76\x76\xde\x85\x41\xe1\xfc\x85\xcd\x71\xfd\x2c\x5a\x09\x9c\x08\xd6\x7b\x65\xd9\xf5\xd5\xe1\x1b\xda\xcb\xd0\x09\x03\xb7\xf1\x4d\xa7\xcf\x5e\x76\xbb\xa7\xac\x73\xf4\x43\x0f\x6e\x25\x7e\xe9\xfc\xac\xdf\xef\x11\x6d\xce\x5e\x31\x3b\xc2\x60\x90\x13\x45\xeb\xcc\xf0\xde\x5e\xb9\x51\x1f\x8c\x37\xea\xd6\x0a\x93\x0e\x18\xce\xe8\x59\xbe\x04\x15\x03\x1b\x80\x6b\x76\x2a\x6e\x49\x88\x62\x78\xd6\x61\x90\xc1\xb9\x8c\x65\x1e\x31\xb5\x8b\x55\xaa\x31\x47\xd5\xd8\x29\xb6\x4d\x02\x19\xeb\xda\x41\x06\x64\xa5\x90\xa1\xd3\x00\x41\xb1\x84\xf2\xb6\x80\x33\x9a\x89\x3c\x75\x75\xaa\x65\x51\x93\x21\x64\xfb\x09\xd7\x2f\x03\x0b\x5f\x57\xab\x37\xbb\x1a\x01\xe8\xe9\xc4\x32\xed\xcc\x28\xb0\x55\x50\x97\x47\x81\x53\xf3\xf2\x2c\x95\x46\x62\x4d\x68\xbe\x9c\x15\x42\xe7\x1c\xeb\xfd\x26\xeb\x43\x66\xf7\xd4\xa2\x6c\xc5\xd5\xa3\x7d\x1a\xa1\xfb\x54\xc2\x78\x51\x70\x0a\xa5\x07\xf5\xcf\xe7\xf4\x55\xca\x74\x63\x49\x4e\xd0\x23\x0c\x1f\x5b\xdb\xcf\xaa\x1f\xfe\xfd\x99\x7b\xdc\x14\x14\x5e\x03\xe4\x27\x01\x03\x00\x82\x0d\xf1\x08\x53\xb0\xa8\x92\x31\x2a\x97\x37\x62\x41\xd1\xfc\x51\x56\x3a\x80\x51\xb5\x54\x08\x0c\x06\xa3\x50\x1d\x69\xc4\x73\x14\x1e\xa6\x83\xbd\x38\x1a\x5e\xc5\xb1\xa2\x29\x93\x39\xf9\xff\xd8\x5c\x81\x59\x88\x8d\x89\x04\x95\xf6\x84\xa8\x0d\x45\x11\xa5\xd5\x55\xca\x3c\x8d\xce\xb8\xdd\x69\x18\x22\xc6\xfd\x10\x35\x0c\xcb\xf9\xcc\x0d\x3e\xd4\x52\x8c\x99\x4c\x05\x47\x28\x39\x16\xc4\x74\xc5\x64\xec\x50\xd5\x26\x2f\x0b\x6b\x6c\xe3\x00\x56\x8b\xc1\x12\xd6\xfe\xb3\x54\x6b\xd8\x5b\xc5\x95\xa3\xf8\x8d\xcf\x3f\xac\x9c\x3f\x54\xfa\xf7\x7d\xc9\x02\x5f\xfd\x7e\xcd\xc9\x89\xca\x17\x2f\x67\x8e\xb2\xd0\xa4\x1c\x92\xb1\x23\xcd\xf9\x4e\x9d\xf1\x1b\xb2\x0e\x68\x88\x9b\xd0\xf9\x86\x55\x1b\x15\x43\x18\xb3\x59\x2d\xb5\xd2\x5a\xb6\x1e\xda\xeb\x69\x12\x87\x93\xc9\x4e\x9d\xaa\xb9\xf0\xc5\x48\x9d\x72\x89\x29\x86\x0e\x2d\x67\x4d\x3c\xa7\xae\x58\xd6\xe9\x54\x96\x6f\x7c\xc6\x05\xa5\x7a\x80\x1f\x1d\xaa\x15\x84\xae\xe1\x0e\xe2\x56\xd7\x3b\x94\xbe\xb7\xf7\x92\xd5\x11\x84\x2f\x84\xe9\x28\x7c\xb7\xa1\xeb\xda\x43\xa2\x11\x6a\x22\x5a\x58\xf6\x12\x5f\x82\xd5\x70\xa8\x87\xef\x70\x9c\x5e\x16\xa8\xfc\x0d\x93\x63\x7b\x37\x56\x18\x02\x51\x5f\x6c\x18\xa9\xde\x9a\x28\xd9\xb4\x31\x91\xd5\x2a\x32\x03\x66\x37\x75\xc0\x20\x2f\x5c\xce\xa6\x28\x46\x00\xc5\x8a\x35\xfd\xed\xa9\x14\x99\x18\x15\x5a\xe5\x72\x44\x45\xe8\xe7\xd0\x74\x40\xba\xa2\x1a\x11\xc9\x20\x0d\x60\x22\xe8\xec\x89\xd9\x3c\x53\x0b\xa1\x59\xd3\xe5\xeb\xfa\x3a\x0e\x64\xb6\xcd\x84\x86\xc6\xdb\x14\xa4\x36\xd6\xbe\xcc\xd0\xbf\x9f\x43\x83\x06\xc8\xea\xc1\x34\x82\xe0\x5e\x0a\x45\x95\x5c\x89\xb5\x65\xbc\xa4\x43\xbd\x5a\xce\xfa\x86\xaa\xcb\x72\x66\x20\x80\xf0\x0d\xa5\x59\xdb\xb7\x2c\x9f\x08\x38\x8f\x77\x6a\xa1\xd2\x45\x2e\x1c\xa9\xa9\x7f\x9d\xfb\xa0\x71\x9d\xcd\x68\x22\xc0\xf5\x04\x00\xd0\x3c\xc8\xc2\xdd\xa3\xff\xfb\x95\x56\xc3\xc1\x9f\x58\x33\xd4\x14\x81\x99\xde\x52\x41\xed\xeb\x5c\x0d\x4d\xcb\x43\x25\x87\x0b\xf6\x9d\x9d\x0a\xbb\xe0\x79\xaa\x66\xec\x0d\x1f\x5d\x0b\xed\x0f\x26\x62\x05\x4b\x0d\x3c\xed\x72\xc1\x0e\x95\xdd\xe0\x03\xd6\x99\x6b\x99\xb1\x83\xaf\xbf\x7e\x86\x72\xc8\xfd\xe5\x5c\x0b\x23\x5d\xc9\x91\x1f\xa4\x6b\xaf\x75\x69\x45\xed\x9f\x7c\xef\x0c\x24\x0b\xb8\x35\xfe\x63\xa9\x55\xd7\x48\xa5\x62\x26\xb5\x56\x9a\x1a\xdc\xba\x7e\xa8\x71\xc7\xc1\x2a\xeb\x7d\xfe\xec\xe0\x2f\x76\x25\x27\x5c\xcb\xf7\x39\x7b\xc3\x6f\x84\x1e\x8a\x6b\xc1\x66\xf0\x8b\xe9\xdf\x27\x70\x6c\x46\x54\x57\x15\x5b\x01\x6c\xbf\x6f\x60\xd4\xc4\x7f\x6b\x9d\x03\xc1\x47\x0f\x27\x66\x2b\xbd\x03\xd1\x45\xbd\x9d\xee\x81\x9b\x34\x48\x8d\xfb\x07\x42\x4a\xd8\xe7\xd1\x41\x90\x82\x71\x9f\x41\x0f\xc1\x60\x21\x6f\xdc\x45\xd0\x5a\x1e\xdb\xeb\x23\x68\xd9\xf8\x56\x3a\x09\x82\x69\xb6\xc5\x5e\x82\x83\x41\xbe\xb5\x6e\x82\xb5\xed\x0c\xfd\x04\xa1\x7f\x36\x07\x17\x58\x4e\xbc\xa9\x33\xe7\xa3\xa0\x05\x55\x5a\x58\x3f\x4b\xd8\x77\x3c\x87\xde\x80\xcf\x9f\x3d\xfb\xb2\xda\x8a\x9b\xc3\x7b\xd5\x36\xdc\x74\x92\xd6\x15\x08\xbe\xb2\x8b\xbe\xe8\x9e\x5f\x9c\x1d\x5d\xc1\xca\x12\x78\x2a\x2e\x17\x8c\x23\x1c\xb4\xd9\x51\x94\x33\xe1\xa6\xdf\x08\x95\x72\xe9\xf8\xcf\x04\xcf\xab\x9e\xe1\x3a\x56\x06\x78\x85\x43\x2d\x3b\xf4\x71\x05\x7c\x49\x61\x86\x28\xe1\x34\xca\xdd\x71\x91\xaf\xaf\xbd\x8f\xdb\xb1\xc0\xfa\xac\x94\x5e\x31\xad\x70\xa1\xd5\x6d\x8e\x19\x86\x22\x2f\x64\xb1\x88\xeb\x0d\x7b\xdf\x6f\xfd\x69\x97\x47\x0c\xfc\x3c\x00\x91\xe2\x68\x07\xf4\x45\x98\xf0\x8c\x75\x61\xd8\x15\x53\x28\xf3\x28\xe4\xcd\x31\x78\xea\xe6\x60\x99\x3b\x30\x42\xf4\x0d\xc3\xaf\x3d\x54\x96\x8a\xe8\x24\x94\xd5\x06\x3f\x64\x30\x5d\x50\x95\xed\x6f\x51\x8f\xb7\x86\x2a\x40\x4d\x5d\xd9\x1d\xd2\xdb\x78\x41\x1f\x6a\x83\xf3\x37\x8a\x38\x07\xcc\x45\x48\x8d\x49\x9c\xad\x04\x63\x84\x42\xbb\x4d\xd9\xc2\x57\xd5\xad\xd0\x09\xe1\x09\x62\x34\x41\x82\x05\xf6\x28\xeb\x26\x24\xa9\x61\x04\x60\xc6\x73\xee\xf0\x2c\x2e\xfb\x1b\x26\x15\x5a\x7f\x0c\x5d\x1f\xc3\x51\x1d\x78\x82\x36\x81\x94\x2d\xdc\x10\x33\x95\x73\x08\x4a\xc8\x71\x01\x52\x74\x64\x87\x6d\x7e\xf5\xec\x7f\xb4\x98\x53\x8d\x83\x11\x5c\x16\xd0\x68\x00\x50\xd2\x53\xae\x85\x71\xa3\xc9\x16\x1b\x8a\x5c\x8c\x25\xc0\xe2\x2b\x23\x47\xf3\x0b\x1b\x0c\x5d\xfe\x1a\x00\xbe\xc2\x9f\xec\x49\x6b\xc5\xfb\xcc\x73\xa0\xc6\x8d\x4c\x4b\x3b\xa2\x66\xd5\x33\xe1\xaa\x24\x41\x1e\x68\x54\x41\xca\x81\x94\x56\x64\xd4\xe3\x97\xfb\xd4\xcd\xab\x81\xa0\xd1\xda\xc9\xaa\xd5\xe3\xc5\x0e\x13\xcb\x15\x78\x13\x5f\x25\xd8\xfe\xc9\x9a\x3b\x35\xfc\x90\x57\x36\x2a\x89\x67\xf5\x6e\xec\xf8\x47\x57\x4c\x32\x1f\xcb\x49\xa9\x23\x35\x24\x4c\xfa\x8c\x52\xac\x97\x27\x0d\xd0\x2e\xfb\x3b\x2d\x4c\x99\xc1\x4d\x80\xd8\x1d\x65\x4b\x8d\x40\x5d\xc1\x7a\x9c\x41\xbd\xd7\x95\x9a\xc7\x00\xa7\xa2\x62\xc5\xf6\xa1\x58\x73\x19\x42\xdf\xf7\xda\xe2\x42\x25\x8a\x90\x68\x97\x90\x2b\x7f\x49\xa3\xf2\x65\xd5\x54\x08\x41\xfa\xc8\xcd\x4c\xa4\x92\xb3\x62\x31\x8f\x17\xfb\x16\x50\xd2\x4b\x97\xde\x55\x0c\xa0\xfe\x91\x53\x39\x0f\xc7\xdd\x9a\x3f\x2e\x33\xc2\x0a\x1d\x4a\xa3\x87\xc5\x40\x2a\x0e\xbf\xe1\x32\x8b\x30\x2d\x15\x23\x99\x1b\x0f\x6c\xc4\x0a\x8c\xab\x72\x4b\x1d\xe3\x8a\x9b\x1b\x43\x1a\x53\x61\x65\x86\xaf\xc4\x4a\x10\xef\x26\x04\xaf\xc1\xc4\x80\x20\xb3\x43\x07\x93\xe2\xd8\x99\xcf\x45\x9e\xca\x0f\x58\x00\xbc\x15\xd6\x7e\x14\xd0\xa1\x96\x0c\xa6\x46\x07\x07\x54\x5c\xbd\x72\x76\xe6\x33\xf1\x61\xe5\x6e\xca\x1e\xd5\xd8\x84\x84\xe3\x50\xfe\x0e\xb9\xd0\x5b\x30\xc5\x72\x4c\xcb\xf2\x29\x1f\xf6\x8a\xa5\xb2\x50\x50\x12\x02\x22\xca\x88\xe0\x02\x38\x84\x83\x73\x89\x8c\x0f\x95\x76\x3f\x79\xec\x4c\xe5\xae\x50\x86\x0d\xc4\x81\x93\x08\xea\x93\x40\xc1\x03\x87\x18\x58\xde\xdd\x65\x0e\x1b\x29\xf3\x7e\xef\xea\x04\x23\x6a\xc5\x69\x36\x08\x13\xa5\xc2\x59\x33\x6a\xf3\x02\xe9\x06\x2e\xc5\x07\xa6\x3e\x13\x00\xad\x02\x20\x66\x13\x13\x6c\xe0\x34\x58\xb3\xb0\xe5\xb6\x37\x60\x1e\x98\x1a\xbb\xa4\x1f\x4f\xc0\xa5\xc9\x80\x61\xa5\xc6\x61\x7f\x0f\x23\x4c\xcd\x9a\xbd\xad\x9f\x71\x7f\x19\x1d\x9c\xac\xd6\xb2\xcd\xc9\x41\x3f\x0b\xec\xea\x51\xab\x3f\xeb\x6a\xbc\x91\xb9\x01\xd4\x80\x37\x94\x5e\x3b\xed\x24\x3a\xf4\xd4\x3f\x82\x52\x67\x4c\x39\x0c\x4d\x8c\x9d\xae\x00\xe7\x07\x66\x6b\xa2\x4a\xe9\xf0\x91\xa5\x66\x05\x20\x21\x10\x42\x8e\x25\x4f\xd7\xf3\xfa\x58\xad\x80\xfe\x97\xf6\xd3\xf6\x34\x0f\xc5\x94\x67\xe3\x50\xaf\xaa\x36\xfa\xc3\x24\xb4\x15\x3f\x7e\x35\x83\x41\x03\xea\x2c\x41\xb3\x01\xc7\x58\xd5\x38\x72\x7b\x24\x58\x8e\x3a\x83\x13\xe3\x0c\x76\xab\x2c\x94\xb9\x83\x30\x19\x84\x22\xd2\x81\xf1\xc4\x21\xf8\xb7\xbf\x0a\x18\x4a\xad\xf1\xda\x9a\x18\xc1\x44\xae\x68\x6c\x95\xc7\x2e\x18\x6b\x41\x63\x22\xaa\xc1\x96\x91\x21\x31\xdc\xa9\x2d\x88\x69\x32\x8e\x09\x03\x9e\xd5\x32\xff\xd1\x75\xc8\x74\x8a\xd2\x88\x50\xb3\xf0\xfa\x50\x4c\xe4\xc4\x63\xa2\xa3\xdd\xae\x21\xee\x52\x69\x46\xa5\xc1\xe6\x27\xf6\x6b\x33\xe0\x7b\xa4\xe4\xbd\x05\xbe\x85\x02\x25\x20\x75\xaa\xeb\x73\xe7\xad\x5a\x86\x7b\xc6\xf5\x35\xd4\x3d\xaa\x64\xf1\x44\x59\x93\x32\x67\xae\x84\xf9\xea\x93\x46\x5d\x26\x4e\xa1\xaa\x51\x7c\x07\xdb\xb8\xe5\xb5\xcb\xb9\xa4\xf7\xfa\x45\xbb\xfb\x75\xa7\x6a\x12\x93\x0d\xcd\xeb\xea\x47\x43\xef\x06\xef\x52\x1c\x2e\x2a\xdf\xa8\x94\x81\x03\x54\x92\x47\x43\x60\x66\x50\x74\xb9\x88\xb9\x3c\x6f\xb3\xd7\x56\xf7\xb1\xdf\x0c\xae\x18\x8f\xff\xed\x57\x4d\xf7\x95\xb6\xc5\x8a\x12\x9d\x10\x0e\x88\xe8\x52\x71\xc7\xb8\x98\x12\xe3\x56\x05\x9b\x8b\xa2\xe4\xe0\x02\xbe\x55\x3a\x4b\x6f\xa5\x55\x0a\x72\x95\xef\x51\xb4\xe1\x06\x7e\xdc\x73\x7e\x9b\x18\x91\x9b\x60\x39\x3d\x35\xe2\xd8\xeb\x3b\x6a\x2b\x11\xf2\x09\x9c\xc1\x03\x85\x3a\xa0\xaf\xc7\x32\xe3\x42\x9e\x8c\x21\x27\x4c\xa2\x9c\x67\x7c\x41\x3e\x14\xfb\x1b\x4a\xf0\x5d\x72\xa0\xd4\x40\xc7\x83\x41\xee\xd9\x29\xe8\xaf\x4b\x5f\x5a\x21\x77\x81\x5d\xd0\x6e\x7c\x11\xed\xc6\x39\x62\xc9\x7f\x9f\x5b\xd1\x0c\xc9\x4e\x50\x87\x2a\x74\x88\x24\xc4\x63\xab\xde\xa3\x92\x50\x8f\x49\x00\x95\x26\x98\x23\xe9\xd2\x9a\x2d\x13\x17\x59\x96\xd0\xff\x95\xb3\xb9\xd2\x45\x12\xdc\x80\x98\x19\x45\x25\xe4\x03\xeb\xc0\xa2\x36\x5a\xb8\x6e\x80\xd5\xf2\x89\x00\xde\x73\xe5\x73\xdd\x94\xc8\x53\x8b\xcf\xd2\x82\x86\x54\x7e\x3a\xa6\xa4\xe7\x7f\x71\x81\x04\x07\x10\x76\xe1\x18\xa9\xc1\xc9\x19\xae\x71\xd3\xb4\xc0\xa9\x2f\x3c\x36\xb2\xde\x42\x51\x6a\x56\x7b\x21\xae\x93\xfa\x96\xea\x96\xa3\xca\x55\x9d\x14\x0d\x7f\x0b\x99\x50\x24\x9d\x00\x23\x85\xed\xd1\xa5\xef\x07\xe1\x89\x5f\x10\xc8\x9e\xf1\x09\xb7\x7f\x06\x36\x45\x46\x71\x33\x08\x19\xd0\x6d\xb5\x32\x66\x0f\x0b\xd9\x02\xb8\xae\x84\xa2\x81\xf0\x33\x56\xbe\xe6\xb7\xa6\x94\x45\x0b\x53\x2a\x7c\x86\xb2\x9b\x34\xca\xed\x1a\x4f\xbb\x8b\x45\x45\x0d\x2c\x1c\x7a\x1e\xc7\x18\x85\x4d\xf0\xbd\x4e\xe3\x7c\x0d\x97\x30\xb0\xd4\x09\xd5\xaa\x31\xce\xd4\xa3\x93\xbf\x02\x4b\x3a\x76\x7b\x0b\x93\x40\x7e\xee\xd3\xcd\xac\x48\xf4\x8e\x43\xa8\x41\x4f\x07\xcb\x53\x52\x62\x55\x0d\x17\xaa\xfc\xb2\xcd\x2e\x2a\x31\xe5\x90\x56\xe8\x79\x53\x9d\x97\x54\xbc\xb1\x8e\xab\xdc\xa1\x72\xd5\x7b\x54\xb8\x8c\x20\xf2\x20\xd7\x6a\x10\x51\x75\xaf\x75\xbc\xa8\x9e\x67\x8b\x67\x07\xfa\x08\xdc\xe3\xbe\x6d\xf2\x56\xad\xe8\x50\x9c\x31\xe3\x5b\x0d\xc7\x9a\x27\x18\x5e\x4b\xcb\x5a\x5d\x0d\xe8\x1b\x8f\x9c\xcc\x9b\xcb\xed\x06\x82\xfe\x6a\xcd\x14\xd7\x20\x7b\x7d\xbb\x81\x4a\xab\x81\x77\xab\x5a\x0d\xc4\xdf\x8b\x1b\x0a\x68\x51\x70\x09\x9e\x7a\xf2\x1e\x7b\x1b\xd8\xa1\x2c\x97\xed\xb1\xdc\x7f\x26\xf6\xc7\x57\x82\x41\x09\x1d\x56\x68\x2d\x94\x0a\xab\xbe\xf8\x3c\xb8\x22\xdc\x18\x17\xfe\xf7\xf9\x3b\xb5\xef\xc7\x9c\xaf\x0e\x6d\xae\x94\x03\xa6\x94\xc0\x39\xa1\xb8\x5d\x44\xc4\xd7\xc4\xb7\x03\xd5\x17\x12\x93\x04\xcb\x59\xf8\x9d\x24\xbb\xc9\x60\xac\xed\xf4\xec\xb2\x77\xd8\xb5\xfa\x50\x21\x3e\x50\x69\xba\xa8\x72\xb8\x84\x00\x46\x7c\x2b\xa2\x3b\xbb\xe2\x94\x2f\xd1\xce\xd5\x9f\xf7\x45\x11\x98\x2f\xf9\x13\x47\x59\x57\x11\x8e\x4a\xec\x40\xca\x01\x71\x1c\xb8\xc2\x38\x65\x98\x6a\xb2\x04\x0a\x5f\x41\x39\x4c\x09\x5f\x41\x3b\xb6\x8a\x72\xd8\x47\xc6\x01\x22\xe2\xd2\x4f\xd1\x8d\x42\xac\xfb\x0b\xc7\x08\xb9\x9b\x53\xa0\x61\x35\x63\x82\x9b\x3b\xbf\xf9\x4d\xcc\x51\x2b\xc7\x04\xa0\x9e\x15\x7f\x0b\x93\xe3\x70\xef\x6b\x35\x4d\x97\xc7\x55\x3a\x09\xd4\xe3\x4e\x63\x8a\x9c\x39\xa4\x50\xaf\xa0\xc2\x98\x8e\x10\x48\xe5\x1b\xa1\x91\xf8\x90\xdf\xb7\x87\xfd\xe6\x1c\xad\x7d\x55\x0b\x2c\xf1\x8c\x50\x76\x57\xc8\x28\x90\x2f\xda\x37\x90\xc6\x68\x4f\x7a\xbf\x15\xcf\x22\x4b\x2e\xcf\x7c\xeb\x15\xaa\xf8\x1c\xe7\x4c\x92\xa6\xe5\xd8\x33\x4f\x53\xc4\x3e\xa9\xdb\x3c\x3e\x49\xe8\xda\x82\x29\x12\x05\x1e\x72\x62\x13\xa4\xaa\xc1\x8e\xfe\x4a\xbb\x8e\x1b\x69\x2a\xf2\xb4\xf4\xf8\x9c\xca\x8e\xbb\x2b\x8e\x46\x90\xdb\x1e\xc7\x4d\xb0\x52\x02\x59\xe8\x3c\x5b\x7d\xd8\xc1\xf1\x42\x0d\xec\x4c\xa1\x4b\x77\x6e\x42\x8e\xef\xb2\x2b\x7d\x25\x01\x82\x76\x0d\x1a\x1d\x55\xd7\xc5\xbf\x2f\x75\x59\xa3\xbc\x3c\x9a\x71\x3c\x49\xc8\x28\x76\xed\xb3\xbd\xf2\xb7\x42\x99\x45\x7f\xd4\x8a\xa8\xc5\x52\x81\x77\x35\x5e\x31\x0b\xca\x7e\x77\x69\x9b\xab\xd5\xf1\xd8\xad\xe4\x0f\x3f\x8c\x55\x22\xac\xbb\xfa\xe1\xa5\x60\x49\x45\x92\x79\x25\x14\x33\x57\xe3\x34\xd5\x4a\x92\x65\x4d\x21\xae\x92\xfe\x2b\x50\xf4\x5d\x80\x13\x8c\xb2\x28\x9d\xaa\xcd\xae\xb0\x80\x8a\xdd\x21\x97\xe5\x92\x2d\x70\xc8\x30\x83\x84\xda\xc0\xd7\x34\xad\xc8\x19\x13\xd4\xc3\xf5\xee\x17\xd4\x7a\xdf\x61\xde\x5b\xc5\x29\xe1\x03\xae\x75\xf4\xd2\xfd\xe6\x88\x8b\x69\x43\x87\xb8\x70\x2a\x08\xfc\xa4\xe3\x9c\xe4\xc1\x20\x3f\x55\x85\x7d\xc1\x47\x0f\x0a\x17\x1f\x0e\x09\xf6\x98\x56\x4c\x53\x32\xe5\x5c\x68\x23\xb0\xc0\x37\x9e\x70\xa2\xbf\x47\x57\xc1\x61\x70\x55\x43\xbc\x39\xe0\xd3\x6d\x5d\x9e\x02\x58\x21\x58\x74\xc5\x0b\x8a\x40\x00\x2c\x4e\xea\xcb\x2f\x56\xf7\x08\x37\xf2\xcf\x6d\x76\xe9\xc4\xb8\xa9\x35\xf8\xf4\x99\x13\xa0\x8b\xae\xe9\xc9\x0b\x4a\x80\x65\x35\x7c\x06\xa9\x52\x7e\x30\x6b\x01\xe9\x1b\x39\x02\x50\xc4\x35\x3a\x50\xe9\x94\x22\x18\xa5\x0a\xe7\x42\x56\x1d\xec\xb1\xb8\x4e\x52\x68\x57\x42\x18\x49\x2a\x12\x0e\x25\xc2\x31\xc7\xc6\x8c\xb4\x1c\x86\x34\x43\x74\x23\x2e\x39\x0f\xeb\xc5\x90\x88\x4b\xb3\x65\x16\x4d\xe4\xf9\x4b\x9b\x1d\x55\x3a\x9b\xbd\x25\x24\x97\x3f\xe2\x7e\x9e\xc3\x85\xcb\xf5\x83\x92\x80\xfc\x16\x6f\x36\xec\x59\x8a\x49\x1f\xce\x8f\x93\x84\x2d\xf2\x2d\xbb\xfd\x3c\x9b\x0e\xa8\x18\x1b\x64\xf1\x93\xb2\x30\xd5\xad\xc4\x36\x13\x79\x05\x4f\xff\xb2\xd3\xef\xf5\x2d\x45\x6b\xf1\x7f\x42\x07\x47\x71\xde\x0a\x1e\x80\x12\x73\xa8\xf2\x07\xae\x80\x40\x6c\x91\x33\x2f\x59\x81\xf9\x48\xd0\xc5\x8b\xe4\x21\x30\x43\x85\x4b\xaa\x31\xbb\xec\x5d\x1e\x77\x13\x76\x7a\x76\xba\x17\x07\xfe\x93\x25\x04\xc1\x12\x1c\x6e\x30\xc8\x57\x01\xe2\x5c\x8a\xbe\x51\x99\x80\x5a\x05\xd5\x2c\xfd\x54\xa0\x3d\x14\xce\x45\xd4\xc7\x2e\xa7\x9a\xbd\xd8\xe4\x10\x0e\xd9\x52\x0d\x89\xe0\x75\x36\xa6\x9c\xb9\x6c\x5a\x2d\x0d\x30\x65\x0f\xb2\x81\x5b\x07\xfc\x38\x2e\x2e\x10\x07\xee\x56\x94\x23\xc1\x03\xf6\xd7\x36\x3b\x0e\xb8\x19\x35\x66\xc7\x92\x0f\xa1\x9e\x57\x9b\xf5\xac\x7c\xf4\x3d\xa7\x5c\xf1\x95\x5c\x61\x61\x61\x3b\x41\x85\x8d\x7d\xa2\x70\x49\xa1\x74\x11\x5b\xc4\xb9\x98\x64\x72\x22\xf2\x91\x68\x25\x3e\x68\x9a\x54\xbc\x8d\xe0\xc0\xb8\xf7\x30\x37\x51\x8c\x1b\x96\x8a\x4c\x0e\xb1\xc2\x9f\x9d\xd4\xc4\x9a\xdb\xe0\x36\x77\x9f\x2a\x18\x1f\x15\x06\x02\xac\xab\x0f\x3f\x32\xc1\x0a\xe7\x57\xda\x95\xae\x76\x65\x1b\xed\xd6\xc2\x1e\xf2\x19\x9f\x54\x5d\xc9\x50\xfd\x8c\x22\xc9\x21\xa6\x4c\x55\xcb\x28\x78\x09\x98\x30\xf2\x64\xfb\xac\x53\x40\xd5\xd0\x80\x2c\xf4\x64\xb3\x24\x11\x9a\x71\x8d\x01\x57\x2b\x6d\xb1\x90\x44\x99\x2d\xa5\xa6\x02\xe5\xca\x6a\xfb\x49\x4b\x78\xda\xb4\x88\x33\x3a\x7b\xb8\x79\x67\x28\xd5\xcd\x06\xea\x45\x2a\x3c\x91\x13\xa5\xd2\x5b\x99\x39\x17\xd7\x35\x33\x85\x9a\xcf\xf9\x44\x24\xa1\x80\xe3\x98\xcb\x0c\x50\x72\x9a\xcd\x78\xe6\x8a\x34\x26\xae\xf7\x5f\x1d\x28\x00\xd0\x74\x3d\xaa\xac\x1f\x3f\x28\x4c\x8b\xba\x0b\xc8\xf1\x92\xef\x68\x30\xc8\xbd\x37\x97\xa7\x98\x77\x49\x2b\x47\x34\x3c\x2e\xda\xc5\xc1\x69\x68\x3a\xda\x5f\xb7\x59\x07\x6a\xa8\xd8\xa5\xbf\xf5\x08\x58\xcd\x3a\x41\xa0\x46\xa7\xfd\xed\xd4\x6a\xc6\xd5\x4b\x18\x87\xa0\xee\x0c\xe5\xbc\xab\xe6\xed\x15\x8a\x4a\x32\xba\xf0\x6c\xad\xaf\x63\x52\xab\xee\x62\xca\x39\xba\xe9\x1c\x50\x17\x0e\x96\x98\xe5\xb2\x58\x50\x2d\x20\x57\xa8\xca\x6d\x74\x5c\x31\x82\x30\x6a\x54\x49\x24\x4a\xfe\xf6\x78\xd8\x50\x49\xa2\x1d\x8a\xef\x58\x9b\xc4\x13\x08\x08\x58\xa9\x26\xe1\xd5\xdb\x51\x01\x16\x01\xfa\xde\xbd\xa2\x4b\x4e\x78\x70\x2c\xd2\xaf\x21\xfb\xde\x33\x41\x6a\x9e\x67\x0f\x9c\xf7\xd9\x53\xc6\x9b\x77\x77\x44\x7b\x4d\x3e\x4a\xea\xd0\x0a\x9c\xd5\xde\x5e\xaa\x2d\x60\x69\x31\x06\x5a\xa4\x62\x2c\x72\x2a\xc8\x04\xd5\xe1\x97\x5d\xb7\x5c\xcf\x80\x9d\x38\xad\xd6\x53\x0d\xef\x66\xa9\x75\x88\xc2\x38\xbc\xa9\x31\x42\xdb\x3b\x41\x0e\xbe\x64\xd9\x8f\x39\x5c\x90\x1e\x80\x8b\x88\x8a\xf4\x38\xa6\x00\xaf\xdc\x46\x27\x2d\x52\xdd\xfc\x1c\x5c\x96\xed\x7d\x59\x27\x9d\xf3\xf3\xee\xe9\x51\xef\x3f\x5f\xb8\xa4\x93\xd0\x3f\xa9\x8a\xc0\xb2\x7f\x83\xc9\x44\x65\xb9\x2e\x1f\xf8\xf8\xea\xdc\x09\xab\xd2\x2a\x99\x09\x3d\xcf\x2c\x9b\x45\x23\x29\xaa\x23\x3c\x96\x22\x4b\x0d\x13\x39\xf4\xbf\x07\x6e\x3d\xd4\x7c\x74\x2d\x0a\x08\x04\xfd\xf8\x13\xc6\x7d\xb4\xa0\x6e\xea\xf0\xe2\xc2\x1d\x1c\xea\x26\x87\xcd\xd2\x83\x01\xda\x66\xcd\x23\x95\x0f\xfe\xe4\x43\xcb\x74\xf9\xdc\xc8\xff\x81\xad\x37\xc1\xe2\x23\x14\xf4\x50\x84\x39\x90\x46\x1e\x09\x58\x8a\xef\xd9\x7b\x60\x16\x79\xc1\x3f\xf8\xa0\x1a\xd8\xc0\xf8\xe1\x36\x7b\x2b\x10\x4d\x1d\xf2\x67\xd0\x61\xed\x4a\xee\xe3\x19\x31\x51\xaa\x04\x6a\x7b\x3e\xe3\xd8\x85\xe8\x62\x64\xa5\x2f\x72\x04\xf5\xd2\x06\x83\xc6\x5c\x4b\x70\xa7\x5a\x36\x0a\xbd\xfe\x4d\x2d\x92\x16\x15\xd9\x16\xdc\x48\x88\xdf\xba\xbe\x7b\x14\xbf\xf3\x5e\x8a\xe0\x03\xe0\x7a\x34\x95\x37\x9e\xe5\x85\xd0\xd4\x8f\x8b\xc5\x62\xf1\x13\xfb\xd1\xa5\x67\xd4\x42\x76\x3f\xe1\xf3\xc7\xae\xa3\x67\xb0\x50\xaa\x87\x25\x61\x11\xb8\xcf\x03\x77\xa3\xfe\xf3\xdf\x50\x6b\x5f\x57\x5e\x06\x85\x0f\xf9\x76\x5d\x2d\x37\x28\x7e\xe0\xcb\x14\x45\x05\xaa\xbd\x26\xe2\x5b\x85\x01\xc2\xb8\x96\x03\xe0\x31\xfe\x45\x00\x4e\xdf\x81\x29\xa4\x6c\xd5\xbd\xe7\xed\x67\xf8\xfc\x43\x34\xe5\x75\xaa\x42\xc8\x11\x58\x5d\xfb\xcf\x97\x24\xa8\x66\x73\x7c\x3c\x85\xd8\xe5\x74\x60\x17\x13\x51\x99\x84\x3b\xdf\x94\x78\x3f\xf2\x5d\xd9\xd9\x44\xdd\x08\x9d\xd7\xe1\x5c\xe8\x81\x08\x3a\xb4\x59\x5e\x58\x7b\x09\xae\xfe\xfe\xe7\x52\xe8\x85\x25\x79\x04\x55\x47\x92\xd7\x0f\xe1\x77\xfd\xb8\x88\x82\x0f\x41\xc5\x81\x09\x93\x30\x3f\xb0\x69\x8f\xfd\xd3\xfb\x5b\x44\xab\x43\xdb\xbb\x8a\xa7\xfc\xb1\x68\x75\x07\x6e\x5b\x81\x57\x67\x8f\x43\xab\x93\x8d\xbc\x16\xaf\xce\x1e\x84\x56\xaf\x1c\xc7\xb5\x78\x75\x76\x37\x5a\xdd\xd7\xea\xbc\x0f\xaf\xce\xee\x46\xab\x13\x9f\xfe\x68\x78\xf5\xe0\xbe\x06\x2e\xff\x29\xf1\xea\x90\x9d\xee\x10\xeb\x2b\xf2\xbf\x1f\x84\x57\xb7\x77\xa6\x6e\x6f\x3e\x04\xaf\x3e\x18\xe4\x0f\x43\xac\xb3\x7b\xf0\xea\x04\x44\xbf\x1f\xb1\xce\xee\xc1\xab\x0f\x06\xf9\xa3\x10\xeb\x6c\x0d\x5e\x9d\xb8\xe2\xa3\x10\xeb\x6c\x35\x5e\xdd\x31\x93\x89\x2c\xa6\xe5\xb0\x3d\x52\xb3\x7d\x31\x1b\x0a\xfd\xde\xe0\x7f\xdb\xef\xcd\xbd\x6c\xab\x39\x82\x0c\x9b\xbf\xb2\x77\x62\x5a\xa6\x9c\x7d\xcf\x8b\x5f\x12\x76\xa9\x66\xec\x88\x93\x07\xa8\x4b\x63\x55\x58\xd9\xf6\x13\x6c\x22\xd7\xe0\xd6\x12\x6c\x7c\x9f\xc6\xed\x24\xd8\x20\x03\xd8\x4e\x82\x0d\xdd\xeb\x10\xb3\x78\x62\x82\x4d\x9d\x61\x01\x18\xf8\xd3\x24\xd8\x90\x15\xbc\x4b\xb0\xf9\x37\x4f\xb0\xa1\x85\x3e\x88\x61\x71\xcd\x0d\x2f\xb8\xe1\x8b\x89\xcc\xf7\xa5\xf1\x3c\xcb\x1e\xcb\x28\x33\x90\x35\x4f\x7a\x97\xad\x35\xdc\xeb\xcb\xbd\xe7\xcf\x0e\xfe\xcc\x3a\x9a\x1b\xd6\x71\x83\xed\x52\x00\x77\x29\x80\x3b\x0e\xb5\xe3\x50\x9b\x72\xa8\x19\xd7\x23\x91\xa9\x54\x65\xbf\xf0\x7d\xf9\x8b\xbc\x54\xdc\x14\x2e\x85\x7a\x29\x3f\x90\xad\xff\xdf\x5d\xa9\x83\xeb\xde\x79\x50\x4a\x21\x63\x2b\x5d\x6b\x8f\xcb\x2a\x64\x8c\xad\x4c\x2c\xc4\x79\x6c\x31\xbd\x10\x07\xdc\x62\x92\x61\x6d\x86\x1b\xa6\x1a\xe2\x68\x4f\x4c\x38\x0c\x53\xd9\x42\xda\x21\x0e\xb6\x9d\xe4\x43\x1c\x6b\xe3\x14\x44\xbf\xbe\x2d\x24\x22\xe2\x58\x1b\xa7\x23\x46\x54\xda\x34\x29\x91\x86\xda\x4e\x6a\xa2\x27\xd5\xe6\x09\x8a\x38\xd4\x93\xd2\x14\xfd\x2c\xb6\x96\xac\x88\x23\x6e\x21\x65\x11\x07\x7a\x58\xe2\xa2\x5f\xc6\x86\xe9\x8b\x74\xb9\x37\x4c\x62\xc4\x51\x36\x4d\x65\x0c\x7c\xf0\x81\x09\x8d\x9e\x08\x9b\xa7\x35\xe2\x50\x5b\x48\x6e\x74\x7c\x65\xa3\x14\x47\x1c\xe4\x49\x89\x8e\x9e\x26\x5b\x4a\x77\xc4\xf1\xb6\x93\xf4\x48\xd7\x76\x5b\xa9\x8f\x38\xdc\xf6\x12\x20\x89\xdb\x6d\x29\x0d\x92\x6e\xf3\xb6\x92\x21\x83\x14\x7e\x68\x4a\xa4\x3f\x09\x1b\x26\x46\x86\x2f\x6f\x9e\x1e\x49\x63\x6d\x9c\x24\x49\xc4\xdd\x56\xaa\x24\xed\xfc\x96\x12\x26\xd7\x2a\x4c\x4f\x4e\x9b\xc4\x11\xb7\x93\x3c\x19\x6d\xc1\xe6\x29\x94\x8e\xdb\x6d\x2b\x91\x32\x88\x80\x2d\xa4\x53\xe2\x60\x5b\x49\xaa\x74\x0a\xc7\xe6\xa9\x95\xa4\xe4\x6d\x37\xc1\x72\xf9\xaa\x6f\x98\x66\x49\x17\x62\x1b\xc9\x96\xfe\xaa\x3e\x2a\xe5\x92\x31\xb6\xad\xac\x4b\x77\x1d\x37\x4e\xf8\xc3\x81\x36\x4e\xfb\xab\x6b\x08\x4f\xca\xc3\xc4\x41\xb6\x92\x8d\x89\x43\x6d\x96\x93\xc9\x18\xdb\x4a\x5a\xe6\xe7\xb9\x57\xdb\x4a\xd4\xc4\xd1\xb6\x92\xae\x49\xeb\xdb\x42\xd2\x26\x8e\xb4\x59\xea\x26\x8e\xb1\x85\x04\x4e\x5a\xd6\x16\xd2\x38\x71\xa4\xcd\x92\x39\xe9\xa6\x6e\x9e\xd2\xe9\xf5\x8b\x8d\x13\x3b\xfd\x48\x1b\xa5\x77\xe2\x28\x9b\x27\x79\x92\xb8\x7e\x54\xaa\x27\x63\x6c\x1b\xd9\x9e\x11\xd7\xda\x28\xe7\x93\x54\xab\x4d\x33\x3f\x9d\x86\x76\x7f\xfe\x27\xb1\x94\x27\x66\x81\x32\xff\xbf\xc7\xe7\x83\xd2\x97\x37\xcf\x0a\x0d\x93\x78\x54\x7e\x28\x7d\x7f\xe3\x2c\xd1\xf0\xf9\x8d\xf2\x45\xc3\x30\x4f\xcd\x1c\x0d\x23\x6c\x94\x43\x1a\xaf\xe7\xce\x6c\x52\x22\xe0\xe6\x39\xa5\xe1\x8b\x5b\xc8\x2e\x0d\x83\x6d\x98\x67\x1a\x06\xda\x30\xe3\x34\x0c\xb4\x61\xee\x69\x18\x68\xe3\x2c\xd4\xe8\xb4\x6d\x92\x8f\x1a\xed\xdc\xc6\x99\xa9\x4b\xf4\x7e\x5a\x8e\x6a\x34\xcc\xc6\xd9\xaa\x4b\x04\x7f\x5a\xde\x6a\x4c\xa5\x4d\x32\x58\xc3\x38\x1b\xe7\xb2\x46\x2b\xdb\x2c\xab\xb5\xc6\xfd\x9e\x9e\xdf\x5a\x39\x91\x77\x65\xba\xe2\x43\x5b\xc9\x77\xc5\xa1\xb6\x90\xf5\x8a\x03\x6d\x21\xf7\x35\x0c\xb4\x41\x06\x2c\x0e\xb2\x95\x3c\xd8\x20\x08\x1e\x9a\x0d\xcb\x18\xdb\x5a\x42\x2c\x9d\x87\x6d\xa4\xc5\xe2\x50\xdb\x48\x8e\x75\x24\x79\x7a\x8a\x2c\x8e\xb0\x9d\x44\xd9\xb0\x41\x9b\xa6\xcb\x06\xde\xfb\xa8\xa4\x59\xc6\xd8\xd6\xf2\x66\x89\xb9\x6d\x25\x7b\x16\xc7\xda\x56\x0e\xad\xe3\x95\xdb\xc9\xa4\x65\x8c\x6d\x9e\x4c\x4b\x97\x63\x93\x94\x5a\x1c\x62\x0b\x89\xb5\x38\xd0\xe6\xe9\xb5\x38\xce\x96\x92\x6c\xbd\xe4\xde\x28\xd5\x16\x47\xd9\x4a\xc2\x2d\xed\xd8\x36\xd2\x6e\x89\xc5\x6f\x31\xf9\x96\x31\xb6\x95\xfc\x5b\xaf\x7b\x6d\x98\x85\x8b\xe3\x6c\x23\x17\x97\xb8\xca\x16\x32\x72\x71\xa4\xed\xe4\xe5\xd2\x51\xdf\x46\x76\xae\x93\xf7\x1b\xe7\xe8\xd2\x35\xde\x3c\x53\x97\x0e\xc1\xa6\xf9\xba\x74\x83\x37\xcc\xda\xc5\x51\x9e\x9e\xbb\xcb\x18\xdb\x4e\xfa\x6e\x90\xd5\x1b\x25\xf1\x3a\xad\x68\xf3\x54\x5e\x6f\x01\x6c\x9c\xd0\x8b\x23\x6d\x23\xad\x97\xe6\xb4\x85\xe4\x5e\xcf\xff\x37\x4a\xf1\xc5\x51\x36\x4c\xf4\xf5\x97\x7d\x0b\xe9\xbe\x7e\x59\x1b\x26\xfd\x3e\xb0\xdb\xdc\x46\xa9\xbf\x38\xd7\x8d\x13\x80\x49\x79\xdf\x20\x0d\xf8\xd7\xdf\xe2\xd0\xf5\xe6\xc9\xc0\xe1\x2a\x47\x29\xc1\x8f\xcf\x09\xc6\x61\x36\xcc\x0c\xc6\x41\xb6\x90\x1f\x8c\x03\x6d\x94\x25\x4c\x07\xfd\xb1\xb9\xc2\x95\x7e\x6e\xbf\x2e\x16\x8b\xc5\x6f\xec\xd7\x35\xe9\xc2\xbf\xf9\x57\xb6\x93\x31\xcc\x18\xdb\x42\xd2\x70\xe4\x92\x78\x50\xde\x30\x23\xa9\xf4\xc8\xf4\x61\xc6\x1e\x64\x1e\xdc\x9f\x41\x1c\x3b\x5b\x37\x4c\x22\xde\x5c\xf3\x8f\xf3\x88\x59\xe8\xec\xb6\x59\x2a\x31\x68\x6a\x0f\xca\x26\x1e\x0c\xf2\xef\xc5\x62\x94\x29\x7e\x8d\xe9\x2d\xe1\x2c\x42\xde\xca\x85\x48\xd9\x1b\x5e\x60\x7f\xb0\x27\xe4\x7c\xaf\xc1\xad\x4f\x55\x56\xec\x9f\xf3\x39\x3f\xe7\xda\x88\xc7\x67\xd5\x7c\xc5\x4e\x78\x51\x4c\xc5\x2d\x7b\xa3\xb2\x62\x97\xf0\xb7\x9d\x84\xbf\x50\x48\x73\x4b\x09\x7f\xcc\xa8\x04\xab\x7c\xef\xd2\x69\xb6\x91\x4e\xe3\x2c\x74\xea\x70\xbc\x61\x3a\x4d\x94\x9f\x0c\x5d\x8f\x9f\x9c\x4e\xb3\x22\x3f\xd9\x2e\xfa\xc9\xe9\x34\x95\xfc\x64\x6c\xc8\xbc\x51\x3a\xcd\x1d\xf9\xc9\x73\x2d\xcd\xec\xbd\x01\xae\xf4\xd0\x84\xe4\xe7\xec\x58\x70\x2b\x5e\x21\xde\xbc\x4b\xe4\xdb\x25\xf2\xed\x7a\xf9\xed\x12\xf9\x56\xf5\xf2\x5b\xab\x00\xa5\x2a\x55\xfb\xb9\x4a\xc5\x9e\xc9\xca\xc9\xba\xd4\x61\xf6\xbf\xff\xeb\xff\x61\xff\xfb\xbf\xfe\x8b\xfe\xd3\xb4\x6f\xb5\xb6\xaf\xe9\x6c\x99\xdb\x3c\xb2\x12\xcb\xbd\x5a\xce\x96\x38\xcd\x3d\x55\x58\x36\xd0\x70\x1e\xca\x65\xf6\xf7\xd9\x76\xf5\x9b\x27\xf0\x18\x3b\x87\xad\xf2\x98\xa7\x56\x5f\x59\xab\xdb\x6c\x83\xbf\xdc\x57\x79\xe5\xe9\x7a\xcd\x06\xbc\x65\x5d\xd5\x95\xad\xeb\x34\x11\x9f\xe9\x2b\x5d\x58\xdb\xf8\xbb\xbe\xff\xe7\x60\x90\xff\xdd\x35\x89\x2f\x2e\xca\x21\xff\x4f\x8e\x79\x67\x66\xfa\x77\x5d\x0e\xf9\x07\x4e\x35\xa5\xc2\x53\xea\x56\xe4\x33\xf0\xbc\xdd\x8a\xfc\xf9\x17\x5f\x7c\xf5\x55\x68\x6c\x6c\x1f\x74\x81\xd6\x93\xde\xe5\x5d\x93\x29\x6e\x87\x66\x7f\xa8\x54\x61\x0a\xcd\xe7\x8f\x37\xfa\x0e\xf6\x9e\x3f\x3b\xf8\x9a\x5d\xde\xca\xa2\x10\xda\x9b\xa4\x6b\x9f\x9b\x0a\xf6\xd2\x7d\x8d\x75\x30\xa7\x66\xa7\xb0\xed\x14\xb6\x9d\xc2\xb6\x53\xd8\x1e\xd5\x7c\x79\xa2\x32\x9e\x4f\xc0\xd3\xf5\x61\x7f\xa4\x17\x73\x70\xbd\xac\x60\x3d\xcf\x90\xeb\xbc\x56\x8e\xdd\xb4\x59\x27\xcb\x9c\x2a\xa3\x85\x11\xfa\xc6\xc3\xaf\xab\xc0\x6b\x8c\x2c\x23\x04\x83\x52\xb3\xec\x6f\x86\x32\xa7\x4e\xfa\x33\x73\x5f\xa3\x1c\xcc\xb9\xc7\xeb\x07\xde\xeb\x0a\x3a\x7a\xdd\x75\x62\xe8\x14\x9d\x89\x22\xc0\xa2\xff\xcf\x1a\x2a\x1c\x4e\x7f\x9c\x30\x16\x41\x86\x03\x78\x27\x5c\x44\xdf\x72\x22\xc1\x7b\x98\x49\x53\xa0\x3b\x3b\x7c\x35\x4f\x6b\x53\x4a\x3d\x26\xa4\xbd\x6e\x16\x32\x8f\x09\xe2\x66\xe1\x70\xea\x7e\x22\x2b\x3a\x9b\x3e\x6d\x22\x81\x0f\x57\x59\x38\xf1\x43\x4a\x86\xe5\x85\xd0\x92\x67\x51\x5e\xb0\xf3\x92\xd7\x9a\xc6\xf8\x75\x9d\x92\x1b\xd8\x8e\xec\x5c\xfd\xaf\x95\x9a\x64\x02\x84\x1a\xcb\x55\xf8\x9b\x09\x60\xe1\xb8\xc8\x19\xb8\xdb\x87\x10\xd5\x06\xfe\x29\xf2\x54\x69\x8c\x70\xcf\xb5\x9a\xa9\x42\x38\x9c\x90\xa9\x24\x06\x2f\xb9\x35\x9d\xe4\xf0\x1e\xe6\xb9\x96\x51\xe6\x62\x60\xa1\x9e\xe3\xf5\xfa\xab\x59\xde\xcb\x77\x70\xbd\x96\xb9\x03\x85\xd7\xb0\xaa\xc7\xd9\x05\x06\xd8\x82\x37\xdd\xfe\xd9\xb2\x8c\x65\xa5\x32\xe2\x71\x11\x43\x4c\x1c\x47\x04\x66\xe2\x78\x62\x02\x1f\x5f\x7e\x71\x05\x73\x84\x2f\x46\xdc\xd1\x72\xb7\x95\xfc\xf1\xa2\xcb\x8e\x7a\x7d\x60\x65\xdd\xa3\x75\xba\xa6\x5f\xaf\xe5\x45\x6f\x4f\xbb\x17\xe4\xff\xf7\xcb\x5d\xc1\x1d\x8f\x7a\x17\x5d\xcb\xde\x7a\xa7\xe1\x5f\x87\xbd\xa3\xee\xe9\x65\xe7\xd8\xf2\xb4\xfe\x79\xf7\xb0\xd7\x39\xb6\xb2\xa1\x7b\x72\x7e\xdc\xb9\x78\x97\xd0\xa8\xfd\xee\x3f\xae\xba\xa7\x97\xbd\xce\xb1\xe7\xad\xcd\x7b\x29\x73\x7e\x71\x76\x78\x75\x01\x0c\xde\x92\xa3\x7f\xf5\xb2\x7f\xd9\xbb\xbc\xba\xec\xb2\xd7\x67\x67\x47\x40\xf1\x7e\xf7\xe2\x87\xde\x61\xb7\xff\x0d\x3b\x3e\xeb\x03\xd1\xae\xfa\x5d\x3b\x95\xa3\xce\x65\x07\x3e\x7e\x7e\x71\xf6\xaa\x77\xd9\xff\xc6\xfe\xfb\xe5\x55\xbf\x07\xd4\xeb\x9d\x5e\x76\x2f\x2e\xae\xce\x2d\xc7\x6d\xb1\x37\x67\x6f\xbb\x3f\x74\x2f\xd8\x61\xe7\xaa\xdf\x3d\x02\x32\x9f\x59\xd6\xfe\x0e\x59\xeb\xd9\x05\x48\xbe\xd5\x02\x20\xf0\xfc\xfe\xe5\x45\xef\xf0\x32\x7e\xcc\x32\xee\xb3\x0b\xbb\xaa\xb0\x56\x76\xda\x7d\x7d\xdc\x7b\xdd\x3d\x3d\xec\x56\x04\x44\xcb\x0b\x08\x90\x2a\xef\xd8\xdb\xce\x3b\xa7\x7a\x13\xf7\xc7\x7a\x89\x95\x83\x9c\xc0\xb6\xb2\xde\x2b\xd6\x39\xfa\xa1\x67\x27\x4f\x8f\x9f\x9f\xf5\xfb\x3d\x3a\x36\x40\xba\xc3\x37\x44\xf8\x58\x3e\xcc\xaf\x27\x6d\x99\xef\x73\x93\x1f\xec\x0d\x85\x6e\xdf\x1c\x3c\x51\xbd\xfd\x8a\x9d\xc8\xd1\x94\x8b\x8c\x9d\xc8\xa2\x50\x39\x6b\xce\x66\xf0\x8f\xa0\x71\x83\x07\xc0\x69\x25\xa3\xa5\xc8\x08\xd6\x1b\x9b\xa8\x3d\x37\x99\x9d\xea\xbb\x53\x7d\xff\xad\xa2\x24\x3b\xd5\x77\x7b\x45\xc7\x3c\x6b\xcb\x52\x3e\x6f\xdf\x3c\x5f\xfe\xd5\x17\x9f\x9e\xd3\xd9\x89\xec\xb8\xdc\x8e\xcb\xed\xb8\xdc\x8e\xcb\x6d\xc6\xe5\x78\x26\x3e\x8c\x84\xe1\x5a\xed\xff\x5c\xaa\x42\xa4\x80\x04\xe3\xc3\x4c\x3c\x89\xd1\x7d\xc9\x3a\x99\xf8\xc0\xf3\x54\x0b\x76\x08\xc3\xee\xa0\x2a\x3b\xa8\xca\xbf\x05\x7b\xda\x41\x55\xb6\x15\xd6\x09\xcc\x29\x4f\x17\x13\x5d\xe6\xb7\x3c\x4b\xf7\x27\x6a\xef\xbd\xd4\xfc\x49\x96\xe6\x57\xac\x93\xa7\x0b\xf6\x9a\xc6\xda\xa9\x4c\x3b\x95\xe9\xdf\x82\x27\xed\x54\xa6\x8f\x5a\x8d\x3a\x9d\x68\xf9\x9e\x67\x37\x7c\xff\xfd\x6d\xb1\x37\x59\x13\x23\x39\x78\xce\x8e\xf8\x8d\x60\xaf\xe9\xe1\x8f\xa2\x11\xed\x20\x2d\xff\x3d\x90\x96\xad\xf3\x9c\xcf\x21\x0a\xbb\x83\xb4\x7c\x76\x90\x96\x98\xcd\x8c\x79\x21\xa7\xfb\xa6\xd0\xe5\xa8\x78\x4a\x43\x0e\xf6\xca\x0e\xc0\x3a\xda\x64\x7c\xd7\x89\x63\xa7\xfb\xec\x74\x9f\x9d\xee\xf3\x34\xdd\x27\xe6\x4a\x88\x11\xd9\x9f\x6b\x55\xa8\x61\x39\xc6\x07\x5f\x2b\x97\x87\x0c\x89\x5c\xe7\xf6\x8f\x23\x95\xb1\x97\xe5\x78\x2c\xb4\x61\x7b\x14\xf5\x1f\xfc\xc9\xb0\x94\x17\x1c\x8b\x4d\x63\xe5\x36\x4a\x7f\xac\x73\xb1\xe7\xcf\x0e\x9e\x2d\x81\x4c\xd6\xa1\x4c\x56\x28\x69\x2b\xe7\xf9\x19\x43\x51\x3e\x13\x2c\xca\xbf\x2c\x18\x65\x87\x46\xd9\xa1\x51\x76\x68\x94\x7f\x25\x34\xca\x4a\xa6\x6f\x6f\xf3\xfe\x44\xed\x41\xd3\x60\xcb\x04\xf2\x75\x59\x27\x5f\xd0\xdd\xdf\x41\x17\x77\xd0\xc5\x1d\x74\x71\x27\x2c\x76\xc2\xe2\x5f\x56\x58\xac\xb2\x63\x66\xc3\x67\xfb\xa9\x1c\x8f\xd7\x3a\x6f\x4f\xb8\x2e\x64\xce\xfa\xa3\x69\xce\x87\x22\xfb\x9d\x88\x09\x16\x84\xc4\x41\xbd\xe6\xf9\x63\x45\x44\x85\x2f\xbb\x6a\x1b\x8f\x96\x12\xcf\x97\xa7\xf1\x40\x19\xb1\x3c\x13\x9c\xc4\x53\xc4\x04\x5b\x25\x24\x70\xb8\x87\x4a\x0a\x56\x97\x13\x3b\x4e\xbb\xe3\xb4\x3b\x4e\xfb\x00\xb5\x3c\x2f\xff\x32\xe5\xc5\x68\xba\x3f\x51\x65\x29\xd3\x25\x96\x7b\x88\x68\x49\x36\x5c\xb0\xef\xf5\x2f\x0b\xf3\x4b\xa1\xc6\xec\x7b\x75\xcb\x33\x79\xcd\x46\x53\x2d\xcd\xdf\x71\x88\x36\x94\x34\xdd\x01\x8b\x76\x4d\xef\x77\x8e\xec\x9d\x23\x7b\xa3\x20\xfe\xfc\x7a\xb2\x2f\xb4\xf6\x48\xea\x65\xf0\x50\x82\xf1\xfb\xc3\xa9\xc8\xc5\x82\xa5\xfc\x46\xfc\x7d\x04\xff\x6e\xe7\xc2\x2a\x6c\xbf\x37\x7d\x70\x53\x8f\xc1\xb2\x3a\xf8\x04\x6d\x70\xe5\x3c\x36\xd3\x07\xb7\xab\x0e\x7e\x62\x6d\x30\x66\x3b\xf6\x8c\x3d\x55\x1b\x64\x35\x5d\x30\x30\xa6\xc7\x69\x83\x6b\xf8\xce\x85\x1d\xf0\x11\xda\x20\xad\x77\xbd\x32\xe8\xe0\x93\xf7\xa9\x83\xec\x21\xca\x20\x28\x6a\x6b\xd5\x41\xf6\x38\x65\xd0\x32\x94\x95\xea\x20\x7b\x82\x32\x68\x19\x4d\x5d\x1d\x64\x1b\x28\x83\x96\x7b\xa2\x3a\xc8\x7e\x2f\xca\xa0\xe6\x32\x5f\x8c\xf8\x5c\xec\x97\xb9\x4c\x85\xe5\x3c\x2b\x62\x7f\x5f\xb2\x0b\xfb\x1c\x3b\xe4\x73\xc1\xfa\xed\xe3\x36\x9b\x8a\x2c\x53\x7f\xf7\x6f\x53\x4d\x0e\x7b\x47\x76\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x57\x68\x08\xbb\xfe\xff\x9f\xfb\x5e\xed\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\x2f\x33\x61\xb6\xeb\xff\xcf\x1c\xb7\xdd\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\x87\xff\xed\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\x57\x26\xfa\x6f\xd4\xff\x7f\x55\x0a\x78\x61\x05\xf3\x44\xed\x17\xae\x84\x27\xdb\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xff\x3d\xee\xd5\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\x7e\x0f\x94\x3c\x42\x92\xa7\x22\x97\x46\xe4\xd7\xd0\x82\x72\x6f\x66\xcc\xcf\x59\x3a\x5c\xdb\x59\xac\xde\xd5\xf8\x77\xd1\x48\x62\xd7\x7f\x72\xd7\x7f\x72\xd7\x7f\x72\xd7\x15\x6d\xd7\x15\x6d\x5b\x8d\x30\x5e\x96\x3a\x2f\xfa\xa5\x99\xca\xd0\x0f\xeb\xa4\x77\xe9\xe5\x58\xf3\xa4\x77\xd9\x5a\xdb\xbc\xf8\xf2\xec\xe4\xd8\xa1\x5e\xb7\xdf\x13\xcd\x75\x07\xdb\x66\x4f\xb4\xc0\x29\xb7\xd2\x13\xcd\x72\x29\xc5\xb6\xd3\x13\x2d\x6a\x1e\xb6\x51\x4f\xb4\xc1\x20\xaf\x75\x45\x63\x9f\xaa\x27\xda\x60\x90\x73\xdf\xec\x6d\xd7\x13\xed\xdf\xb6\x27\x5a\x6d\x3b\xed\x0e\x37\x7e\x4a\x7e\xfc\xfa\xa7\xe4\xc7\x67\x49\xa3\xf1\xd3\x4f\x49\x63\xca\x4d\xf7\x86\x67\x8d\x17\x63\x9e\x19\xf1\xdb\x9f\x92\x99\x28\xf8\x8b\x5f\x67\x2a\x2d\x33\x71\xca\x67\xe2\x45\x03\x2e\xbb\xfc\x45\xec\xcf\x55\x6a\xf6\x31\x00\x62\x7f\xc4\x03\xb8\x5f\x88\x19\x18\xda\xed\xe9\xd0\x34\x7e\xfb\xad\xf5\x07\xd1\x4e\xc5\x98\x97\x59\xf1\x6d\xf1\x5b\x2b\xc1\x4c\xc0\xe6\xda\x51\x48\x0b\xd9\xf7\xb9\x6f\xba\x91\xfc\xd8\x10\x1f\xec\x31\x35\x8d\x9f\x12\xe7\xf3\x6b\x8a\xd6\xaf\x08\x66\x6a\xe3\x90\xe7\x5a\xcd\x85\x2e\x16\x4d\x91\x34\xfe\xf9\x4f\x61\x4e\x60\xca\x8d\xe4\xd7\x1b\x9e\x95\xe2\xc5\x7f\x3c\xfb\xad\x95\x84\xa9\xdc\x28\x99\xb2\x67\x7f\xb8\xe1\x9a\x15\xdf\x76\x67\x43\xa1\xdb\x87\xfe\x8b\x6d\xf1\xa1\x10\x79\xda\xfc\x95\xcf\xe7\x27\x76\xfd\xf8\x80\xcc\xe1\x73\x14\x51\x6a\xb6\x9e\xbc\x36\xad\xca\x42\xc4\xcb\x4a\x1a\xc2\x7e\x61\xcf\x58\x6b\x46\xec\x59\x56\xbe\x3f\x93\x1f\x64\x6e\xf6\xed\xbf\xad\x49\x0c\xb9\x39\x7b\xf0\xe6\x1e\xfc\xa9\x42\x8b\xa4\xd8\x16\x35\x72\xa2\xc6\x85\xfd\x92\x23\x44\xe1\x9e\x4c\xee\x21\x49\x62\x04\x70\xa3\x75\x7f\x9e\x64\x6a\xc8\xb3\x75\x7f\x1d\x8a\xb1\xd2\xe2\x44\xa5\x22\x6b\xb6\x7e\xb5\x0c\xae\x3d\x11\x45\xb3\x41\x83\xb6\xa5\xe9\xa4\x33\x99\x37\x5a\xff\xeb\x7f\xc1\x1f\x01\x50\x0a\x3c\xf3\x52\x35\x1b\x96\x52\xed\x4c\x4d\xec\x03\xbf\x25\x33\x1a\xe5\xb7\x84\x8f\x0a\x79\xc3\x0b\x51\x19\x72\xa8\xd5\xad\x11\xba\xd1\x6a\x1b\x51\x5c\xca\x22\x13\xcd\xc6\x39\x05\x06\x0f\x01\xfa\x95\xa9\x49\xa3\x55\x3d\xbf\xf9\x23\xf6\xd8\x5d\x83\xff\xae\xd3\xfb\xe6\xf2\xe4\xf8\x25\xd7\xa6\xed\x3e\xdc\xfc\x55\xa6\x2f\x1a\xe6\xe7\xdb\x9f\xaf\xbf\xff\x85\x37\x92\x61\xa6\x46\xd7\x2f\xfe\xf4\x6b\xc3\x2c\x66\x43\x95\x99\xc6\x8b\x1f\x7f\x4a\x1a\x1e\xed\x60\x7f\xfe\xf1\x20\xf9\xf1\xf9\x5f\x93\x46\xc6\x17\xaa\x2c\xf6\x33\x35\x51\x7b\x53\xc1\xad\xfc\x6d\x24\x79\x99\x65\xc9\x8f\x3f\x36\x0a\x4b\xac\x46\xd2\x48\x85\x19\x35\x92\x86\x1c\x29\x60\x22\x8d\x23\x22\x48\x44\x3e\x1c\x6d\xa4\xf2\x11\x2f\x2c\x1d\x5c\xd8\x4b\x97\x39\xe8\x17\xf6\x81\x2f\x93\x1f\x1b\x74\xa6\xec\x35\x40\x11\x08\xac\x88\x75\xf1\x87\x15\x8f\x51\xda\x0e\x3e\xd6\x1c\x96\x32\x4b\x57\x3c\xe5\xb2\xb2\xe0\xb1\x56\xe3\x27\x58\xc2\x4f\xf4\x18\x00\x48\x78\x0e\x97\xaf\x67\xd7\x90\x34\x3a\x79\xae\xca\x7c\x24\x1a\x3f\xd9\xff\x25\xc0\x01\x91\x35\xa2\x28\xb4\xcb\xb4\x14\x7a\x9e\x34\xc2\x7e\x23\x4e\x70\xcf\x2e\xd7\xbd\xb2\x19\x1b\xad\x1f\xa0\x27\xf2\xd1\xdf\x33\x8f\x89\xf8\xc0\x8b\xf8\xc6\xfc\xb3\x2d\x4d\xf7\xe7\x92\x67\x4d\xd1\x2e\xac\xea\x5a\x58\x52\x46\xbb\xd1\x96\x79\x2a\x3e\x34\x5a\x7f\xfc\xe3\x0a\xfe\x10\x9e\x42\x50\x58\xf6\x94\xeb\x6d\x04\xd7\xa3\xe9\xe7\x21\x9d\xee\x66\xa6\x1c\xd3\xec\x5f\xfc\xaa\x05\x50\xa5\xd9\xfa\x55\x8e\x9b\xab\x98\xea\x6b\x18\x87\x58\x6b\x4b\x8b\xa2\xd4\x88\xcf\xc1\x07\xf1\x33\x8d\x56\xdb\x0f\xf4\xdb\xd2\x71\xfc\xc3\x03\xe9\xf6\x7b\x3e\x95\x9f\x56\xf2\x55\x36\xe9\x11\xf2\x6f\xfd\x76\xe2\x96\xf4\x0b\x5e\x94\xa6\xd9\x7a\x84\x9c\xec\xc3\x8b\xac\x9b\x4f\x64\x2e\x36\xb8\x44\x9f\x89\x88\x9c\x7d\xbf\x7f\x34\x99\xfc\x67\xe7\xe3\x8b\x48\x24\x5c\x23\x69\x5c\x08\x94\x59\xe0\x9a\x46\x6a\x22\xe7\x5a\x2f\x9c\xe8\xdd\x7b\x44\xd3\x5f\x63\xd1\x84\x23\xef\xd1\xc8\x6e\x72\xf1\xb6\x83\x90\xc4\xbf\xff\x94\xfc\x88\xdf\x86\x83\x63\x45\x26\x8c\x86\x5c\xa4\x61\xff\xf8\x45\xf2\x2c\xf9\xd1\x0a\xb7\xf0\x0a\x08\xd4\xe5\x09\x6d\x6a\x49\xd4\xce\xc7\x13\x25\xa0\x99\x15\xf3\xdf\x15\xa3\x36\xfc\x46\xf4\x4f\x2e\xcf\x37\xe7\xd4\x6e\xa4\x43\x28\xbb\x80\x43\xc1\xbe\xb6\x2d\x51\x5a\x6d\xcb\x58\x9b\xe2\xdb\xbf\x89\x15\xac\xfc\x61\x74\xdd\x31\xf2\x4f\xc4\xc8\x69\x69\xfd\x1f\xce\xdb\x53\x6e\xa6\xcd\x5f\xed\x76\xbc\x58\x71\x06\x26\xa2\x88\x8e\x40\xeb\xb7\x47\x71\xf8\x93\xcb\x73\xd6\x17\x45\x21\xf3\x89\x79\x12\x87\xb7\x67\xe4\x33\xe1\xef\xdf\xcd\x7e\xfe\xbf\xde\xab\xfd\xb7\x1f\x9f\xbf\x9f\x70\x99\xb1\xbe\xd0\x37\x96\xdb\x34\xfa\x10\x21\x59\x40\xe2\x38\xc0\x50\x05\x20\xfb\xb8\xcc\x6a\x90\x52\x23\x10\xc6\x5b\x1a\x80\xbd\xdd\x48\xc2\xa1\xe5\x2a\x8a\x84\x0b\x3b\x8c\xb9\x53\x40\xe4\xe9\xe3\xc4\xc3\xac\x98\xef\x19\xb7\xc9\x7e\x71\xc8\xff\x93\x86\xe3\x21\x8f\x91\x0c\xd1\x3b\x1f\x4b\x34\xc4\x07\xeb\x89\x82\xe1\x33\x39\x97\xf3\xe3\xa3\x2f\xfe\xda\x7d\xf7\x8f\x87\x9d\xcb\xaf\xfc\x99\x9c\x71\x53\x08\xbd\x97\xf3\x1b\x42\x43\x35\x92\x1f\xed\x1e\x35\xfe\x6e\xa0\x5c\x81\x48\x7b\x85\x98\xc1\x81\xf4\xbb\x6b\x37\xc2\xef\x40\xb2\x3c\x58\xa1\x54\x36\xe4\x9a\x46\xfa\x09\x76\xf3\xd7\xda\x0c\xdc\x69\x2a\xec\x08\x7f\x49\x1a\xa9\xbc\x69\x24\x85\x2e\xed\xe6\x1e\x3c\x4b\x1a\x00\x1f\x69\x24\x8d\x5f\x54\x2e\xf6\x0e\xec\x43\x7f\x0d\xce\xc5\x87\xbf\xf9\xdc\xbd\xe9\xdf\xba\xff\xc5\x8c\x0f\x45\xc6\x46\x2a\x53\x7a\x6f\xa2\xf9\x62\xef\x2f\xcf\x9e\xad\x1a\x66\x30\x28\xbc\x9b\xc2\xdd\x89\xb5\x0e\x88\xe8\xe0\x06\x57\xc4\xca\x97\x22\x77\x44\xfc\x92\x73\x4c\xac\x7c\x27\x76\x4e\x44\x2f\xb5\x2a\x4b\x5e\x22\xde\xa3\xa9\xf9\xc5\xf2\x3e\xc0\x15\x9c\x73\xcd\x67\xa2\x10\x1a\x0e\xdb\x6f\x75\x66\x11\x0e\xc8\x44\xcb\x74\xdf\x25\xb7\x3d\xe2\x80\xd4\x46\x30\x32\x15\x0f\x3e\x60\xf7\xaf\x8d\x86\xdb\x23\xbc\xfc\x9a\xbd\xbe\x6f\x10\xcc\x79\x5f\xf3\xf2\xfd\xef\xa3\x18\x08\x6f\x73\x2b\xd3\xa5\x29\xb0\xe0\xcf\xd2\x76\x3d\x74\xd8\x4c\x9a\xda\x82\xec\x4f\x5f\xda\x3f\xe4\xd7\x7b\x85\x0a\xac\x1a\xe4\xb9\x38\xa4\xf7\xfc\xb4\xf8\xc4\xf2\x50\x7b\xc6\x40\x49\x43\x46\x80\x9c\xc1\x4a\x2b\xcb\x1c\xe8\xeb\x2b\x7c\x22\xeb\xf6\xa5\xa8\xfd\x3f\x5a\x84\x0c\x4b\x38\xf0\x53\xa8\xb9\xfd\x52\x2b\x20\xd9\x9d\xa2\x2b\x62\x53\x28\x38\x56\x30\x8f\xd5\x13\x58\x47\xc5\xdc\x92\x20\x50\xf1\xb5\x5b\xde\x7d\x37\xc1\x39\x09\x3f\x36\xbd\x81\x65\x99\x4f\x42\xee\xc3\xa9\x18\x5d\x0f\xd5\x87\x8f\x48\xee\x63\x5a\xdd\xe7\x42\xed\xb1\xca\x52\xfb\xcd\x4f\x41\xee\xd7\x5a\xa6\x1f\x91\xd4\xfd\x39\x1f\x89\xcf\x88\xd4\x56\x8b\xfd\x34\x84\x3e\x87\x80\xfc\x47\x24\xf5\x95\x55\xd0\x4f\x7c\x25\xcb\xcf\x87\xe6\x13\xad\xca\xf9\xa7\x22\xba\x9a\x67\xe2\x63\x13\xfd\x35\x2d\xf0\x73\x21\xb8\xcc\x0b\x31\xa1\xc2\x7e\x9f\x84\xec\xbd\xea\x04\x3e\x16\xf1\xab\x9f\x79\x04\xf5\xe5\xb8\xe1\xcc\x46\x72\x7d\x58\x62\x56\x9c\x1f\x6e\xd6\x4b\xc4\xfb\xd8\x9b\x67\x6d\xc8\x07\x6f\xda\xd6\x55\x9d\xfc\x71\xc2\xe0\xd1\x5b\x16\x3b\x21\x3e\x9b\xfb\xc2\xcb\x62\xfa\xa9\x48\x7e\xac\x46\xd7\xe2\x23\x13\xbd\x13\x5c\x9c\x4b\xaa\xff\x3d\x74\xc7\x3c\x45\xb8\x2d\x7f\x4d\x1a\xe2\x67\x7f\x6f\x82\xad\x68\x0a\xa5\xf9\x44\x9c\x23\x5e\x58\xa3\x0b\xa6\xbe\xda\x7e\xa1\x74\x78\x24\x69\xf4\xff\x71\xec\x4e\x41\x58\xf9\xa7\xb9\x6f\x2e\x74\xf1\xe0\xed\xdf\xfa\xa5\x73\xb1\x93\xc7\x9c\x80\xc7\x6b\x62\xf4\x99\x87\x6d\xfe\x43\xd8\xe7\xba\x03\x11\x79\x29\x96\x17\x4d\x30\x96\x46\xd2\xe8\xe6\x85\xd0\x73\x2d\x8d\xe8\xfa\x17\x3e\xed\x51\xe0\x65\x2a\x8b\x4f\x78\x12\x5e\x96\x45\xa1\xf2\xce\xa8\x4e\x8c\x8f\x72\x1e\x3a\x76\xb1\xec\x18\x90\x21\x1b\x1d\x89\x4d\x8e\x4a\xa6\x1c\x4f\xfa\x29\xb1\x1b\x34\x9e\x2a\x70\x2f\x7c\xca\x53\x30\xe4\xa3\xeb\xf2\x93\x89\xe0\x23\x5e\xf0\x21\x37\x8f\xd3\x59\x1f\xbd\xf9\x2f\x61\x8d\xec\x8f\xec\x42\x58\xf6\x2d\x76\x6c\xe1\xae\x03\x21\xb3\x4c\xe6\x93\x4f\x75\x22\xde\xf0\x3c\x35\x53\x7e\xfd\xb1\x8f\x84\x5b\xe5\x16\x4e\xc2\x47\xdd\x0e\x82\xa0\x7d\x12\xc3\x26\x06\xe1\x7d\x24\xa3\x26\x00\x14\x1f\xac\xa7\xd5\x96\xbd\xc6\xb7\xbb\xea\xd7\x2b\xbc\xf6\x77\xba\xdf\x57\x39\xcf\x9d\x97\xfb\x31\xce\x73\x02\x2a\xaa\xb2\xc8\x44\xd1\x58\x8e\x09\xde\x3d\x8f\xfb\xff\xb8\x41\x0c\x6f\xc3\xf0\x1d\x38\x98\x3e\x0f\x60\x87\x9d\x4a\x1f\x63\xff\xab\x01\x01\x8d\x12\x42\xeb\x04\x1a\xe8\xdf\x8c\xd6\x3c\xe6\xa2\xf6\x89\x59\xe4\xa3\x5e\x7e\xae\xd5\x44\x0b\x63\x5e\xfc\xc7\x41\x62\x47\x80\xda\x2a\x2f\x9e\x7f\x95\x64\x8a\xa7\x57\x76\xfd\x76\x79\x21\x86\x1f\xcd\x03\x23\xff\x87\x6a\x36\xcf\x44\x21\x9a\x22\xa9\x3e\x05\x23\x35\x5a\x01\x02\x82\xa3\x18\xfb\x77\x8a\xfc\x0a\x8f\x15\x00\x54\x8a\xca\x3b\x29\x7c\xd3\x7e\x72\x09\x72\x52\xfd\x32\x4f\xd3\xa6\xa8\x8f\x3d\x09\x63\xb7\xda\xf3\xd2\x4c\x71\x5b\x9a\xf8\x1d\x3f\xbc\x79\xd8\xf8\x2f\xcb\xec\xda\x7f\xa3\xd9\x72\x1f\x09\x84\x69\x34\x68\xdc\x23\x81\x14\x58\x4f\x28\x2d\x66\xea\x46\x3c\x6c\xb4\x3e\xbf\xb9\x73\x2c\xc3\x1f\x3a\xd2\x39\x37\xe6\x56\xe9\x14\x21\x2f\xeb\xc6\x2b\xe7\x29\x2f\x44\x78\xb6\x2d\xd3\xa4\x80\xf7\x5f\xc9\xac\xc0\xdd\xa8\x7d\x41\xe0\x44\x17\xf9\xe8\x7b\xb1\x18\x65\x8a\x5f\x3b\xa0\x07\x6c\x6f\xf5\x68\x35\x92\xff\x78\xd6\x4a\xea\xb8\x91\xfe\xcd\xc8\xae\xa5\x32\x44\x7d\x49\xab\x07\x3b\xa0\xc1\x56\x91\x6e\x91\x8f\x8e\x8f\x3a\xe7\x1b\xcc\x06\x5f\xdf\x6c\x26\x4f\xe5\x34\xbf\x67\xa8\xd3\x83\x19\xd4\x3d\x98\xa8\x15\xb0\xa6\x5a\x52\xc6\xe3\x91\x4c\xb9\xb8\x8d\xd1\x4c\xe7\x5a\xcd\xa4\x11\x35\xbe\xb1\x9e\xb3\x35\x1a\xc9\xc1\xb3\x67\x74\x26\x8a\x6f\xff\xf6\xab\x68\x16\x76\x9b\x1f\x83\x73\x82\xe3\xf1\x14\x7c\x13\x9e\x8c\xcf\x04\x48\x72\xbb\x9f\x16\x57\xaa\xf3\xfe\xe3\x03\x9c\xea\x01\x90\xa4\x81\x3f\xb0\x21\x37\x72\x14\x57\x3e\x49\xd8\x9c\x58\x17\xa6\xcc\x47\x45\x16\x1e\x14\xc1\x79\x30\x8a\xc9\xee\xc4\x1e\x44\xde\xc3\xf4\x31\x04\x95\x34\xbc\x6c\x89\xff\x6d\x1e\x03\x68\x0a\x23\x84\xec\x91\xfb\x1e\x35\xeb\xd1\x4f\x77\x2e\x02\xe2\xfe\x4b\x6b\xa8\xb3\xb7\x48\x8a\xdb\x6f\xc6\xdc\xde\xff\xc2\x72\x4b\xf8\x01\x45\x05\xfc\x13\xa5\x21\x3e\xc2\x6f\xf0\x1f\x4e\xba\xac\xa4\x08\xb8\xee\xab\x1f\xf7\xbf\x0f\x73\xb8\x9b\x78\x95\xd9\x3d\x80\x82\x7e\xf2\x0f\x78\x96\xd6\xf6\x80\x27\x69\xe9\x0f\xf9\xbe\xa5\xcc\x03\x9e\x8b\x08\xf7\x91\x70\x6e\x55\x06\xf3\x28\x4d\xd9\x25\x63\x7f\x1e\x2a\xf2\x63\x27\x0d\xd0\xf2\x35\x53\x4f\xc2\x4b\x24\x6f\x11\x22\x09\xc7\xe0\x63\x8a\xd7\xe5\x75\x45\x32\xd6\x4d\xfd\x6e\x39\xeb\x9e\x6a\xb4\x12\xb7\xab\x77\xbf\xe0\x85\x4b\x2b\x21\xa0\xd2\xdd\xcf\x3b\x34\x53\x2b\xc9\x64\x7e\x7d\xf7\xb3\xf6\x09\xfb\xa0\x1a\xf1\x0c\xe2\x06\xeb\x9e\xb3\x0f\xec\x51\xf8\xe1\x7e\x2d\x01\xf4\x1d\xbd\x16\x57\x8d\x98\xad\x4b\x3e\x7c\xd1\x28\xd4\xa8\x91\xfc\x5c\x0a\xbd\x38\xb7\x46\xa6\x79\xf1\x63\x03\x0a\x9c\xe5\xc5\x39\x9f\x88\x5e\x6a\x19\x1f\xd4\x8f\x69\xfc\x94\x8c\xa2\x5a\xa2\x98\xb6\xf0\xa2\xd1\x48\xa0\x1a\xd6\x8d\x9d\xbe\xff\x4d\xb0\x58\xfa\xf8\x29\x34\xf4\xbd\xa6\x8c\xea\xa2\x9f\x05\x58\x3a\x56\x3d\x9d\xaa\x5b\xfb\xd5\xaa\x76\x1f\xa9\x0b\x23\xbb\xf5\x56\x9d\xf9\x3f\xe6\x7c\x22\xf6\x1a\x6d\x74\x67\x34\x45\xcb\x5b\x06\x47\xb4\xbb\xd5\x31\x6a\x27\x63\xbd\x95\x00\xc7\x78\xd1\x2f\x47\x23\x61\x4c\xb3\x61\x47\x4c\xad\xce\x9a\xdc\xa9\xbe\x08\xfc\x0b\x78\x37\x5a\x6b\x9f\xb5\x1b\x76\x14\x4a\x79\xb9\xb7\xc4\x87\x91\xd0\x73\x6b\x0a\xda\x35\x1c\xaa\xf9\x02\x69\x60\x2f\x4f\x26\x0a\x96\x7f\xbb\xbc\x8e\xb6\x4c\x1b\xad\x44\x45\x7f\xb1\x04\x31\xf6\x84\x7e\xfb\xe3\xaf\x73\xd8\xb9\x17\xe2\xb7\x9f\x1c\x81\xee\xa2\x84\x55\xe5\xa6\x32\x4b\xb5\xc8\x9b\x2a\x11\xad\x56\x22\xbf\xfd\xf1\xa7\x3f\x98\xf6\x58\xe9\x2e\x1f\x4d\x9b\x4d\x91\x28\x4b\x20\xf9\xa3\xfa\x69\xc5\x5c\xc2\x48\x23\x37\xf7\x3c\x11\x6d\x9c\x84\xb5\x94\x5a\x49\xa4\x5c\xf2\x2c\x6b\xca\x98\xec\xf9\xb7\xdf\x7e\x5b\xfc\xf1\x8f\xcd\x70\x30\xe6\xee\xe0\x35\x62\x52\x62\x9a\x61\xfb\x9f\x78\xb4\x4f\xa4\x3d\x0b\x72\x08\xb6\xe3\x58\x0b\x33\x6d\xc6\x0f\x47\x17\x0f\x57\xe8\x8e\xc5\xb1\xcc\xaf\xcd\x0a\x72\x00\x41\x57\xda\xe2\x76\x28\x83\xb6\x38\x59\x51\x27\xea\x46\xfc\x5b\x6d\x11\x11\x23\x4f\x9b\x20\x71\x27\x02\xe5\x78\xda\x48\xac\xd6\x2b\x92\x11\xcd\x0d\xf8\x77\x30\xd2\xef\xa7\x11\x10\x28\xc7\xdf\x01\xb9\x4c\xf4\x50\xd0\x4a\x5b\x7f\x90\xe3\x26\x3d\x36\xd7\xaa\x70\xfc\xf5\xdb\x6f\xbf\x35\xd6\x5a\xa1\x5f\x5c\x2e\xe6\xa2\x7d\xac\x46\xd7\x94\x8f\x63\xdf\x12\x61\xf0\x6f\xbf\xfd\x96\x7e\xd2\x22\x83\x7a\x9d\xbd\x34\xe4\xee\x80\xac\xb9\x95\x79\xaa\x6e\xdb\x2e\x52\xd3\xd6\xc2\x9a\xae\xcd\xd6\x1f\xec\x02\xe4\xb7\xb0\x6b\x2f\x44\xbb\x50\xdf\xf5\xcf\x4e\x9b\xbf\x52\x61\x8f\x5e\x8a\x82\x0b\x74\x8a\x62\xcd\x5f\x7f\xfb\xc3\x5d\xdb\xe2\x7c\x0c\x13\x61\xf7\x37\x22\xc8\xf2\x3e\xac\xe6\x50\xc9\x5d\xa3\x8f\x45\x31\x9a\xda\xc1\x4d\x53\x25\xcb\x99\x30\x56\xc3\x59\x7f\xfe\xf1\xd4\x26\xe2\x11\xd7\x4b\xdd\x77\x91\x7e\xf3\x0e\x18\x7f\x96\x2c\xbf\xb6\x54\x2e\xd6\x5e\xa5\xfc\x5b\x70\xbd\xa8\x6f\x45\xdb\x1d\xb8\xca\x79\x71\xd7\x4b\xde\x79\x01\xe2\xab\x64\x92\xbc\xf5\x87\x30\xc1\x9a\xdc\xb3\xfa\x64\x2b\x51\xff\xb3\x29\xc1\x57\xd6\x74\x77\x36\xff\xed\x6e\x6a\xa7\xb0\x20\x24\x77\x91\xe4\x2b\xb6\xf0\xfe\x6d\x5a\x47\x83\x27\x6f\x9e\xa5\x78\xeb\xc5\xc3\xa6\x6d\x67\xfd\xb9\xcc\xd9\x9e\x92\x5e\x6e\x84\x2e\xa8\x5b\x79\xe4\x9b\x5c\xe3\xb6\x28\xee\x99\x32\x4f\x53\x5c\xe5\x9a\xf9\xc6\x6e\xd3\x3a\xe3\xc2\x00\x62\xab\x8d\x4d\x47\xe4\x2f\x02\xa7\x6b\x67\xfb\x87\xe5\xa7\xe0\xd8\xe4\x44\x81\xda\xbd\xc5\x45\x3d\xe6\xea\x3e\x9d\xbe\xf9\x2a\xfa\xba\x79\x41\x39\xf0\x97\xa5\x69\x53\x69\xa6\x30\xbc\xfd\x6c\x27\x4d\x2d\x9f\xb7\x37\xaf\x95\x34\x0a\x3e\x6c\x00\x1b\xb5\x63\x58\x76\xfb\x3f\x97\x5c\x4d\xe0\xff\x8a\xa6\xe8\x94\xe1\x68\x9a\x08\x01\xae\x4f\x9e\x7e\x6b\xb2\x72\xb2\x92\x26\xf5\xe7\xc3\x17\xf0\x0d\x98\xe2\x8b\xe6\xda\xeb\x8c\x4b\x28\xc0\x7f\xdb\x8a\x78\x90\x93\x54\x1d\xf3\x32\x53\xa3\xeb\xc7\x9e\xaf\xaa\x45\x40\x9e\x71\x1a\x28\xbe\x43\x4d\xff\x41\xc7\x2b\xc9\x2b\x7e\xb7\x9a\x8a\xb7\xd2\x2b\xb5\x77\x2b\x2e\xe1\xb6\xae\xd8\x11\xa4\xef\x23\xf7\x21\xa2\xd1\xa5\xf3\x74\xd5\x9c\xe5\x35\x1b\x8a\x54\xeb\x8e\xf1\xcf\xaf\xbd\x67\x49\x71\x9f\x70\x73\x63\x30\xe3\xf4\x70\x20\x60\x09\x95\x52\xeb\x11\x85\x15\xc4\xf3\x0f\xde\xb7\xe8\xd5\x1c\x60\xed\xbc\xfc\x0c\xd2\x46\x24\xc9\xfa\xff\x3f\x7b\xff\xba\x1c\xb7\xad\x25\x8a\xe3\xdf\xf5\x14\x14\xa7\x4a\x69\x8e\xd9\x2d\xc9\x4e\xf6\x4e\x7a\x76\xc7\x23\xcb\x76\xe2\xb3\x7d\xd1\xb6\xe4\x64\xf6\xc8\xaa\x14\x9a\x44\x77\x23\x62\x03\xdc\x04\x28\x59\x91\xbb\xea\x7c\x3a\x0f\x70\xea\x3c\xc0\xff\x59\xfe\x8f\x32\x4f\xf2\x2b\xdc\x48\xf0\x4e\xf6\x45\x6a\x3b\xca\x07\x47\x4d\x82\xc0\xc2\xc2\xc2\xc2\xc2\xba\x8a\xac\xef\x1e\xd4\x97\x9d\x04\x4f\xa5\xe4\x58\xbf\xef\x65\x32\x13\xb3\xd7\xea\xfd\xbf\x4d\xbc\x9a\x77\xff\x1a\x5e\xc1\x60\xbd\x48\x10\x5d\x7e\x19\x18\x38\x03\xd3\xf4\xb6\x5b\x25\xd1\xd8\xce\x0e\x93\xdf\x33\x30\xcd\x4b\x57\x15\x97\xd5\xc6\xdd\x72\x6a\x6e\x92\x17\x3e\x12\x17\xce\x0c\x7f\x31\x74\xbf\x03\x3d\x0a\x6f\x98\xe4\x69\x91\xe2\xb1\xb8\x61\xd9\x4e\xce\x84\x60\xb0\x74\x1d\xa9\x7a\x6b\x2a\x0e\x6e\x19\x18\x0f\x6d\x1d\xbd\xb4\x50\x26\x45\x91\x0c\x9c\x7f\xf6\x21\x94\xb2\x74\xed\x02\x4d\x21\x4b\xbf\xe8\x76\x4f\x03\xe9\x77\xda\x72\x6a\x0e\x5f\x66\x83\xac\x62\xb7\xe9\x57\x8d\x42\x42\x23\xc9\xad\x75\x46\xce\xc2\xd5\xb7\xdd\x95\xc5\x20\xb1\x17\x92\xb3\x08\x30\xd0\x00\x5b\x56\x88\x48\x08\xd9\xc5\x09\x25\x29\x1a\xa6\x29\x9b\xe5\x62\x86\x8e\xf8\x29\xbe\x4d\x5f\x9a\xef\x32\xf6\x09\x3c\x30\x7e\x9a\xad\x22\x12\x08\x21\x66\x20\xfe\x30\xdf\xa8\x6b\x06\x1e\x88\x3f\xcc\x37\x2a\x38\x54\xbc\xd4\x7f\x9b\xef\x33\xf8\xc6\x03\xe3\xe7\x7d\xcb\x68\xe5\x92\xc6\x14\x32\x11\x72\x24\xc4\x0d\x5a\x7e\xc6\x95\x12\x96\x30\x4e\x29\x9a\x72\xe1\xd3\xaa\x5b\xef\x50\x0b\x2d\x92\xa1\x7c\x0a\x01\xf6\x8f\x82\xa0\x27\xd9\x1a\x34\xd8\x5a\xaa\xbe\x4c\xae\x83\x4a\x5c\xff\x19\xf9\x95\x27\x97\xb8\xd6\x1f\x08\x79\x32\x80\x78\xca\x66\x19\x56\x25\x6f\x73\x89\x86\x43\xd8\x15\xa5\x44\xcd\xd2\x16\xb2\x9f\x85\xb3\x80\x01\x85\x16\x1c\x9d\x5f\xec\x54\x40\x45\xdb\x42\x95\xf0\x62\x2a\x95\x73\x7c\xd6\xa7\x4c\xd8\x16\xa1\x81\x88\x72\xc5\xc6\xb2\x88\x60\x4f\xf1\xe8\xb7\x81\xca\xac\xda\xc3\x2e\x74\x86\x58\x4e\x36\x7b\xef\x5e\x6e\x46\x38\x6f\x72\xaf\x36\xac\xe6\xb4\xff\x5f\xb2\xc5\xbd\xb3\x35\xa0\xb5\xb6\x5e\xee\xaf\xfa\xa6\x8a\xc5\x39\x6e\x6b\xc3\x7f\x67\x1b\x40\x5b\x75\xbc\xe9\x32\x90\xc8\x24\x70\xc0\xc8\xc0\x38\xbe\x07\x52\xcb\xbf\x23\x0f\x95\xde\x6f\x03\x44\xdf\xc6\x41\xd0\x63\xce\xe7\xcf\xfc\xc7\x07\x2c\x97\xcb\xef\x31\xc7\xd9\xdb\xeb\xb1\x91\xcd\x29\xab\x8d\xe7\x40\x33\xc7\x14\xfe\x6d\xf4\x25\x89\xcc\xf5\x48\xce\x95\xdf\x90\x5f\xc7\x40\x13\xf1\x8f\x95\xb1\x50\xe6\xb8\x50\xdf\xbd\xb4\xdb\x83\xc1\xbe\xc4\xa3\xaa\x81\x77\x4c\x27\x28\xa5\xca\x4f\x94\xfe\xbf\xca\xcd\x7a\x1a\x4f\x26\xe8\x53\xa9\x05\xc0\xf8\xa2\x51\xf5\xef\x16\xb2\xc9\xa8\x63\x73\x58\x0d\xa6\x6a\xa1\xc8\xb1\xb1\xa1\xab\x9f\xd4\xb4\xd4\x7f\xba\x02\x7b\xc3\xa2\x72\x4d\x1c\xaa\x35\x1d\x88\xf7\xda\x4c\x56\xd7\x50\x37\x71\x8d\x03\xbe\xa6\xb9\xd1\xca\x15\x47\x7e\x4d\x5b\xf1\x5e\x7a\x60\xd4\x35\x93\x0d\x5c\x2d\x09\xd4\xb4\xd4\x4d\x5c\x43\x24\xa8\x69\x6e\xb4\xe2\x54\x47\x21\x8b\xc3\xd4\x6e\x69\x5c\x89\x7e\x13\xe5\x20\xc5\x03\x17\xe6\xe4\x26\x96\xca\x4d\x30\x2b\x34\xb1\x44\x68\x82\x79\x59\x8c\x19\xb2\x18\xcc\x6e\x03\xa1\xb2\x49\x3b\x53\x52\x12\xd3\x52\x92\x7a\xac\x57\x85\xbf\xd1\x7f\xa7\x5d\x99\x92\x19\xcb\x4a\x66\x30\x23\x96\x31\x2d\x96\xc1\xac\xc0\xc1\x14\xd2\x93\x17\xa9\x48\xc6\x0c\x91\x0c\x96\xc8\x63\x2c\x2b\x8f\xc1\x92\xe3\xb9\xfd\x31\x3c\x30\xce\x47\xc7\x70\x53\x4a\x73\x5c\x66\x57\x68\x30\x18\x80\x68\x1a\xab\xb1\x95\xbc\x94\x58\x23\x0f\xdc\x83\xd6\x8e\x4b\xb9\xf3\x75\x4b\xfc\x96\xde\xfd\x57\x70\xf5\xf7\x0f\x3f\xfc\x7d\x5d\x09\x70\x84\x63\xf4\x7d\xe5\xb9\xc9\xfb\x5f\x7f\xe7\x26\x3b\x24\x41\x3f\x55\x3e\x3e\x3a\x5d\x0f\x17\xa3\x6d\xd7\xfe\x4f\x9f\x78\xaf\x94\x13\xce\x63\x57\xef\x38\xed\x6b\x93\xee\x33\x1b\xe9\x04\x4f\x2b\x26\x85\x79\xbc\x74\x72\x9e\x27\x55\xd3\x55\x2e\x4d\x85\x29\xa7\x18\x4f\x7c\xcb\xc0\x58\x84\x23\x88\x2d\xab\x19\x85\xad\x71\x41\x65\x36\x03\xd7\x9c\x76\xba\x5d\xb3\xcc\xc0\x56\xb7\xd2\xc4\xa9\xe9\x2c\xa1\x6b\x3b\x6b\x96\x97\x1e\x50\x5a\x7d\x26\x7f\x65\xf4\xa1\xa9\x07\x14\x07\x2f\xf1\x73\x92\x50\x26\x3f\x25\xb0\xc9\x4f\xbd\x50\xd9\xdf\x46\x83\x64\x0e\xc9\x93\x64\x2a\x69\x9f\xc6\x8c\xea\x93\x2e\xca\xb9\xb6\xf4\x62\x4a\x50\xd1\xb2\x7d\x82\xa9\x36\xfe\x54\x09\x22\xdb\x34\xce\xe3\xb9\xd2\x35\xae\x45\x3e\x85\xaf\x37\x4d\x51\x39\x1c\xfd\x29\xe9\x33\x12\x96\xf2\xb7\x36\x9f\x4b\x7f\xb2\x7e\xb2\x32\xed\x26\x95\x0f\xea\xd1\x0b\x75\xf8\xd8\x88\xea\xf9\xa1\x4d\x30\x8f\xbc\xb4\xca\x34\xdd\x2a\x14\x28\x0d\x61\x9b\xb2\x24\x84\x2d\x73\xa0\xda\xf2\x5a\xce\xbf\x3a\xd0\x04\x66\xeb\xdc\x5e\x10\xe2\xfe\x77\x22\xb9\x57\x42\x47\xe7\x4f\xaa\x68\x2f\x51\x1e\xd8\x17\x95\x39\x9e\xd4\x4c\xbf\x75\xd5\xc1\x2f\x18\x16\x43\xa1\x91\x30\x75\x46\xae\x9f\xc3\x00\xdc\x08\x8c\x7c\x77\x50\x8e\x3d\x39\xd6\xbe\x47\x82\x00\x84\x22\xb8\xb0\x3e\x98\xa8\x80\xeb\xd2\x78\xa2\xfa\x2d\x90\x27\x81\x18\xed\xc7\xa8\x2f\x58\x68\x94\x9e\x32\xe8\x0f\x19\xf7\xf5\x98\xa3\xed\xa2\xf4\xfb\x0a\x26\xae\xc9\x48\x78\x6b\x69\x74\x48\xcb\x63\x81\x81\x6b\x39\xd1\x64\xdc\x59\x6e\x9d\x77\xf0\x4a\x3d\xaf\x94\x33\x6a\x46\x87\x9f\x3c\xcb\xda\x37\x52\x46\x2d\xe0\x58\x92\x53\x17\x19\x73\x81\x0d\x0b\x8a\xce\x40\xdc\xe0\xea\xaa\xe7\xd2\xca\x7d\x34\x3b\xd5\x96\x9f\x14\x30\x51\xcd\x4a\x97\x08\x3c\x5b\x63\xec\x59\x0d\x47\x4c\xe4\x82\x39\x64\x60\xb9\xb4\x6d\x49\x17\xda\x6d\xbd\x29\x7f\xdb\xec\xb0\x31\x2a\xf0\xb0\x28\x6c\xc9\xd7\x29\x6e\x6b\x73\xb9\xcd\x1e\x97\x83\x0a\xa9\x57\x33\x84\xbe\x88\xb7\x1d\xa5\x12\x23\x80\xc9\x0c\x50\xb5\x2c\x4e\xed\x6e\xe9\xa2\xcf\xa0\xdf\xf7\xe5\x15\xa0\x00\x96\x17\x41\x61\x64\x4c\x22\x30\x0b\xbe\xcd\xb9\x60\x64\x4c\x58\xdf\x08\x48\x2e\xed\xaa\x38\x7b\x91\x01\x31\x9b\x98\xa3\x34\xf8\xb8\x34\xe4\xf4\x7f\xfe\xf7\xff\xb3\x54\x07\x56\xa7\xc9\x15\x46\x2d\x73\xdc\xde\x78\x14\x68\x1b\xc9\x59\xec\x90\xf5\x88\xcd\x99\x3b\x6d\x9e\x2d\x17\xf4\x79\xfc\x83\x8c\x3a\xef\xfe\xa4\x63\x13\xf0\x06\x5e\x5d\x9c\x46\xda\x4b\x6e\x36\xe5\x91\x19\x1d\x8e\xd2\x27\x15\x47\x69\xd9\x7a\x5e\x21\x78\x9d\x08\x80\xc9\x72\x66\x25\x1e\xbd\xac\x4a\x3f\x92\x2c\xaf\xd6\x60\xa4\xa7\x6b\xa2\xa9\x31\x94\x26\xd5\x47\x6e\x76\xdd\xf3\x07\xb0\x79\x7d\x52\x92\x9a\xbe\x0e\x24\xa7\xb2\x76\x0c\x16\x3f\xb4\x0b\xaa\x11\x50\x92\xfc\xcc\xb8\x4b\x65\xfa\x51\x2e\x2e\x5d\x0e\x79\x11\x4d\x93\xb3\xe1\xe6\x1e\xe6\xef\x6d\x26\x42\xab\x28\x54\xa2\xb7\x8a\x60\x15\xb2\xdb\x13\x70\xb2\x02\x5d\xe5\x8a\x52\xaa\x6e\x2f\x6c\x74\xb8\x0a\x6a\x01\xbc\xdd\x25\xb0\xad\xfc\x92\x10\x45\x8b\xb6\x09\xcd\xb4\x14\x72\xb4\x93\x6f\x8b\xe6\x59\x92\xeb\x30\x47\x4d\x91\x77\x2d\xaa\xd5\x06\x8f\xe5\xc9\xbd\xd3\x37\xad\x6e\xd7\x77\x1b\xef\x5f\xa1\x73\x5c\x2e\x94\x49\x67\x4b\xae\x8a\xfb\xff\x4a\x22\x83\x1a\x02\x68\x54\xe2\x8e\xf7\x0a\x19\x43\x71\x98\x18\x61\x2f\xcf\x80\x77\x99\x71\x75\x69\xf2\xa9\x51\xe5\x92\x16\x2e\xc1\xba\xd3\x5c\xb4\x4c\x6e\x48\x6d\x8d\x7e\x4f\x82\x60\xcc\x47\xcb\xb9\xe5\x15\x8d\x6e\x91\x6a\x59\xef\xfc\x5a\xe5\x4c\xd5\x76\x02\x4b\x98\x9a\x53\x92\xfa\xc2\xcd\xcd\xd5\x59\x25\xb6\xc7\xca\x9c\x8d\x1f\x6f\x0e\x00\x37\x3c\xd8\xea\x6d\xa5\x19\x8a\x92\xf9\x02\x8c\xc0\x00\x4d\xb6\x54\x7b\x6f\x18\xce\x29\xc2\x6e\x9b\x38\x7a\xf0\x41\x25\x2c\x9c\xee\x21\xbf\xba\xa9\x60\x13\xe9\x2a\x92\x50\x4b\x12\x95\x25\x2d\x4f\xfa\xb1\x32\xf9\xb2\x9c\xcd\xb7\xaa\x68\xc7\x76\x9a\x59\x37\x65\x14\x4d\xb0\x64\x8c\x99\x62\xce\xd9\x5a\x73\xe5\xf2\xa6\x47\x93\x2e\x0c\xda\x31\x7f\x28\xef\xa3\x1f\x0f\xf6\xf6\x60\x15\xb3\x35\x9a\x9f\x1f\x5c\x74\x35\x19\xee\xb4\xf6\x38\xb8\x03\x57\x83\x15\xf8\xf3\x96\x98\x2b\xff\xf5\xf2\xc3\x5f\xbe\xbd\xbc\xbc\x2a\x35\x57\x1a\xf5\x1c\xbe\x48\xc3\xa5\xd2\xe9\xc8\x6b\x6f\xc1\x66\xe7\x83\xe8\x52\x5c\x4f\xa7\x33\xa1\x43\x01\x42\x85\xc2\x61\x8c\xc4\x6d\x6d\x4c\x22\x1f\x46\x42\x6a\x3f\x17\xf2\xa1\x5b\xf1\x6f\x43\x46\x31\xe3\xfe\x9c\x81\xa4\x3f\x16\x79\x1b\x0d\x6d\xc8\x0c\xce\x05\x04\x71\x18\xc2\xc8\x03\x14\xea\x34\x15\xaa\x18\x88\xbc\xbc\x06\x48\x48\xf9\xe7\x1c\x09\x0a\x8c\xea\xc4\x63\x51\x44\xae\x5f\xc3\x09\x2b\x55\x56\x69\x6d\x60\x8d\x34\xce\xa5\xaf\x86\x84\x00\xb5\x7a\xa5\xfb\x32\xe5\xfe\x59\x4d\x6e\x77\x58\x19\xe4\xfd\x8b\x5f\x5e\x9d\xbe\x7a\xf7\xf6\xb4\x42\x65\xb8\x42\x51\x10\x08\xbc\x59\xa2\xe7\x4c\x8f\x9d\xca\xe4\xda\x75\x09\xfc\xc4\xe0\x95\xd6\x3e\xc4\xe0\xbc\x68\xc5\x33\xf4\xbe\x85\xf3\x4b\xec\x97\x27\xee\xa1\x64\x6f\xca\x92\x97\xa4\x1f\x6c\x65\xc2\x4b\xcf\xc2\xb4\xa7\x3a\x45\xf7\xfa\x13\x12\x9e\x45\x08\xe0\x69\x00\x4f\xe7\x20\x08\xde\x0b\x0e\xb8\xb9\x2c\x91\xd5\x6a\x6c\x31\xf9\x1a\xd5\x7c\x53\x7a\xc4\xba\x5d\x7e\x78\x1f\x89\x0e\xd7\x9c\xeb\x70\xd9\x94\x46\xc7\x72\x3c\xeb\x7d\x2a\xb1\xd9\xfc\x6f\x78\x6d\x85\x7c\x3b\x91\x98\x5a\x0a\x26\x4b\x46\x06\xc9\x84\x46\x5c\x4e\xb5\xf8\xc5\xd6\x82\x3e\x62\x75\x49\x8d\xce\xd0\x1c\xca\xb3\xa1\x49\xef\x5c\xaa\x3a\x4e\x04\x8b\x8c\x05\xb6\x9d\xc9\xd5\x10\x43\x53\x01\x45\x6c\x2b\x75\x2b\xcf\x9a\x53\x57\xb7\x98\x9a\x0c\xc8\xad\xe3\x0a\x95\xa7\xa8\x01\xd9\x26\x74\x59\xfa\x20\x5b\x49\xa3\x55\x14\x4d\x97\xd4\x6a\x7d\xc1\x8a\x87\x8e\x39\x69\x3a\xab\xc2\x3a\xe9\x21\x5a\x6b\x37\x4a\xf5\x10\xf9\x08\xa1\x57\xbe\xf2\xea\x2c\x77\x10\x97\x8d\x7e\x13\x71\xbd\x85\xc8\xa4\x86\x6f\x0d\xe7\xf2\xd5\xdc\xd8\x1b\x42\xa8\x5e\xe5\xf4\x1c\x25\x11\x54\xac\x3e\x82\x8a\xd5\x45\x50\xb1\xa6\x08\x2a\xd6\x10\x41\xc5\x2a\x23\xa8\x58\x5d\x04\x15\x6b\x8e\xa0\xca\x7b\xec\xe6\xbd\xf0\x5b\x69\x64\xa6\x26\x2a\x9c\x8c\x0e\xc6\x78\x65\x90\x75\x49\x8e\x83\x32\x7d\x4a\x3e\x1c\x52\xa8\x7c\x83\x8c\x2e\x46\x22\x28\xe3\xf2\x3e\x4d\xd1\xe3\xe4\x1c\xc7\xa7\x19\xfc\x38\x45\x57\xf1\x69\x1e\x41\x4e\xce\x4d\xbe\x32\xc8\x4b\xc4\x5c\x65\xfc\xd9\x57\x88\x07\xcb\x64\x94\x85\x51\x44\x44\xfe\x52\x34\xe9\xc1\x4c\x15\xe3\xac\x96\x77\x1f\x13\xd6\x9f\x90\x18\xfb\xb6\xe3\xee\x1e\x76\x57\xf1\x2a\x58\xb7\x23\x11\x5a\xbd\x6e\xbf\x33\x7f\x34\xd4\xfe\xc7\x00\x7b\x69\x5e\xce\xba\xb4\x08\xaa\x14\x78\xba\x46\xb2\x28\x74\x79\x74\x7a\xe6\x5d\x21\x41\x82\x7c\x5b\x15\x6f\x98\x7b\xab\xbe\xce\x06\xee\xaa\xc4\x26\xf9\x8f\x92\x00\x3b\x1d\xcb\x6b\x1c\x6d\x32\xf0\xed\x4e\x12\xe2\xc0\x22\x43\xcd\xa4\xc8\xc1\xb9\x7c\x1d\x6c\xb5\x7c\x1d\x9a\x09\x7f\x31\xab\x97\x31\x57\x0f\x0d\xcc\x2c\x16\x85\x28\xe8\xd5\x82\xb0\x4b\x60\xad\x4e\x5f\x3d\xd8\x74\x40\x76\x19\xe6\x56\x0f\xcb\x6e\x3b\xc7\xb2\xe0\xec\xce\x62\xa7\x66\x8b\x5f\xb2\xf8\xb9\x59\x79\xb2\xb5\x5d\x6b\xae\xc3\x1b\xb7\xd4\xd0\x53\x2a\x80\x64\x50\x21\xa9\x32\x2f\x95\xac\x3f\xe0\xae\x73\x10\x9b\xb0\x52\xd5\xe6\x8e\x9a\x42\x96\x5a\x95\x6b\x11\x61\xf0\x6d\x99\x45\x48\xc8\xdf\xf2\xa0\x68\x1e\x40\x24\xb4\x58\x72\x90\x45\x77\xc3\x87\xde\x9e\x5b\x62\xf6\xf0\xdf\xbc\xf1\x1e\x7d\xff\x7c\xfc\x15\x45\x69\x3d\x18\x3b\x4a\x8c\x1d\xba\xee\x7f\x37\xa3\x87\x94\x3d\xff\x4c\x66\x8f\x25\x2c\x1e\x95\x2e\xbe\xd0\x47\x8c\x98\xa4\x97\xe2\x3e\x51\xee\xa9\x78\x0b\xe9\x0d\x9c\xf3\xe8\x4c\xf0\x2f\xbc\xc1\x12\x9b\x45\xc5\x82\x16\x96\x3a\xaf\xe4\xd3\xcf\xb3\xa1\x15\xfa\xa9\xf4\xd8\xcf\x3f\x2d\xf8\x32\xb6\x24\x95\x5a\xbf\xb6\x8c\x47\x5f\x95\xd2\xb4\x34\x62\x45\xf2\xce\x7e\x0a\x95\x91\x51\x5d\x48\xa1\xaf\xd5\x86\xe1\xa8\x7f\x43\x7c\x98\x62\xd8\x44\x3e\x92\xfe\xb8\x1d\xbc\x50\x6d\xf9\xde\x3a\xca\x28\x23\xf8\x56\x6c\x83\xdb\xea\x35\x6a\x8f\xdf\xcd\x7a\x10\x6e\xd2\x43\x30\x7f\xe2\x2d\xa7\x4d\xd5\x09\xa2\xbe\x28\x17\xc1\x7a\xad\x40\x43\xbe\xed\x4e\x32\x6d\x67\x89\x39\x09\x67\xe7\x72\x58\x4d\x6e\x90\xd3\x24\x35\x48\x36\xa1\xb7\x88\x15\x70\x33\xe9\xb9\xd6\xe5\xac\x78\x06\xc6\x59\x3f\x45\x66\xa4\xf3\xfe\x0a\xd2\x71\xbf\xd7\xc9\xa5\xcd\x8c\x87\x8d\x99\xa8\x97\x51\x90\xa9\x2d\xf3\x70\x15\x5c\xd3\x55\x70\x5b\x6f\x82\x7f\xea\x0c\x2a\x4b\x5d\xc2\xd4\xce\xd8\x92\x5b\xd8\xfb\x9f\x5e\xfc\x74\xf9\xf2\xf1\xa7\x87\x5b\xd8\xc3\x2d\xec\xc1\xf5\xec\xc1\xf5\xac\xb5\xeb\xd9\xbb\x50\xc5\xa8\xad\xcd\xf1\x6c\x23\xbe\x63\x2a\xb0\x34\x91\x14\x97\x74\x17\x13\x65\x5d\xd2\x4e\x1a\x3c\xc5\xd6\xe9\x26\x76\xaa\xd3\xd3\x6e\xb0\x6e\xad\x72\x43\x4a\x87\xaa\xe9\xbd\xf1\xe5\xfa\xd6\x8c\x0b\x82\x53\x12\xdd\xac\xb6\x68\x69\x2f\x77\xb8\x6a\xc7\xe9\xa0\x1b\x5b\x35\x39\x04\x82\x5b\xb3\x5e\x0c\x4c\x57\x5b\x2a\xd1\xc1\x1d\xae\xd2\x99\x18\x6f\x53\x0b\x74\x06\x3a\x6d\xa5\x42\xf6\x83\x3b\x2f\xc5\xae\x86\xce\x68\x95\x32\x6e\x7f\x5a\x78\x38\x12\x71\xef\xb0\xa3\x33\xf0\xda\xe9\xcd\x28\x9e\xb3\x12\xd9\x99\xfd\x34\xfb\x00\xaf\x99\x06\x5f\x13\xef\x32\x9b\xac\xa2\x8d\xeb\xef\x92\xb5\xc9\x2d\xa5\x33\xaa\x25\xcb\x76\xbe\xbd\x99\xaa\xf1\xad\x29\xe7\x17\x79\x73\xba\x6f\xca\x49\x13\x42\xac\x42\x37\x99\xb4\x12\x77\x4b\x35\xc7\x24\xec\x76\xb6\x2c\x43\x33\xbf\xa4\x58\x5a\x17\xb5\x6c\x43\x25\xfc\x95\x1d\xc4\xeb\x38\x75\x85\xbc\xd9\x82\xda\xcb\xcd\x0e\x52\x22\xeb\x27\x8a\xce\x24\x79\x98\x4a\xd0\x52\xe9\xa2\x5d\x48\xbf\x77\xde\xce\x46\x53\x6d\x31\x68\x9b\x51\xb0\x3c\xf1\xdf\x12\xd7\xc7\x56\x88\xce\x0b\x89\xab\x62\x3a\xe9\xef\x01\xd5\x35\xf2\xdd\xaa\x58\xe6\x5d\x3d\x20\xb8\x59\xa0\x59\x15\xcf\x46\x8f\x05\x74\x97\xe5\x76\xca\xe3\xfd\x7d\x2e\x13\x6a\xf7\x35\x28\x64\xb7\x59\xe7\xe2\xbc\xef\x96\xbc\xf4\xae\xd6\x31\x2f\x5e\x74\x5b\x45\x98\xc8\xee\xe9\x3a\xaa\x1e\x97\x59\x44\x23\x5d\xd7\xb6\xac\xa7\xf9\x32\x9b\x9b\x6b\x8b\x56\xfa\xfe\x12\xdb\x14\x6c\x04\xcb\xd9\xad\xb7\xc4\xc2\xe0\xbf\x3d\xf9\xeb\x2f\xbf\xcc\xdf\xb6\xb3\x30\xf0\x3d\xf0\xd8\xb5\x49\xcc\x02\xc8\x57\x6f\x1d\xd5\xcf\x0b\x18\xe9\x84\x4f\x49\xf0\xfb\x02\xf8\xaf\xc8\x05\x40\xc7\x5b\x54\x26\x79\x49\x63\xac\x96\x30\xae\x6b\xff\x70\xad\x51\x94\xc5\xa0\x33\xf1\x04\x5d\x3e\x2f\x2b\xcd\xa5\xd2\xaa\x55\x7a\xf3\xe7\x9d\xa0\x45\x7b\xdb\xd9\xc1\xca\xb2\x2f\xe3\x36\x95\x99\x5c\xfe\x72\x1c\x57\xbd\x1d\x13\xff\x26\x79\x29\x7e\xa4\xef\xb4\x49\xdd\x2d\x96\xbd\x50\x2d\x22\x70\xfd\x4c\x74\xa0\x7c\x37\xf5\xef\xb4\x85\x47\xf0\x04\x4d\x93\x06\xea\xa7\x39\x06\x83\x11\x06\xc1\xa9\x2c\x56\xae\xdb\xe5\x1e\x3b\x65\x05\x95\x44\xae\x1a\x19\x70\x20\x2b\x37\x56\x54\x3f\x5d\x0f\xea\xdb\x3b\x07\x64\xf6\xd1\x97\xec\x17\xd0\x61\xe7\x34\xba\x71\x8b\xe3\x3b\x6f\x69\xd6\x3e\x02\xda\x1e\x5f\x63\x11\x4f\x9a\x9a\xf6\x70\xc9\x67\x2b\x28\x63\x0a\x99\x2a\xe8\x29\x77\x44\x37\x67\xe2\xcc\x22\x6e\xc9\x01\x73\xfd\x8f\x1f\x3e\xcd\x8f\xa7\x07\x0f\x26\xec\x3f\x87\x09\x5b\x8b\xbe\x77\x6e\xbf\x7e\xb0\x25\x6f\xc8\x96\x0c\xc6\x24\xae\x31\x54\x35\xf5\x06\x3f\x99\xf3\x78\x03\x30\x98\x42\x2b\x82\x31\x05\xe3\x00\x5a\x14\xa3\x30\x84\x8c\x5a\x64\x92\x24\x5c\x98\x90\x48\x04\x86\x5a\x92\x96\xb6\x58\xd7\x58\xd8\x89\x2b\x25\xa3\x78\xa6\xf3\xfe\xea\x07\xf2\x24\xb7\xc2\x88\x5c\x21\x9f\x23\xad\xaf\xb0\xa6\x31\xc5\x66\x80\x59\x1e\xc0\xd6\x18\x5a\x48\x15\xf9\xb6\x10\x66\xc4\x02\xf8\xc6\x4a\x2f\x9d\x95\x1b\xf9\x15\x66\x70\x1a\x01\x9d\xd0\xb6\x63\xa6\x0a\x01\x5f\x2b\x77\xf6\x71\x92\x0b\x78\x25\xd7\x75\x45\x10\xf9\xc7\xb2\xf7\xbb\xf3\x43\xbf\xf3\xcb\x67\xe9\xc1\xbe\xcc\x3d\x69\x2b\x62\xa2\xbb\x81\x2c\x13\xc9\x7e\x3d\x57\xbb\x0d\xe7\xc4\xe8\xec\xbe\xad\xfc\x94\xab\x05\xe6\xc4\x91\x39\x05\xbd\x4d\xee\xd1\xac\x5b\xb8\x61\x08\xd0\x7f\x0e\x6d\xdb\x9d\xa0\x80\x71\x61\xe8\x39\xf1\xa8\x4c\x6c\x4b\x49\xc4\x9e\xdd\x0c\x6f\xb9\xfc\x30\xdc\x3d\x70\x55\xee\xa3\xe1\xee\xa1\x2b\xaf\x4d\xe2\x4f\x40\x3d\xfe\x92\x73\xd2\xe1\xee\xe1\x62\xf9\x4b\x30\xb5\x57\x71\xbd\x76\x65\xa6\xeb\xd4\xf1\x3c\x7b\xc1\x75\xc9\xe8\xfc\xc2\xa5\xa3\xf3\x8b\x1d\x98\xe4\x1c\xcd\x92\x25\x39\x67\x17\x23\x5c\x13\x8a\x68\x38\xb5\x2f\x32\x95\x1b\x41\x10\xf4\x88\x79\x79\x24\x65\x43\x10\xe7\x16\xa6\x21\xc5\x3a\xe5\x24\x67\xa3\x22\x67\x89\x51\x8c\x4f\x59\x58\xdd\xdd\x43\xc7\xa5\xe7\xa4\x06\x2a\xe5\x3f\xbf\x28\x01\x88\x9a\x00\xf1\xdb\x32\xf6\x7b\x86\x7e\x30\x29\xf0\x2b\xe3\x4e\x4c\x87\xfd\x34\x9a\xde\xc5\x95\x08\x23\xce\x2d\xe6\xa0\xb1\xfa\x10\xee\x5a\x9c\x15\x2f\xdc\x65\x50\xca\xda\xbb\x24\x62\x45\x18\x6f\x15\xfa\x0a\x39\x0c\xcc\x90\x7c\x1f\x30\x30\x84\x8a\xbe\xcf\x6e\x42\xcd\xd2\xf9\xde\x28\xcd\x46\x20\xae\x7f\x92\xaf\x25\xd5\xd7\xb3\x39\x61\xd2\x8d\x2a\x5c\xbc\xaf\x71\x40\x80\xff\x12\x05\xa2\xf0\x7d\x5d\x06\x80\x47\xf6\x60\xc6\xe6\x81\x0e\xf6\xcf\xc5\x39\xc8\x69\xa6\xc5\xdc\x5f\xaa\x2d\x59\x56\x52\x3e\xc7\x3a\x4c\x35\x8e\xdc\xb7\xb6\xe3\x12\xe3\x61\x2a\x71\x88\xfa\xcb\x49\xa1\x57\xe8\xa8\x04\x20\x22\x59\x29\x1d\xfd\x36\x90\x88\xea\xc1\xcc\x49\xa4\xee\xe5\x50\x5f\x94\x65\x76\x75\xdb\xd9\x1d\x8d\xc8\xe0\x03\xd6\x0f\xfc\x85\xe3\xa2\xae\x7d\x8c\x0a\x7d\xec\xe0\x01\x67\x3a\x7b\x7b\x3d\x34\x42\x03\x39\x1f\x1d\xd8\xe1\xb2\x81\x48\xdc\x70\x2a\x0b\xc2\xbe\x62\x70\xae\xb6\x91\x6a\xa8\x6f\x3c\x42\x49\xa4\x78\x56\xae\x27\x9d\xc5\xad\x55\x67\x49\x63\xde\x9f\x62\x7c\xb9\xfe\x74\x4d\x93\x56\xfd\xa9\x2e\x64\x7f\x9c\x6d\x3e\x15\x7d\x45\xf0\x0a\x46\x14\xca\xc3\x91\xf6\x9a\xba\x7a\x17\xa9\xd4\x63\x5c\x82\x75\x9c\x61\xbb\xd6\x80\x37\x36\xf3\x09\x19\x4c\xdf\x76\x7f\x1b\x48\xcf\x8a\x1e\x75\x91\x8c\x83\x39\x41\xb8\x22\x84\x47\x90\x7e\x28\x5e\x37\x44\xef\x9c\x20\x8c\xa1\x9f\x0e\x5b\xba\xc3\x3f\xe0\xb0\x7e\xa8\x18\xb7\x1a\x4c\xf4\xd3\x3c\xdc\x09\xc2\xba\x42\x40\x65\x06\x75\x31\x6c\xb1\x69\x03\x00\xfc\x10\xaa\x1d\xbd\xa3\x06\xe9\xcb\x2f\xc8\xad\x85\x8c\x7a\xb1\x29\x91\x4a\xba\xe7\x2a\x37\x98\x5c\x76\x28\x9d\xab\x4b\xa4\x47\x4a\x13\x75\x55\x2a\x10\xcb\x53\x94\x27\x9b\xc5\x4b\x1d\x49\x5d\x36\xd0\x63\x99\xdb\x29\x19\x3f\x9e\xcf\x41\x24\xf4\xda\x54\xfe\x59\xd6\xea\x8d\x58\x42\xd1\xd9\x5c\xfe\x39\x43\x61\x59\x12\xf3\xda\xa8\xb7\x36\x53\x52\xfc\x70\x27\x5f\xc0\xdf\x38\x14\xdc\x42\xb6\xf7\x5c\x4f\x74\x27\x9b\xac\xbd\x4c\x5a\x59\xc8\x21\x70\x65\x57\x7a\x73\xd1\x1d\xdc\xb6\x33\xd2\x00\x97\x3a\x0e\xc1\x18\x06\xaf\x7c\xdb\xd9\xa9\x0f\xff\x5a\xb7\x0a\x59\x8c\x3b\xe4\x07\x1e\x27\xfa\x8a\x0f\x44\x23\xea\xde\x22\x7f\x48\x16\x8e\xfc\xa6\xba\x7b\xd5\x5a\xfc\x4f\x50\x2e\x1d\x26\x07\x2a\xab\x39\x50\x13\x14\xf0\xf3\x74\xa1\x2f\x2b\x74\xc8\x92\xcb\x02\x1d\xe2\xf4\xef\xe7\x11\x98\xb0\xb4\x67\x9c\xf6\xcc\xd2\xc4\x7c\x3a\xf5\xd9\x04\x7a\x37\x5e\x20\xcf\x6a\x38\x78\xad\x7f\x0f\x44\x27\x8b\xf4\x3a\x42\x5f\xa3\x2b\xb8\x6a\xa7\xbc\x8f\x85\xe3\xea\xcb\x75\x35\xa6\x92\x16\x6e\x04\x3d\x88\xd9\x91\xef\x97\x8e\x5d\x40\x15\xf0\xfd\xf7\xe2\x0b\x11\x54\x2a\x3f\xfe\x20\x8e\xe5\x76\xdf\xcb\x23\xdc\xe8\x82\xce\xc8\xf5\x29\x03\xa9\x8c\xca\x6f\x46\x11\x21\xfc\xf7\x31\x89\x31\x1b\x1e\xb8\x29\xfb\x18\x16\x38\x16\x12\x29\xe7\x72\xec\xa3\xd8\x2c\x61\x2c\x69\x5b\xc5\x44\x4a\xda\x6a\xf6\x22\x73\xbf\x4d\xf8\xc5\x49\x5a\x59\xd2\x9b\x11\x4c\x37\xa4\x4b\x46\x70\x90\xfb\xd4\xa5\xa3\x03\x21\xce\xcd\x41\xd8\x23\x6e\x26\x17\x57\x6e\x03\xa3\x81\x4a\xf3\x45\x7b\x46\x2a\x2a\xe7\xf3\xe7\x1e\x7d\x34\xe2\x7b\xd9\x85\x03\x13\x1f\x23\x5a\x38\x07\x77\x5a\x9c\x83\x5b\x62\x49\x79\x77\xf2\xe9\x9f\x3f\xfd\x44\x8f\xcb\x33\xd1\x6b\x5d\xe9\x83\x41\x65\x2b\x0d\x2a\x46\x4e\x88\x76\xf6\x14\xb3\x95\xce\x5e\x21\x19\xf3\x57\x1a\x15\x58\xa1\x51\x57\x3b\x51\x90\x77\x91\x36\x12\x07\x2b\x6d\x76\xca\x7a\x57\x25\xbc\xda\x8c\x34\x72\x33\x32\x55\xc2\x5f\xb2\x2e\x58\x15\x1e\x57\x25\x2e\x52\x95\xe9\x54\xea\xfc\xaa\x52\xc0\xd2\x05\x37\x23\xa1\x32\x8d\x0d\x70\xd3\x4c\xcd\xe6\x1d\xaa\x93\x73\xd6\xd6\x14\xe1\x2e\x5b\xe0\xc4\x9e\x56\xb9\xc0\x52\x50\xc9\xad\x6d\x79\x38\x43\xe6\x6f\x21\x34\x98\x0f\xf8\x81\x2f\x12\x64\xab\x43\x3c\xf9\x5b\x9e\xc9\x79\x32\x29\x48\xd9\x45\x89\xda\x36\xcf\x1a\xa3\x81\xd4\xa8\x08\xf2\xd2\xca\x95\x35\xd3\x9a\x42\x4a\x1b\x32\x6b\x45\x9e\x29\x06\xab\x5f\x49\x84\x56\xbf\x17\xf8\x2d\xbc\x4e\xd1\x5d\xf1\x4a\x61\xbf\xd5\x26\xc8\xbd\x4b\xd6\xa6\xb2\x81\x5e\xaa\xe2\xd8\xe6\xca\x55\x6c\xc9\xca\x0d\x96\x2c\x6a\x0b\xe3\x52\x8b\xcd\xb8\xd1\x08\x88\x1c\x25\xb9\x89\x00\xcf\xc1\xeb\xe8\x11\x5b\x67\x83\x16\xbb\x59\x1e\x86\x29\x7f\xff\x80\xc5\x7b\x34\x41\xf2\xb4\x6e\x88\x49\x59\xdf\xf8\x87\xdf\x73\xb9\xe8\x86\x4b\x61\x25\x1b\x87\xcb\x10\xd3\x63\x12\x90\xc8\x4e\xca\x4c\x1c\x56\x34\xac\xae\x0f\x5d\xc0\xba\x51\xe9\x3e\xd3\xcb\xa9\x66\x69\x69\xc5\xfb\xc3\x4e\xb5\x90\xeb\x43\x95\x7e\x70\xcf\xcd\xe9\xf7\xfd\x88\x84\x3e\xb9\xc6\x56\x63\xd8\x92\x90\x42\x44\xc1\x8b\xe7\xe4\x1a\x2b\x73\x70\x51\x4c\x53\x15\xf3\x43\x12\x92\x2b\x68\xb0\x6a\x8d\xfb\x19\xf2\xe1\x3b\xde\x1f\xbf\x9f\x88\x3f\x10\x3d\x9d\xf1\x1e\x5d\x3b\x0c\x80\x07\xb5\x4b\xb3\xd2\x26\xc9\xfe\x60\xc4\x7b\x0c\x05\x4d\x7a\x5c\x74\xb2\xc4\xbf\x24\x66\xfa\x81\x0a\x2d\xe3\x02\x1f\x63\x64\xde\x9f\x23\xdf\x0f\xc4\x62\x74\xa9\x76\x12\x07\xa5\x04\x33\x87\x38\x2e\x15\x4a\x33\x95\x56\xca\xd6\xb1\x32\x58\xae\xaa\x58\xb6\xac\xe9\x81\x4a\x38\x60\xb2\x29\xd1\x92\xf5\xb1\x33\x93\xfd\x56\x56\x16\xee\x33\x52\x5c\x23\xa5\xda\x93\x23\x8b\x10\x32\x11\x9e\x97\xc0\xa0\xb3\x0e\x4b\x4e\x16\x45\xe0\xa6\x04\x74\xf9\x4b\xd8\x18\x52\x68\x8b\xab\x71\x98\x34\xcd\x6e\x9e\x66\x5f\xfe\xb6\x71\x6a\xd5\x95\x4c\xba\x46\x4b\xd6\xc6\xb9\x75\x09\x9c\xab\x16\x68\xbb\xb8\x88\xe8\x72\xf9\x15\x64\x92\xfa\x58\x95\xbe\x96\x75\xe8\xab\x89\xcc\x23\xb8\xb5\xcf\x87\x92\xd2\x92\xd3\xbd\x2f\x32\x44\x24\x70\xe3\x78\xfe\xbc\x4c\xea\x32\x63\x20\xb4\x04\x57\x2d\xb8\x15\x04\xa6\xc4\x7c\x21\x34\xe2\xe2\xff\x42\xd7\xae\x9f\x68\x1d\x79\x51\xb6\xca\x1a\xef\x8c\xd2\xd5\x99\x47\xa6\xf1\xb6\xda\x0f\x25\xcb\xab\xab\xe4\xef\x95\x04\xb8\xae\x82\x5a\xf1\xb2\xa0\x50\x55\x2f\xa9\x9c\xa0\x56\x15\x93\x25\x8e\xdb\x14\x3d\x36\x96\xa0\x45\xf3\x2e\x82\x52\x6e\x01\x5b\x7c\x91\x5b\xdf\x96\x55\xaa\x9b\x63\x51\xee\xcf\xdf\x67\x85\x1a\xca\xaa\x87\x2f\xd9\x84\xb3\x59\x47\x19\x8d\xd5\xfa\xe6\x89\xea\xcf\x71\xa9\x34\x72\x56\x34\xb4\x95\x86\xbd\xda\x35\x46\x4a\x90\x2b\x14\xa3\xc9\x59\x0d\xda\x17\x93\x29\xc9\xfc\xfd\x52\x3c\x2a\x94\xed\xa8\x2c\x20\x93\x94\x80\x31\x63\x1a\xf2\xfd\x52\xc8\x8e\x65\x7d\x00\xdd\x7d\x69\x5f\xd9\x92\x31\x69\xb1\x96\xc4\xf6\xd4\x98\x58\xbd\xac\x26\x4b\x9b\xaa\x2b\x55\xd5\x5e\x4a\x2a\xa0\xa4\xd6\x8b\xa6\xcc\xfe\x41\xf0\xec\x46\x88\x82\x3d\x98\x29\x12\x94\x35\x24\x48\x8f\xa2\x2c\xcd\xa9\x32\x2a\xe0\x0a\xfa\x67\xba\x75\xb6\x13\xd3\x68\x93\x9a\x5b\x92\x50\x01\x01\x6a\x65\x91\x15\x2e\xe1\x93\x00\x0e\x02\x32\xed\x41\xc7\xdd\x44\xcd\x15\xad\xbb\xf9\xfa\x72\xb0\x6e\xd8\xe9\xae\x21\xc5\xeb\x46\x52\xaa\x66\x24\xfb\xc6\x84\xaa\x1b\x4e\x46\x9a\xa7\x9c\x2f\xf9\xa0\x9a\x97\xf0\xf2\x35\x18\xce\xdd\x25\xad\xc9\x15\x29\x47\xf3\x96\xf5\xce\x56\xe7\x2e\xa6\xd1\x56\xd6\xe6\xce\x81\x4d\xdb\x96\x9e\xf3\x1f\xef\xfe\xd7\xfe\x0f\x8f\xfe\x9b\x3d\xc4\x36\x7d\x49\xa6\xb8\xe5\x63\x9b\x4a\x2e\xde\x0f\xc1\x4d\x5f\x76\x70\x93\x50\x4a\x58\x73\x11\x95\xa4\xb5\x00\x0f\x19\x33\x37\x98\x1b\xeb\x0e\x32\x66\xbe\x51\x5a\xb3\x6d\xc8\xba\x68\x9a\xad\xd6\x90\x27\x53\x9b\xbf\x1e\x32\x65\x6e\x70\xcd\x32\x1a\xb7\x95\x52\x17\xe6\x54\x77\x77\xb5\x6a\x4b\x64\x2d\xec\xb6\x66\x27\x19\x0c\x6d\xc5\xa2\xa9\xac\x07\x2b\xad\x97\xee\xe3\x0e\x97\xea\x99\x1e\x72\xd3\xe9\x83\xf5\x40\x5f\x4a\xc6\xd3\x3a\x1b\xde\x9a\x48\x06\x44\xde\x0c\x5d\x19\xea\xe8\xa5\x88\x26\xed\xa5\x39\xcf\xe4\x3a\x29\xe7\x48\x8e\xdb\x35\xcf\x64\x37\xea\x51\x83\xf8\xd6\x71\x2a\xb4\x35\xd1\xe6\xfa\xf2\x92\x0a\xe1\xec\xdd\x35\x86\x51\xc7\x94\xa4\xeb\xa5\x13\x11\x54\xb6\x72\x1e\xdb\xb4\x97\xbb\xa5\x13\x5d\xe2\x69\x93\x64\xf2\x3c\xc5\xd0\x9a\xc8\xe3\x21\xe1\x68\xd1\x43\xae\x32\xdd\x68\xc9\xae\x31\x9c\xc2\xea\xf6\x58\x77\x0f\xb3\x8d\x65\x57\x2c\x0a\x5d\xab\x61\x29\x83\x94\x72\x4c\x25\x65\xef\xd3\x9b\x7d\x8d\x57\x5e\x0b\xbc\x35\x20\x74\x79\xaf\xb0\x35\xa5\x08\x4d\xad\xcc\xeb\xc0\xb0\x61\xc8\xaf\xa7\x44\x73\xdc\x75\x10\xa3\x69\x2d\xdf\x14\xae\xb2\xf2\xe4\x6a\x88\x52\x7d\xd5\x62\x69\x49\xcc\xac\x7b\xfa\x77\x9a\xcb\xbe\x9d\x58\xd6\xde\x29\xae\x24\x45\xa7\x70\x84\x4b\x7a\xac\x5b\x81\x95\x97\x62\x1d\x4b\xb4\xc6\x9c\xcb\x68\x5d\xdb\xbc\x98\x73\x79\x5b\xb1\xd7\x05\x4b\x79\xa1\x6e\x35\x1c\xc9\xbc\x03\x5f\x0c\x86\xee\xcb\xa1\x65\xb5\xdc\xa9\xaa\x93\x2d\x31\xfe\xec\x7f\xf8\xcb\x7f\xff\xf7\xe9\x4f\xef\xef\x2f\x73\x6a\x0e\x1f\x4b\xe0\xb2\xda\x62\xff\xbb\x30\x41\x97\x98\xee\x41\xcc\x66\x25\x8f\xe7\xc4\x17\xe2\xad\x69\x7f\x75\xb1\x4b\xd6\xb5\x18\xb4\xd2\xa4\x8f\x13\x43\x2c\x49\x4d\xb2\xeb\x2c\xa1\xea\x91\xf0\x46\xfb\x67\x88\x8c\x34\x24\xbc\x49\x15\x60\xfa\x89\x19\x83\x39\x03\xf4\x38\x20\x58\xf7\xec\x91\x79\x18\x33\xe8\x0f\x30\x61\x2f\xe6\x21\xbb\xe9\xd9\x1e\x7f\xed\x0b\xb7\x11\x99\x2f\xc4\x78\xa0\xf2\xe0\xa8\x2b\xe6\x2f\x08\x5e\x0f\x6d\x10\x04\x76\xf2\x48\xc5\xe7\x8a\x66\x61\x3c\x0e\x90\x97\x79\x22\x93\x8a\xe7\x9a\xc1\x88\x12\x0c\x02\xf3\x99\x4c\x63\xe2\x11\x3c\xb4\x6d\xf9\x43\xc4\x99\x25\xbf\x9e\x43\xea\x25\x3f\x24\xfd\x65\xfc\x0e\x4e\x67\xe4\xfa\x0d\x5f\x76\xed\x23\x20\x68\xe0\x5d\x08\x71\xcf\xfe\x37\xe0\xfb\x7d\x79\xf8\x4a\xca\x70\x6f\xe9\x8c\x5c\xf3\x05\x76\xed\x7f\xc3\xf0\x5a\xbd\x94\xa6\x6e\x91\x7e\x96\x23\x40\x80\x77\x2a\xa6\x99\x75\x4c\x30\xd0\x93\x54\x7c\x85\x8c\x03\x9f\x6d\x97\xcc\xc9\x68\x25\x66\x55\xd2\x4c\x45\xd5\xc9\x76\x47\xbe\xaf\x9c\x78\x9c\x5b\x38\x08\x23\x78\x25\xaa\x23\x0b\x72\xea\x65\x02\xcc\xa7\x49\x07\x6f\x65\x6a\x10\x92\x7f\xfe\x5c\x64\xc7\x70\x69\xfe\xb9\x80\xcb\x71\x51\xfe\xf9\x6b\xe5\x19\x06\xcc\x20\xf9\x1c\x81\xe8\xf4\x29\x92\x7e\xb0\xce\x9f\xd2\x3b\x70\x13\x47\x04\xa7\x57\xc4\xec\x00\xf8\xfe\x31\xbf\xb3\xf7\x6c\x44\xfb\x08\x5f\x81\x80\xf7\x36\x98\x10\x2f\xa6\x3d\xc7\xdd\x3d\x14\x53\x8b\x46\x32\xdf\x12\x96\x19\x95\x88\x8b\x38\x59\x28\x33\xfe\x2b\x7f\x88\x24\x7d\xbe\xf2\x87\x20\xbb\x1d\xcc\xa8\xfe\xf4\xb1\xda\x34\xc6\x26\xc9\xb6\x4b\x5f\xa8\x96\xcf\x33\x35\x4d\x93\x76\x89\x6f\xa6\xa3\x52\xe6\xd0\x2c\xee\x5d\x3b\x93\x57\x24\x45\x7e\xd9\x0b\xa5\x0e\x29\xbe\xd0\xd1\x95\x99\x37\x19\x82\xe3\xdb\xc5\x71\x1b\x71\x1d\xc1\x39\xb9\x82\x25\xe8\x76\xd3\xed\x71\x1c\x10\x0a\x4b\xf6\x47\x9d\x5f\x1d\xf0\xfd\x5e\x54\x9a\x12\xa8\xd1\x03\x0f\xaa\x7e\x4d\x4f\x20\xe1\xc6\x92\xba\xf4\x19\x91\xd3\xfa\x6f\x99\x36\x48\x65\x2d\x49\xb7\x23\xbd\x46\xcc\x9b\xf5\x0c\xf4\x19\x3c\x8a\x6f\x24\x17\x3a\xb7\xc2\x06\xcf\xd9\xd5\xb0\xd8\x4e\x47\xbe\xe4\xb3\x15\x29\xf9\xc8\x71\x76\xc6\x11\x04\x97\x3b\xa2\x0f\xc9\xd9\xda\x75\x63\x72\xc1\x7c\x37\x9a\x1d\xb6\xec\x29\xcb\x3d\xf3\x9d\x29\x36\xda\xb2\xaf\x0c\xd3\x4d\xbb\x52\x34\xd4\xa6\x0f\xe8\x38\x8b\x9c\x4f\x15\x6d\x3c\xd3\xbf\x64\x5f\xaa\x75\x1e\xdc\x9c\x89\x55\xfb\xe3\x22\xc9\x8d\x9b\x7d\xf7\x96\xf4\xec\x4d\xe9\x40\xcd\x89\x2f\x75\x1c\xf2\xd7\xb6\xb3\xb7\xd7\xab\xca\xaa\x35\xf0\x02\x08\x22\xe9\x85\x5a\xe2\xaa\x29\x3a\x11\x05\xc3\x9b\x4a\x4f\xcb\x5d\xd5\xc6\xd9\xb5\xad\x9b\xa9\x18\x3b\x95\xc0\x8c\x24\x46\xbf\xd1\x38\x54\x0f\xf2\x19\xe5\x12\x9a\x56\xdb\xbc\xd0\x40\x72\x0f\xc1\x33\x8a\x07\xad\x99\x2c\x26\xc9\xa6\xe7\xa2\xd1\xf9\xc5\xce\x6f\x03\x08\x38\x3b\x52\xfd\xba\x32\xa5\x4b\x7a\xac\x9e\xdd\x84\x32\xcd\x07\x1e\x9c\xea\xdf\x83\x13\xc1\x29\xf6\xf6\xc8\x20\x8c\xe9\x4c\xd2\xb4\xf0\x8e\x6d\xfc\x30\x42\x57\x80\xc1\xbd\x3d\xd4\xfd\x4b\xc5\x52\xf6\xf6\x68\xf6\xdb\x85\xe3\x26\x93\x50\x09\x58\xf0\xe8\xc7\x5b\x99\x80\x26\x4d\xbf\xa2\x27\x78\xab\x8f\x63\x9c\xb2\xec\x45\x92\x32\xdf\x93\x51\xc7\x64\x20\x43\x55\x34\x9a\x8d\xb6\x2e\x91\x29\x31\xd2\xa3\xaf\x6c\x59\x74\x80\xb5\x06\x29\x79\x91\x61\xb2\x2e\x49\x9f\xe7\x58\xa6\x6b\x7c\x92\xe5\x80\x2e\x4a\xde\xf0\xdd\xf7\x5a\x84\x10\xa5\x6b\xad\xf6\xab\x72\x8b\xd6\x67\x36\x6f\xd5\x73\x94\x93\x33\x5f\x82\xa6\xdc\x44\x3a\x4d\x42\x47\xef\xc2\xad\xf1\x2a\x3c\x0e\x9e\x3d\xfb\xee\xf7\xdf\x2f\xcb\xf3\x7c\x68\xaf\xb6\x8c\x93\xdb\x12\xbe\x86\xf6\x7f\xea\xfd\xf7\x8a\xc1\xb9\x88\x00\xa4\x69\x40\xe3\xfd\xb8\x20\xde\x5f\xda\x89\x82\xc6\x88\x44\x89\xc6\x48\x05\x7e\x88\x38\xd6\x17\x32\xd7\x71\x1a\x75\x65\xbc\x3b\xf2\xe7\xa8\x95\xf6\xf3\x1e\x9c\x2b\xb3\xd6\xd6\xd2\x19\xb5\xb6\xaf\xb6\x76\xce\x54\x24\xea\x89\xc8\xea\x52\x7f\xcc\x4a\xa3\xe5\x49\x10\xd3\x72\xcd\xf3\xb1\xea\xed\xa7\x08\xc2\x0a\xe5\x74\x26\x5d\x4a\x83\xe5\x25\xb9\xc4\xd6\xc6\x7f\x95\x4d\xff\x71\x7e\xfa\x3e\xba\x42\xbe\x8c\x69\x68\xad\x8d\xab\x5e\x97\x2c\x35\xad\xb2\x2c\x72\x19\x2a\x16\x85\x37\x62\x28\xb4\x65\xac\xf0\x19\xa9\x5d\x15\xc3\x77\xaf\xcd\xca\xd8\xcf\x15\x9b\xb5\xd2\x7a\x25\xb6\x17\x53\x46\xf8\x43\x7b\x1d\x7a\xf1\x07\x2f\xda\xad\xf0\xa2\x95\x92\xca\xb6\xfb\xce\x66\x04\x4e\x61\x69\x0a\x96\x76\xa0\x95\xb7\x62\x25\xb6\xde\xa5\xc3\xd8\x91\x18\x6f\x53\xde\x62\x47\x41\x60\xf5\xec\x92\xfc\x17\xb4\x98\xb4\xc2\xd8\xbb\xce\x7d\x7b\x01\x16\x96\x56\x69\x0f\x56\x5d\x5d\xdd\xcd\x1d\x2e\xf0\xaf\x24\x0a\x36\xea\xbb\x29\xa6\x94\x5d\xe5\xac\x68\xbf\xfa\x1a\xdb\x35\x47\x5b\x46\xe3\x70\x2f\x7e\x5d\x45\x62\x49\x74\x44\x2b\xd3\x4b\xda\xd3\xdd\x7a\x79\x9d\x40\x12\x06\x1b\xf6\xf2\x4a\x2e\xb2\x39\xe2\xc9\xdf\xff\x96\xa1\x9f\x26\x36\xb1\xc1\xc5\xd7\x3a\xbd\x95\xd7\x3e\xe9\xe8\xae\x97\x9e\x8f\xbb\xe1\xa5\x57\x73\xcb\xad\x7c\xee\x7a\xbf\x96\x85\x5f\xbf\x57\x60\xf6\xcd\x77\x5a\x3e\x16\x47\x5a\x94\x5e\x87\x85\x4c\xea\x9e\xdb\x4f\x0e\x0e\xcc\x3b\xf0\x3d\x8a\x55\x49\xfe\xaa\x3a\xce\x9a\x7a\xe6\x75\xb9\x29\x74\x92\xc6\xec\x92\x54\x48\x4d\xc3\x96\xa5\xc2\x7a\xe2\x3e\x11\x24\xac\x92\xac\x1d\x2c\x9d\xe1\x68\x33\xac\x40\x03\x68\x66\x5f\x5a\x96\x1b\x64\xfb\x6a\x66\x08\x4b\xb2\x05\x99\xe2\x4b\x5c\xe6\x6a\xc3\x78\x66\xd0\xbb\x1c\x93\x4f\x19\x26\xc1\xfb\x4e\x92\xa2\x49\x68\xc7\xd3\x49\x3e\x11\x5a\x03\x1b\xe9\xcc\x4c\x0e\x93\xc1\xf2\xa9\xd4\x0e\x5c\x3b\x65\x2f\x39\x52\xe9\xc2\x4e\xba\x31\x95\xfc\xf3\x27\x75\xb9\xa4\x5a\x74\xba\xf2\xf6\x83\xf3\x90\xdd\x18\xfb\xef\x2d\xb1\x52\x4f\xde\x76\x77\xd9\x1a\xf6\x78\xe7\xde\xd1\xe9\xb0\x4b\xe4\xbf\xe2\x8d\x52\x8d\x44\xea\x9b\xa8\x18\xa5\xd6\x42\xa4\x2f\xe6\x90\x52\x30\x15\xaf\x04\x6a\x5b\xe5\xb6\x92\x77\x1b\xe5\x2b\x98\xcd\x6b\x95\x5e\x7b\x72\xce\xd4\x39\xeb\x46\x02\x4a\x8d\x9f\x74\xdb\x1b\xbe\x76\xa5\x11\x0f\x19\x18\xab\x54\x6c\xb6\xd4\x93\xf2\x87\x11\x91\x48\x42\x20\x20\x53\xfd\x10\xf9\x5c\xb8\xce\x99\x95\x97\xd2\x0e\x88\x4f\xfb\xb2\x77\x4b\xfe\x08\xa6\xf9\xb1\x8d\xac\x59\x4b\x9d\x75\xb2\xdf\x7a\x2d\x46\x87\x8e\x38\x25\x49\x0d\x84\xde\x36\xf0\xda\x3a\xad\xa9\x1f\xd8\xa1\x6f\x51\x61\xb8\xdd\x0d\x70\x42\xa2\x79\x86\x79\x13\x4c\xe3\xf1\x1c\x31\xbb\xb6\xe2\x9c\x72\x3e\xb1\xb3\x12\xdc\xf2\xd2\x1b\x07\xa3\x3f\x8d\x48\x1c\x36\xc1\x9d\xe9\x4e\x69\x68\x8d\x0e\x27\x42\xa3\x97\xf3\x74\x30\x90\xac\x7e\xb6\x63\xc7\x6a\xbb\x21\x1c\xc6\xc6\x16\x63\x37\x21\xb4\x15\xf9\x6a\xf8\x45\x9a\xc8\x99\xf6\xc9\x17\xf6\x14\x21\x9a\x89\x62\x92\x05\x78\xd4\x7c\x95\x2b\x9b\x35\x27\x31\x85\x2c\x02\xa1\x56\x01\x5b\xb2\x95\xda\xb8\x89\xf7\x48\xf9\x1e\xad\x45\x10\x9d\x0b\x47\xac\x2a\x8c\x73\xf0\x2c\xfe\x4f\x7f\x1e\x4b\x89\x21\x89\xc2\x9b\x81\x08\x78\x9c\xc1\x5a\x00\xfb\x16\x8e\x45\x1e\x5a\x8b\xe0\xe0\xa6\x05\xfe\xaa\x05\xda\xbb\xa6\x89\x24\xde\x87\x7a\x11\x0a\xdb\x84\xfc\x14\x96\x5f\xb8\x1e\xf5\x73\x44\x20\x56\x5f\x51\x82\x5c\xee\x2a\x62\x00\x31\x23\x1e\x99\x87\x32\xa8\x29\xc9\x75\xaa\x0e\x0c\x49\x20\xc6\x4a\x3f\x57\x39\x10\x33\x24\x92\x10\x86\x6f\xcc\xc3\xb5\xc9\x64\x52\xa2\x94\xfe\x32\x56\xe4\x95\xd7\x65\x29\x6a\x80\x8a\x91\x30\x18\xf4\x43\xe4\x5d\x66\x18\x6a\x2b\x09\xb0\x22\xbb\x6a\xbb\x2b\x45\x62\x13\xee\xa6\x14\xaa\xc0\x12\x5a\xe9\x6a\x90\x78\x8c\xa9\x7b\xc1\x63\x99\x9a\x65\xc9\x3b\x01\x93\x72\x78\xda\x51\x5b\xb4\x96\x6d\x20\x79\x7b\x15\x8b\x24\xf2\x83\x66\x4d\x3b\x17\x72\x70\x35\x4c\x5b\xfe\x56\x41\xd8\x45\xe1\xf0\x71\x43\xaa\xd5\xca\x1d\xb2\x74\xab\xad\xdb\x6a\xaf\x8b\xb7\xf2\xe5\x76\x85\x99\xa5\x79\xb9\xed\x56\x4b\xe4\xa2\x63\x0b\x13\x0c\x9b\x49\x5d\xcd\xc9\xc8\x01\xbe\x04\x91\x27\x8e\x94\x17\xe6\xed\x05\xc3\x52\x0d\x46\x27\x65\x42\xe3\xbe\x6f\x8f\x8f\xf6\xa8\xc8\xa4\x3b\xae\xc7\x0a\x1f\xcb\xb8\x4a\x1f\x8a\xab\xb4\x71\x91\xe6\xef\xd5\xd5\x26\x97\x0b\xb9\x1d\x4a\xb3\xa0\x74\x63\x1e\xe9\x8d\xba\x98\x82\xb9\x5d\x27\x4d\x3c\xa1\x29\xfd\xf2\x17\xb8\xd5\x53\xd9\x57\x38\x02\x2b\x69\x53\xa7\x52\x37\x05\x3b\xfe\xba\xc5\x45\xa3\x9a\x91\x53\xa5\x31\xca\x88\x42\xc9\xfd\xda\x0e\x23\x32\x0f\x85\xa1\xd1\xd3\x62\x8a\x90\x57\x7e\xe1\x52\xd2\x09\x10\xc1\x18\xf2\x89\xa0\x15\xf5\x44\x76\xaa\xc4\xb3\xf2\x39\x98\x52\x92\xb8\xc0\xaa\x8f\x54\xd5\xf5\xda\x5a\xda\x39\x5f\xfd\x94\x67\x08\xe0\x4d\x71\xdb\xf4\xa3\x5e\x8b\xc0\x2d\x46\x80\x73\x80\x82\x9f\x61\x10\xda\x1d\xc5\x70\x12\xde\x58\x69\x96\x3a\xcb\x4c\x6f\x97\x94\x4b\xa7\xd6\x24\x22\x73\x0b\x7e\x42\x94\x21\x3c\xad\xad\x42\xdf\x8d\x34\xe7\x20\x9a\x22\xdc\x67\x24\xec\x1f\x1e\xd8\x05\x05\x5b\x51\xb7\xab\x03\x49\x96\xe5\x8c\xb6\x99\xcd\xcd\xd3\x4a\xc0\x54\xbb\x91\xf2\xb2\xc4\xe9\xc3\xf0\xe2\xbf\x28\xcb\xe6\x5e\xc0\x62\x73\x38\xde\xba\x01\x34\xc2\x07\x6a\x41\xcc\x85\xd5\xdd\x2d\x90\x69\x5e\xe9\x3a\x10\x33\x85\x56\x96\x4d\x87\x5f\xcd\x76\x57\x32\xb9\xad\xae\x38\x99\x10\xc2\x9a\x85\x9a\x02\x47\xcc\xfb\x91\x25\x0e\x64\xca\x33\x4e\x3b\x92\xf9\x88\xf2\xf5\xb5\x4b\x5d\x96\x52\x6f\x24\x70\xa3\xd5\x81\x35\xbe\x62\xc7\x00\x7b\xf2\xd8\xaf\xd2\x1b\x56\x81\xfd\x38\x0b\x76\x7f\x0a\xc2\x82\x0b\xd8\x1a\x27\x5d\xeb\x3d\x57\x70\xc1\x6a\x98\x75\x52\x87\xa7\xbd\x6a\xaa\x8d\x7b\x5c\xb5\x13\xd0\x46\x72\x78\x6c\x2c\x5e\x75\xc9\x38\xd5\xdf\xe3\x79\xc8\x48\x45\x68\xe5\x26\x1d\x8a\x8b\xc1\x91\xb7\xdd\x40\xfe\x92\x23\x47\x02\x84\x2f\x6b\x62\x34\x10\xbe\xb4\x1d\x97\xcf\xf3\x8c\xbc\x46\xf8\x72\x68\xdb\x66\xc0\xc6\x30\x01\x59\x96\xa9\x54\x05\x6b\x8d\xf4\xeb\x12\x45\xb6\x33\xe0\x7f\xfc\x86\xfc\x9d\xfa\x1a\xc1\x2c\x13\xa8\xa5\x80\xd3\xb5\x81\x39\x00\x1f\xa2\x20\xa9\x2c\x0d\x33\x09\xd2\x53\x20\x45\x50\x15\xeb\x99\xd9\xd1\x2b\x00\x9d\xe6\x3e\x74\x76\xae\x11\xf6\xc9\xf5\x20\x20\x9e\x70\xfb\x1e\xcc\x22\x38\x19\xc1\xb6\x3e\xf1\x8a\x20\xb6\xc4\x25\xfe\xd1\x3f\xa2\xd3\x47\xdf\x1d\x7e\xd7\x2a\xd6\x7a\x99\xfd\x9e\x9b\x6e\xa7\xed\x9e\xe4\x4e\xff\xa2\x76\x7c\x0a\xf5\x97\xbc\xe9\xb3\x21\x57\x69\x8c\x88\xb9\x4b\xcc\x00\xa5\xc1\x60\x00\xa2\xa9\x14\xb9\x54\x78\x95\x8a\x20\x49\xe2\x47\x7e\x45\x6c\x46\x62\x76\x1a\x4f\x26\xe8\x53\xcf\x3e\xba\x76\xad\x53\x0c\xc2\xdd\xf6\xf1\x24\x29\x6a\xb7\x64\xfb\xfc\xd7\xd1\x2f\x97\x3f\xfd\x7a\xda\x6e\xfb\xd4\x1a\xf2\x93\x32\x01\x79\x99\x4e\xc9\x83\xb3\xc3\xbc\xb6\xec\x1d\x09\xe9\xae\x75\x36\x03\xcc\x0a\xc1\x14\x5a\x1e\x89\x03\x1f\x7f\xfc\x86\x59\x63\x68\x89\xbe\x06\x25\xa7\xbd\xe8\x2c\xcc\xf7\xf5\x06\xdc\x8c\xa1\xc5\x66\xbc\x17\x99\xd5\xf0\x86\xc4\x1f\xbf\x89\xa0\x15\x10\x72\xc9\xef\x6a\x13\x12\x59\x88\x5a\x98\x58\x01\xc1\x53\x18\x59\xe0\x0a\xa0\x00\x8c\x03\xf8\xb4\xf5\x28\xff\xff\xff\x5f\x55\x53\x90\x41\x0a\x67\xa8\xb6\x6b\xef\x1b\xb8\x78\xaf\x32\xc0\x13\x2b\x71\x7d\x9f\x91\x39\x14\x33\x2f\x6a\xc1\xb2\xbf\x36\x91\x21\xa2\x48\x89\x9d\x38\x5b\x18\x91\x09\x0a\xe0\x76\xf0\xb5\x98\x36\x05\x7e\xc6\x22\x10\xac\xbe\x50\x8b\x93\x66\x30\xa0\xe0\x4a\x84\xfb\xf3\x53\x94\x8d\xe0\x20\x04\x94\x5e\x93\xc8\x77\xf1\x08\x0e\x3c\x82\x27\x28\x9a\x8b\xa3\x73\xa7\x90\xd8\xdf\x80\xc5\x76\x06\xa2\xa3\x34\xd5\xbd\x3a\xd3\x7b\xce\xe8\xc7\x5b\x05\x03\x3d\x89\x20\x85\x98\xf5\x98\xb3\xb7\x97\x7f\x86\x9d\xbd\xbd\xaa\xae\x65\xcd\xef\x13\x05\x59\x2f\x1f\x38\x2d\x83\xcb\xd3\xf8\x72\x18\x0c\x64\x72\x38\x06\x5f\x61\xc4\x10\x08\x68\xcf\x8c\x2c\xd7\x5e\xb8\x8e\x14\x34\x04\xc2\x8c\x8f\x9b\x82\xc5\x65\x59\xef\xae\xd4\xf3\x25\x9f\x2f\xad\x89\xae\x53\x60\x72\x03\x85\x56\x88\xa5\x85\x65\x1c\x64\x5d\xa9\x9d\xcf\x9f\x4b\xe2\x85\x79\x9b\x41\x40\xa6\x08\xdb\x65\x22\x64\x03\x69\x4f\x21\xfb\x40\x33\x85\x82\xf4\xd8\xa5\x30\x0c\xf8\xd7\x82\x2a\x33\xd5\xdf\x87\x26\xa3\x68\x71\xe8\xaa\x90\xda\x49\x1c\x04\xaa\x16\x46\xc7\xd8\x63\x15\xb5\x90\x3e\x48\xea\x17\x95\x07\x43\x0f\x3c\x33\x6b\x02\x1f\xaf\xe5\x51\xaf\x69\x7c\x4b\x0e\xfa\x27\x2f\x7f\x3a\x9c\xe0\xe8\x2f\xf7\x5b\x90\xc2\xd4\xe0\x57\xf8\x8e\x3d\x84\x54\x35\xf9\xfe\x9e\xbc\x7f\xf7\xf2\xd5\xeb\x17\xf5\xea\x94\xba\xfe\xe0\xa7\x7a\xb7\xaa\x53\x28\xc4\xa7\xc8\xd2\x5e\xdc\x16\xc2\x13\xa2\x8e\x3c\x8b\x44\x16\x3f\x9e\x74\x13\x75\x00\x0d\xda\xa9\x74\xd6\x00\xdd\xcf\xe0\x0a\x5a\xc0\x0a\x65\x9e\x41\x0b\xf9\x10\xb8\x16\x8d\xa7\x53\x48\x35\x7c\x94\x4b\x56\x13\x08\xfd\x31\xf0\x2e\x9f\x5a\x75\x32\xda\x1c\xa0\x80\x91\x21\x8d\x43\xbe\x35\xff\x53\xef\xe1\x81\x47\xe6\x06\x14\x3f\x41\x66\x21\x2e\xbd\xc5\xde\xac\x28\x94\x6e\x5e\x8f\x75\xaf\xae\x96\xa9\xf3\x40\x36\x5c\x47\xca\x08\x29\x2f\xe6\x13\x78\x23\xca\x65\x28\xd2\x90\x1c\x50\xb8\x35\x69\x32\x69\x15\xac\xd0\xca\x35\x93\x8f\xbe\xcf\xff\xe9\xab\x71\x52\xf8\x93\xc8\x34\x70\x55\x48\xa9\x57\xa7\xd3\x54\xed\xab\xb5\x99\x77\xad\x6b\xcc\x9f\x21\x9d\x44\x74\x0a\x41\xe4\xcd\xb6\x43\x42\xef\x54\xd4\x6c\xa2\x6b\xbc\xce\x01\xf3\x66\xcf\x89\xa7\xff\x3c\x4e\x4c\x9f\xe2\xe7\x19\x98\xea\x3f\x5f\x8a\xf5\xb7\xa9\x74\x7a\x95\x1d\x0c\x6d\xdb\xd5\x3d\x0c\x77\x0f\x5c\xb3\x8b\xe4\xf7\x19\x98\x26\x7f\xf3\x4e\xf8\x0f\xde\xcb\x70\xf7\xb0\x1b\x9a\xbf\x64\x51\x56\xcf\x9e\x23\x4d\xec\x21\x53\x77\x92\x5c\x83\x6e\x53\x64\xee\xfe\x36\x40\xf4\x03\x96\x60\xf9\x3d\x38\x60\x64\x60\xac\xe1\x40\xb7\x74\x3e\x7f\xb6\x39\xcb\xb5\x47\xa3\xca\x36\xb9\x75\x69\xd5\xb5\x6a\xdd\xd8\xbd\x6a\x67\x2c\x75\xab\xee\xcf\xc0\xb4\xb1\xeb\x33\x30\x35\xa9\xa6\x55\xbf\xbc\x69\x63\xc7\xbc\x91\x22\xc1\x86\x3e\x79\x23\x67\x6f\x4f\x77\x57\xec\x8f\x37\x30\xd3\xa3\x19\xeb\xcc\x25\xe0\x82\xe4\x3c\xcc\x12\x5f\x6b\x11\x3a\xdb\x6f\x7a\x11\x35\x1e\x77\xcb\xd2\x22\xb6\x54\x7b\xad\x9a\xda\x82\x5b\x22\x69\x23\xf0\x73\x70\xf8\xeb\x87\xeb\x75\x49\xda\x65\xe9\x58\x24\x82\x1e\x04\xf0\xfb\x11\xc0\xdf\x70\xc2\xb6\x5e\xde\x61\x66\x83\x92\xef\x91\x22\x86\x96\xf6\xf3\x1a\xaf\x6a\xe1\xb7\x20\x9d\x14\x14\x65\xf5\x0f\xf5\x63\xe1\xce\xa0\xe4\x27\x73\x97\xa7\x67\x73\x3b\xd7\x9d\x06\x57\xaa\x64\xd8\x86\x62\x12\xca\x27\xc2\xc2\x4d\xd1\x05\xab\x78\x28\x6c\x14\xb3\x8f\xdb\x61\x36\x29\xaa\xb2\x46\xec\x3e\x6e\x8b\x5d\xaf\x45\x45\x97\xad\x45\xf0\x93\x76\x08\xe6\xc2\xe3\x3a\x91\xfb\xa4\x01\xb9\x67\x60\xfa\x05\x53\xed\xb7\xed\x90\x2a\xc4\xf0\x75\x62\xf5\xdb\x06\xac\x1e\x31\x06\xbc\xd9\xaa\x2c\xa1\xc3\xb5\xbd\x6d\xa4\xf8\xe3\x7c\xa4\xf8\xfd\x9c\x54\x42\x1a\xb4\xe0\x27\xc0\xef\x20\x35\x25\xbe\x1a\xba\xbd\x42\xf0\xba\xaf\x85\x8e\xda\xe4\x68\xa5\xf5\x22\xa8\x4c\x60\x79\x12\x11\x95\x06\xab\x2c\x47\xd4\x29\x23\x51\xda\xc4\xb5\xdf\xdc\x9c\xfe\xe3\xf5\xea\xb5\xc0\xca\x90\x7c\x83\x19\xf8\xd4\xb4\x57\x5a\x84\xe3\x4a\xb4\x1a\x1d\x81\x30\x0c\xa0\x35\x06\x18\xe0\xfa\x32\x93\x2d\xfb\x0f\x03\x80\x4c\x62\x38\x9d\x91\x6b\x2b\x82\x34\x0e\x18\xb5\xd8\x0c\x48\x56\x0d\x10\xb6\x00\xb3\x02\x08\x28\xb3\x08\x86\x16\x99\x08\x4b\x28\xbb\x26\xd6\x35\x89\xfc\xfa\xd2\x6e\x4b\x4e\xf5\x91\x9c\xeb\xa3\xfb\x98\xec\x98\xb0\xd9\xc6\x67\x36\x07\x1e\xc2\x8c\xc8\x72\x3f\x77\x37\x37\xbe\x70\x7c\x6a\xd6\xc7\x8f\x92\x9c\x3e\x7e\xb4\x5d\x6b\x1c\x33\x2b\x02\xf8\xd2\xe2\xb7\x25\x6b\x86\xa6\x33\x18\x59\x48\x2c\xf3\x8d\x05\x02\x4a\x92\xef\x3f\x7e\xb4\x13\xc8\x3f\x7e\xb4\x37\x88\xa0\xfe\x16\x61\x48\x20\x08\x13\x76\x87\xd3\x7f\xd4\xfb\x91\xc5\x11\x26\x57\x30\xb2\xfe\x46\x59\x14\xfb\x30\x68\x93\x80\x60\x03\x98\xa0\x19\x54\x00\x2c\x50\xa3\x81\x13\xf4\x43\xa2\xb2\x26\x0a\x6a\xfe\xa4\xc7\x79\x08\xbe\xb1\x44\x22\x49\xc7\x20\x38\xfd\x99\x65\xf4\xa7\x09\x90\xcd\x00\x4e\x1b\xa4\xbd\x6d\x02\xeb\x62\x8c\x7f\xbf\x5b\xfc\x4a\xdc\xd2\xd8\x9b\x59\x80\x66\x37\xa4\xfe\x41\xb3\xbf\x40\xec\xc1\x3c\xc2\xd9\x86\x30\xc2\x17\x90\xcc\x15\x05\xac\x69\x8c\x6e\xb4\x07\x3f\x01\x8f\x59\xe1\x2c\x02\x14\x5a\x79\x70\xac\xde\x84\x44\x5a\xf4\x70\x25\xe3\xca\xf4\x90\xf9\x80\x9f\x59\xd7\x88\xfa\x64\x9e\xdb\xcd\xa2\x09\x26\x88\xa6\x3d\xaf\x31\x6b\xd0\x86\x64\x97\x13\x42\xd9\x34\x82\x5f\xaa\x00\xf3\xf9\x5e\x44\x18\x88\x18\x67\x2a\xc2\x4a\xb4\x29\x06\x62\xed\xdd\xcb\xd4\x36\x2b\xb0\xc8\x99\xed\xfe\x49\x8f\xe3\x29\x21\x53\xb1\xb0\x3d\x4d\xbc\x73\xe4\x45\x84\x92\x09\x73\xac\x3d\x6b\x17\x8d\xe7\x77\x83\x90\x19\xb8\x12\x5c\x50\x02\x24\x4e\x01\x45\xd2\x26\x66\xe4\xc1\x90\x80\x98\x43\x16\x1a\xcf\x37\x79\x7e\x0e\xef\xe5\x00\x15\x8f\x28\x03\x11\xb3\xae\x11\x9b\x65\x0f\xd2\xfc\xe9\xaa\x8f\xd0\xae\x27\xe8\xbd\xf3\xfc\xd3\x7f\xbc\x3e\x85\xd1\x95\x51\x90\xf8\x4b\x62\xf9\xef\xde\x7f\xbd\x3c\xff\xe8\xed\xf3\xaf\x96\xeb\xf3\xb9\xbd\x7d\x77\xb6\x4d\xb7\xd5\xbb\x64\xfe\x7a\xd8\x7f\xbf\x73\xf9\xf7\xe1\x6e\xf0\xb5\xdf\x0d\x72\x6c\xba\x83\x92\xb8\xf0\x6c\xab\x33\xe9\x69\xf7\x2e\x6d\x76\x77\xed\x97\x08\xfb\x56\x3a\x7a\x75\xce\x7f\x6d\x85\x6e\x97\x4b\x4f\x5a\xe9\x95\x66\xff\x4a\x94\xf6\xd1\x20\x4d\xf2\x66\x04\x65\x59\x95\x63\xeb\x1c\xf2\x17\x25\x96\x87\x0a\x6b\xc3\x5d\x7b\x6a\xe5\x5c\x10\x3a\x3a\x6a\xb1\x38\xac\x2c\xb7\x99\xb4\x8d\x19\x0a\xe8\x3e\xc4\x1e\x11\xcb\xb9\x59\x57\xa1\x32\x1f\xae\xdf\xc1\xa7\x76\x91\x13\x25\xbe\xe3\xfc\x63\x51\x07\xef\x5f\x31\xa4\xac\x67\xcb\x49\xdb\xee\xed\x1c\xb2\x19\xf1\x87\xf6\xc9\xbb\xd3\x33\xdb\xf5\x01\x03\xc3\x34\xea\x40\xfc\x3e\xbb\x09\xe1\x50\xba\x85\x2e\xcc\x00\x0a\x15\xe2\xa8\x67\x31\x78\x06\x28\xfc\xcb\xb7\x03\x81\x20\xd8\xb3\x87\xf6\x23\x23\xf6\x41\xa4\x85\x78\x94\x7b\xa8\x9d\x12\x2b\x22\x22\x6d\xe1\xa8\xb5\x4f\x29\xd9\xb7\x1f\xc9\x6e\x3f\xbc\x7f\x75\x4c\xe6\x21\xc1\x10\xb3\x1e\x74\x1e\xd9\x4f\x27\xd1\xe8\x90\xc3\xe5\x71\x9a\x94\x80\x15\x02\x21\xea\x3c\x57\xf8\xd2\x97\xf8\x8e\xa9\x22\xab\x77\xe8\x0f\x96\x0b\x98\x93\xd8\xd5\x49\x08\x06\x9c\x89\x48\xdf\x22\x99\xd7\x83\x44\x3d\xfb\x3c\x54\x00\x8c\xfc\xf1\x0c\xd0\xd9\x85\xed\x0c\x14\xd7\xd8\x39\xd8\x1d\x8d\xa0\xaa\x37\xb5\xb7\x67\xdf\xde\x0e\x9e\x3f\xe3\x6d\x16\x0b\x9b\xbf\x69\x1b\x8f\xb0\x3a\x20\x92\x12\x6f\xfd\xb1\xa8\x62\xd9\xba\x1b\xde\xda\xe8\xc6\x95\x1d\x0f\xa1\x2b\x98\xa7\x70\x2d\x94\xf9\x44\x87\xf6\xd9\x0c\xd1\x34\xa8\x0b\x09\x36\xe9\x41\x7d\x94\x51\x0b\x04\x81\x45\xe2\xc8\x62\x10\xcc\x93\xac\x0e\xca\xc1\x07\x04\x01\xb9\x3e\xc2\x04\xdf\xcc\x49\x4c\x8f\x3c\x0f\x52\x3a\xdc\x3d\x74\x27\x28\xa2\x0c\xab\xc2\xaa\x01\x48\xff\x16\x74\xcc\xff\xd0\xb4\x3b\x84\xda\xaf\x0a\x11\xfc\x77\x78\x23\x1a\xc9\x72\xeb\x6d\x67\xab\x9a\x1b\xd3\x5d\x64\x9c\xb5\x72\xd5\x2d\x45\xce\x4b\xb3\x7c\xe8\x18\x78\x97\xd3\x88\xc4\xd8\x97\xe9\x86\xfb\x6c\x06\xe7\xb0\x7f\x78\x70\x60\x3b\x6e\x02\x83\x40\xdc\xc8\xfe\x15\x06\x1e\x3f\xb6\x19\x11\x62\x42\x16\x6f\x82\xfb\x2d\x5c\x1f\x36\x8e\x9e\x29\xa8\x59\x07\x40\xb7\x9d\xb8\x25\x2e\x64\xfe\xf7\xd1\x1f\xef\x4e\x7e\xf7\xdb\x17\x90\x16\xe7\x2b\x9f\x81\x9e\x55\x5f\x31\xd8\xcd\xfa\x44\x2f\x7b\x58\x9a\xb8\xee\x74\x56\xf2\x95\x45\x78\xda\x7c\x5a\x2a\x57\x5b\x4c\x18\x9a\x20\x59\x7a\xe9\x4e\x8f\x4b\xb3\x70\xa5\x51\x18\x39\x16\x5b\x5c\x7b\x40\x0a\xe8\x6e\xf4\x43\xfb\x14\x5c\x41\x5f\xd6\x3c\x7e\x85\x27\x24\xdb\x4a\x3c\xb1\x7f\x25\xd1\x25\x3f\xfd\x45\xa3\x5f\x41\x84\xb3\x8d\xc4\x13\xfb\x25\x40\x01\xf4\xf9\x16\x9b\x42\x26\x9b\xbe\x88\x22\x12\x65\xdb\xca\x47\xf6\x07\x0c\xc6\x81\xd8\x8f\x7c\xa9\x2d\x6f\x06\xf0\x54\x94\xc8\x73\x09\x7e\x26\x32\x8f\x88\xac\x22\x9c\xf6\xb9\x0c\x48\x02\xc8\x79\x74\x4f\xd6\x46\x3e\x93\x1e\x86\x55\x2d\xda\x6e\x3e\xbd\xaa\x85\x83\x70\x93\x7b\x2f\x7b\xfa\x75\xa4\xbf\x2d\x61\x14\xc1\xd5\xbf\x4e\xfd\xc3\x7f\xbe\x69\xc7\x28\xbe\xcd\x3b\x88\x26\xce\x9a\x82\x4b\xd4\x28\xab\x54\xaa\xbe\xbf\xba\xf6\x38\xca\x04\x45\x67\xae\x39\xec\x9a\xb4\x69\x35\x8b\x20\xac\x8f\xb3\x7e\x16\x21\x3c\xd5\x47\x04\x13\xf4\x79\x8d\x70\xff\x1a\x61\x8b\xc6\xd1\x15\xba\x02\x81\x45\x59\x04\x18\x9c\x22\x48\x79\x43\x88\x69\x1c\x41\x2b\x8c\x88\x38\x3a\xa0\xe5\x93\x39\xc2\x52\x98\xb3\x8e\x98\xbc\x92\x62\x5f\xbb\x46\xf8\xe0\xc6\xb5\xa6\x44\xc5\x85\x5f\x83\xc8\x77\x2d\x20\xf2\x75\x60\x12\xcd\x41\xa0\x35\xba\xd4\x82\x57\x24\xb8\x82\xbe\x4c\xfc\xa5\x22\x68\x11\xc1\xd6\x7f\x59\x88\x5a\x44\xde\x75\xa3\x18\x5f\x83\x1b\x4b\x5d\xb4\x2c\x46\x78\x87\xd4\x02\x1c\x46\x08\xe6\x01\xc2\xd0\xb7\xbc\x80\xc4\xbe\x45\x49\x10\x4b\xa0\x3e\x50\x18\xe9\x0e\x61\x72\xdd\xb2\x10\xb6\x22\x08\x82\x3e\x43\xfc\xfa\x8b\x82\x40\xea\x95\xe7\x71\xc0\x90\x30\xc3\x92\xd8\x9b\x85\x04\x89\x64\x64\x24\xb2\xc8\x64\x42\x67\x84\xe3\xab\x7d\xb0\xfc\x03\x7a\x57\x47\x6f\x83\x86\x39\xbb\xcf\x92\xbb\x74\xd3\x3e\xb3\x9b\x72\x3f\x09\xc9\xc6\x2f\x4f\xfa\xd4\x90\xd1\xe9\x54\x9c\xe4\xb5\x29\x9d\x0c\x7e\x6f\xbb\x87\xf5\x91\x50\x9d\x52\x5c\x75\x98\x57\x75\x52\x2b\x31\xbf\x86\x49\x7e\x10\x51\xf1\x5d\xa6\xf9\x78\xcd\xd3\x6c\xe0\x7e\x2d\x9b\xb4\x4b\x00\xb6\x54\xe2\xaf\x95\x28\x44\xc9\x2a\x0d\x51\x72\xeb\xa5\x8d\xa5\xa6\xfb\x4f\xc8\xaf\x56\xf5\xf3\x6d\x45\x2c\x5c\xee\xda\xfe\xe9\xea\x5c\x76\x6d\xd2\xd8\xd5\x4c\x96\xcb\x8f\xdb\x3f\xd9\xf7\xaa\x88\x5a\xe5\x5c\x9f\x43\x99\x03\xbe\x76\xae\x42\xfe\x5d\xf7\x64\xef\x72\xf7\x6f\x32\xfd\xdf\xb6\xb3\x82\x65\xe6\x9e\xb2\x84\x75\x1c\x22\xf7\xc7\x17\x96\x5b\xf7\x8e\xb9\x2e\xb7\x92\x49\x2c\x33\x73\xc5\x2c\x1a\x26\xfe\xa7\xe2\x18\x99\x02\xf1\x6b\x62\x1c\x8d\xd5\xb9\xbf\x30\xce\xb2\x0c\x8e\x1a\x19\x4c\xab\x62\xd9\x5f\x16\x17\x5a\x8e\x96\x6a\x99\x91\x26\xa5\x08\xc9\x0a\x6f\x5f\x3a\xbb\x5a\x06\x45\xf5\x5c\x4b\x61\xc8\x64\x5a\x5f\x1d\x63\xb3\xcd\xd4\xda\x49\x24\xb3\xc6\xb1\x0f\xa2\x4b\x03\xc5\x11\x40\x54\x5d\x8b\xa3\x29\xb4\x5d\x7b\x2c\x1c\xd9\x65\x10\x9b\x80\xce\xad\xf8\xb7\xca\xa6\xce\xca\x56\xba\x55\xdd\xfc\xda\xf5\x6d\xb1\x72\x05\x29\xb7\x72\xd9\x4c\xed\x6b\xc3\x7d\x7d\xa3\xb3\xa9\xd9\xa9\x65\xd7\xb1\x96\xf3\xa9\xbd\x98\x77\x9e\x4f\x9b\x79\x64\xf9\x72\x4b\x30\x9f\x6c\x33\xda\x8d\x4b\x7f\xcb\xe9\x7c\x7b\xe7\x58\x4f\xf2\xfe\xb4\x07\xf2\xbb\xfb\xc3\x79\xa5\x7c\xb3\x3c\xca\xab\x67\xd3\xec\x9e\xb4\x85\x8c\x36\x55\xd3\xa5\xbf\x1f\xb8\xec\x03\x97\x7d\xe0\xb2\x0f\x5c\xf6\x81\xcb\xae\xce\x65\x73\xac\xf5\x81\xcb\x3e\x70\xd9\x07\x2e\xfb\xc0\x65\x1f\xb8\xec\x86\x95\x06\x29\xb3\x7d\xe0\xb3\x0f\x7c\xf6\x81\xcf\x3e\xf0\xd9\x07\x3e\xbb\x7e\x9d\x41\xf2\xcf\x03\x93\x7d\x60\xb2\x0f\x4c\xf6\x81\xc9\x3e\x30\xd9\xf5\xab\x0c\x1e\x98\xec\x03\x93\x7d\x60\xb2\x0f\x4c\xd6\xc4\x39\x6f\xc4\x50\xb8\x7e\x76\x6b\xbf\x85\xd7\x2d\x2a\xc7\x7f\xa5\xac\x77\xcb\xe4\xdb\xbb\x3d\x26\xbf\x10\x56\x75\x27\x24\xf5\x10\x8f\xf3\x10\xee\xf4\x80\xde\x07\xf4\x3e\xa0\xf7\x01\xbd\x0f\xe8\x7d\x40\xef\x03\x7a\x1f\xd0\xfb\x80\xde\x07\xf4\x3e\xa0\xf7\x01\xbd\x0f\xe8\x7d\x40\xef\x03\x7a\x1f\xd0\xfb\x80\xde\x07\xf4\x3e\xa0\xf7\xeb\x40\x6f\xb5\x52\x79\x99\x94\x79\xf9\xbc\x63\x9d\x92\xe6\xc5\x22\x92\x98\x56\x26\xcd\xbb\x93\x64\xa3\xdd\xab\x82\xab\x4a\xf3\x55\xaf\x31\xbc\xa6\xba\x6c\xb4\x6d\xbb\x08\x23\xd6\xcb\x16\x2d\x1e\x0c\x06\x20\x9a\x8a\xf4\x93\xd4\xd9\x51\xf9\x62\xd3\x94\xb4\x72\xf4\xc1\x15\x8c\x44\x41\x7b\xc7\xc5\x25\x6f\x55\x72\x4c\xdb\x19\x30\xf2\x9a\x5c\xc3\xe8\x18\x50\x3e\x3a\x11\x6d\x5d\x3a\x7a\xc4\xa9\xf6\x39\x60\x70\x27\x4d\x45\x0b\x7e\x07\x9f\x7a\xb7\x71\x14\x0c\xed\x19\x63\x21\x1d\xee\x27\x79\x19\x07\xf4\x49\x1f\xc6\xfd\x6b\x48\x59\xff\x70\x00\xe6\xe0\x0f\x82\xc1\x35\x1d\x78\x64\xbe\xcf\x67\xb4\x6f\x0f\x3c\x82\x3d\xc0\x7a\xd8\xb5\xf7\x65\x4a\x4e\xfe\x0b\xba\xf6\x60\xc6\xe6\xc1\x53\x6f\x3c\x4a\x9f\x52\xc7\x65\x22\x3d\xee\x4f\x2f\x54\xf6\x5c\x99\x2d\x97\xb7\xb4\x5d\x2a\xe3\xe8\x87\x66\x5a\x3a\x22\xa7\x87\xe8\x73\x48\x59\x44\x6e\xa0\x6f\x3b\x9f\x3f\xe7\x9f\x8a\x14\x83\xfc\xb1\xa8\xef\x6c\x60\xda\x76\xa1\xb3\x58\xb4\xce\xaa\xa9\x29\xef\x1e\x13\xfb\xb5\xae\x3a\x7d\x12\x11\x3f\xf6\x98\xf5\x16\x5e\xd3\x7c\xde\xd0\xe6\xbd\xb5\x25\x09\x01\x7f\x78\xf5\xe4\xc5\xef\x87\x7f\xfd\xe7\xba\x8a\x4f\x67\x8b\x46\xdb\x2d\xab\x4c\xd7\x57\x8c\xae\xc9\x32\xff\x07\xc1\x50\x56\x01\xae\x32\x9e\xd5\x7e\xf9\xd8\x2e\x29\x90\xd1\xf0\xa1\x08\xcb\xb7\x64\xde\xd8\x69\x04\x6e\xfa\x7f\x3d\x38\x28\xeb\xe6\xe3\x47\x96\x24\xab\xd5\x16\xcd\x6c\xd9\x10\xcd\x2a\xb2\xf6\x45\xeb\x85\x7c\x5c\xf1\x91\xe6\x3e\xb9\x8f\x7a\xe3\x18\x05\x7e\xc5\x37\x11\xbc\x42\x25\x1f\x39\x75\x09\xe8\x97\xc0\xe6\x93\xe2\x3a\x34\x25\xb2\xb7\x1f\x4a\x8a\xb7\xfb\x3e\x5f\xa8\xf5\xe8\xd9\xbb\x0f\x67\x85\x55\x6a\xdd\x1b\xfc\x54\x35\x8f\x1c\xe5\x86\x8a\xc9\x29\xb6\x65\x81\x08\x5a\x11\x0c\x20\xa0\x42\xc6\x82\xff\x8a\x21\x66\xc1\x8d\x10\x6d\xc6\x84\xcd\x8a\x5d\x49\x39\x0a\x60\xdf\xa2\x30\x98\xf4\x67\x84\x0a\xf1\x29\xa6\x8c\xcc\x61\x44\x07\x25\x90\x6f\x66\x4e\x3f\x73\xb9\x0c\x60\x0b\xf9\x10\xb8\x16\x8d\xa7\x53\x48\xc5\x46\x23\x91\x25\x2a\x43\x4c\x20\xf4\xc7\xc0\xbb\x7c\x6a\xa9\xa1\x40\x66\xa0\x59\x04\x27\xa2\xe2\x00\x0a\x18\x19\xd2\x38\xe4\x4c\xfb\x3f\x93\x73\xda\x23\x66\x39\xe5\x9f\xa0\x10\x0d\x85\xf4\x57\x94\xa3\xef\xa2\x48\xc4\x36\x54\x88\xc8\x1c\x91\xae\xfd\x9a\x93\x10\x4b\x68\x8a\x8b\x09\x82\x30\x14\x71\xd5\x94\x8e\x38\xc2\x98\xc4\xd8\xab\x2a\x16\xdd\x6e\x23\xab\x71\xfb\x7c\xdc\x9a\x5d\xac\xd2\x96\x98\x42\xcc\x85\xee\xae\xdb\xa6\x07\x0d\x7b\xde\xa4\xc8\xa7\xd6\x69\x86\x22\x37\x45\x8c\xbb\x1b\x23\xb9\x0d\x54\xc9\xc8\x0b\x4b\xe5\xb7\x98\x9d\x82\xa4\x15\x41\xca\x6f\x81\xb9\x6b\x0b\xe4\x82\x50\x3f\x79\xb7\xa9\xeb\x4b\x22\xd6\x37\x49\xbc\x42\xc8\xad\xca\x47\xee\x11\x3c\x41\xd3\x7d\x88\xaf\x50\x44\xf0\x5c\x52\xe1\xc6\x8b\x3b\xa4\x77\x2d\x5d\xda\x62\x98\xde\x52\xf4\x23\x7e\x65\x70\x23\x42\xd8\x87\xf7\xaf\x8d\xd7\xea\xc9\xc2\x19\xcc\x41\xd8\x4b\x40\x55\x62\xb4\x98\x6c\xcf\x9e\x90\xc0\xe7\xc4\xe1\xde\x86\x80\xcd\x86\xf6\xbe\xbd\x70\x5c\xb3\x81\xf6\xcc\x52\xef\xd5\xcf\x7c\x23\x0c\x82\x1b\x86\xbc\xb4\x9f\xf4\x49\x49\x7f\x57\x88\xdd\x64\x7a\x14\x0f\x72\x0d\x25\x64\x49\x33\xba\x3f\x94\x4f\x7e\x43\x7e\xf2\x27\x0d\xe2\xa9\xbd\x70\x2b\xe6\x46\xb5\x97\x59\xd2\x87\x7e\x90\x1b\x4a\x88\xda\x49\x2b\xf1\x6b\x7f\x28\xfe\xf7\x1b\xf2\xed\x85\x93\x6b\xae\x4b\x22\x34\xc3\xb6\xef\xef\x27\x45\x1c\xc4\xbb\xe4\x47\x13\xe4\x59\xac\xab\xdf\xfb\xc3\x10\x4c\xa1\x84\xc9\x5d\x6a\xa6\x5a\xf2\x4c\x5b\xa6\x4f\x3a\x2c\x54\xae\xa9\x14\x1e\xd0\x1f\xb0\x64\xfc\xaa\x29\x4a\xcd\x4d\x90\x7c\xa1\x7f\xe7\xba\x16\xd2\x7d\x0a\xad\xfa\x99\x6b\x34\x8d\x48\x1c\xa6\x8d\xd4\xcf\x5c\xa3\x98\x9a\x74\x2e\x7f\x95\x92\x5c\xda\x48\xff\xce\x63\x7b\xce\xc2\x74\xa6\xfc\x47\xae\x81\x3a\xd8\x92\x36\xfa\x77\xae\x19\x26\x0c\x79\x29\xce\xd4\xcf\xfc\x32\xc4\x6c\x96\x2e\x01\xff\x51\x68\xe0\x23\x66\xb4\xe0\xbf\x0a\xe4\x21\x0b\x43\x25\x8b\x23\x7e\xe6\x1a\x21\xcc\xe0\x54\x2a\xe7\x52\x0c\x64\x1e\xe6\x77\x0d\xf0\x2e\xe3\x14\x11\xea\x67\xbe\x11\x0a\x02\x21\x9a\xe8\x56\xea\x77\x81\x86\x74\x3d\xa1\x84\x7e\x8a\x7d\x51\xe8\xc5\x91\x49\x63\xfc\xe7\xfe\x90\x91\x4b\x58\xe0\x48\xbf\xc7\xf3\x90\x91\x94\x6e\x10\xbe\xdc\x1f\xf2\x87\xbf\xb1\x9b\x10\xaa\x3f\x8b\x1b\xa9\x04\xdb\x95\x7b\x94\xa6\xdd\x53\x4a\x2a\xe0\xb8\x84\x37\x5e\x40\x40\xca\x5d\x92\x07\x79\x42\x17\x75\x73\x12\x78\xc5\xaf\x02\x79\x46\x53\xc2\x0c\xea\x14\x3f\x0b\x3b\x9c\x42\x66\xec\x6e\x0a\x59\x05\x68\x5c\x74\x8c\x99\x39\x24\xff\x99\xc7\xf9\x0c\x98\x28\xe7\xbf\xf6\x87\x9c\x93\x09\xf6\x36\xa4\x30\x42\xc5\x4d\xeb\x81\x94\x82\xf8\xdf\x85\xc5\x0e\x23\x32\x41\x01\x34\x37\x88\xf8\xbd\x0c\xdd\x02\xcf\x23\xb1\x10\x4e\x13\x3e\xa5\x1e\xe4\x1a\x2a\x15\x6c\xd2\x4e\xff\xce\xf3\x09\x2d\xfc\x6a\x4e\xa1\x7e\x17\x37\x6f\x7f\x42\x62\xec\xa7\x47\xe7\xbf\x5f\xa3\xc0\xf7\x40\x24\x8f\x8c\x56\xd2\x06\xdd\x07\x61\x18\x20\x4f\xab\x6c\x0a\xd2\x11\x45\xf3\x30\x80\x7d\x51\xc8\x4a\x95\x44\x31\xbe\xe8\x8b\x4e\xfa\xe2\x45\xb1\xd4\x18\x86\x79\x19\xc5\xc5\xeb\x92\x52\x48\x99\xae\xce\xac\x99\xb2\x92\x6a\x38\x44\x18\x43\xbf\xea\x2d\x97\x7b\x82\x53\x59\xe3\xb5\xaa\x8d\x59\x0c\x0b\x36\x69\x95\x99\xa1\x37\x56\x90\x0d\xf4\xff\x39\xe6\x21\x66\x1c\xe1\x24\xb2\x9d\x9d\x62\x65\x34\xa5\xd6\x71\x06\x63\x42\x58\x0f\x0e\x18\x88\xa6\x90\x71\xf1\xd9\xb5\x6d\x55\xf0\x0c\x8e\x7e\xbc\x45\x13\xc9\x5f\x92\xde\x86\x7a\xbd\xec\xdd\xd1\x88\xed\xed\xe5\xde\x26\x9c\xa2\xf4\x6d\xe0\x83\xb0\xfc\x0d\xdf\x71\xbb\xfc\x39\x1c\x94\x95\xa7\xda\xdb\xdb\x2d\x6a\xc9\x05\xbf\xe5\xd8\xb2\x9d\x8a\xf7\x9c\xd7\xca\x06\x4e\x01\x05\x0a\x57\xb6\x63\x62\x0b\xe6\x67\x0b\x34\x1c\x42\x07\xed\x2c\x34\x11\x1c\x19\xdf\xf8\x3d\x87\xe3\xa9\x16\x40\x55\x7b\xac\x11\x3e\x41\xad\x69\x53\x93\x6a\x6c\x67\xe0\x05\x10\x44\x47\x41\xd0\x2b\x1a\x16\x72\x2d\xa7\x90\x9d\x4a\x48\x5f\x31\x38\xef\xd9\x10\xb3\xe8\xe6\x43\x14\xd8\xce\xce\x6f\x03\x44\xdf\xc6\x01\x27\xb1\xcf\x9f\xf9\x8f\x0f\x58\xee\x2b\x5f\x3c\xe9\xd5\x8f\x5e\xd1\xab\xfb\xdb\x00\x61\x2f\x88\x7d\x48\xf9\xb6\x94\x45\xec\x6c\xc7\x59\xa4\x55\xfa\xae\x51\x10\x9c\x25\xb5\xd7\x86\xc6\x09\xf5\x86\xc4\x14\xb2\x08\x84\x03\xc1\xfa\x7b\xce\xc2\x85\xa2\x4e\x90\xb8\xa1\x48\xcc\xec\xf6\xe0\xde\x5e\x2f\x5b\xea\xc7\x35\x7f\x32\xc7\xc5\xc9\x35\x02\xd1\xa3\xdf\xc1\x27\x49\x3b\xb2\xe4\x10\xac\xa2\x91\x64\x89\x9c\xe6\xc9\x0b\xd4\xbb\x0d\x55\xe4\xf2\x15\x88\x48\x19\x23\x95\x67\x10\xfa\x03\x46\x8d\xdc\xd4\x07\x0c\x64\xda\xff\x4e\x09\xee\x83\x10\x6d\xfe\xf2\x99\x5c\xe4\xa4\x81\x14\xfd\x01\x87\x62\xa4\xd1\x8f\xbd\x5b\x51\x35\xf1\x16\xf9\x43\x36\x40\xbe\x34\x08\x41\x59\xe2\x50\x70\x11\xc0\x58\x84\xc6\xfc\xb4\x18\xb2\x45\x9b\xa3\xc5\x9c\x21\xdf\x55\x53\x12\xdd\xf4\x43\x18\xcd\x91\xdc\xa7\xe5\x37\xdc\x2a\x3c\x6e\x0b\x6a\xae\x67\xe4\x95\xff\x54\xfd\x7f\x78\xb0\x66\x3c\xe9\x9b\xd9\x03\x9e\xea\xf1\xc4\x6f\xa0\x7d\xd3\x26\xf0\x25\xa2\x08\x71\xfc\xa0\x0d\x21\x67\x2e\x8c\x3c\x5f\x34\x5e\xd8\x40\x6f\x87\x57\xeb\xe6\x47\x02\x45\x21\xc4\x52\x61\xfd\x45\x63\x69\x13\xd4\xf3\x85\xa3\x64\x93\x84\x13\x11\x06\x3d\x06\xfd\xbe\x54\xcb\xf4\x43\x10\x31\xe4\xa1\x10\x08\x03\xca\x97\x8d\x35\x39\xa5\x57\xfe\x23\x36\x88\x29\xff\x63\xcd\xc8\x13\xe1\xdb\x5f\xd4\xd1\x26\x07\xe2\xa2\x39\x1e\xd9\x07\x76\x72\xef\x1a\x20\x7f\x6f\xaf\xc7\x3f\x45\xbe\xe3\xa6\xd8\xc4\x4d\x18\x6b\xe1\xf2\x62\x4e\x9f\x2f\xc3\xf6\x63\xe9\x2e\xf8\x13\xbf\x51\xd3\xfd\xfe\x14\x52\x16\x47\xc2\x2a\xd8\xd2\x3e\xa2\xa5\x6e\xfd\x65\x59\x67\x9b\xd0\x4f\x08\x7b\x65\xa2\xa1\x00\x94\xa2\x29\xfe\xfc\x59\xfe\x9a\xc3\x68\x0a\xc5\x8d\x8f\x8e\x48\xef\x76\xe1\xde\xc6\x14\x1e\x83\x90\x43\x33\xdc\x3d\x5c\x38\x3b\xfc\x39\x4d\x4b\x16\x0f\x34\xa8\x8e\x58\x0d\x34\xc2\x85\xd5\x30\x7a\xa0\x83\xf4\x47\x06\xb9\xa8\x16\xb9\xa2\xba\x7a\x67\xbc\xf2\xaf\x72\x7d\x6c\x4e\xdd\x53\x9c\x76\x83\x0e\xa7\x8d\x96\xa6\x41\x4b\x34\x23\x94\x19\x06\x2d\x10\xa2\x9f\x09\x65\x2e\x06\x73\x28\x18\x5a\xf6\xdd\x5b\xfd\xd8\x9d\x41\xe0\xc3\x88\xaa\x6e\x3d\x32\x0f\x63\x06\xfd\xa2\x6e\x47\x99\xdf\x33\x5a\x0b\x7f\x20\x95\xa5\xee\x2d\xbf\xba\xea\xf2\xe5\xb7\x0b\x45\x55\x75\xaa\xa2\xba\xee\x52\xc5\xd1\xde\x5e\x0f\x8a\x26\x24\x42\x7f\x08\xc6\x31\x62\x8e\x0b\x17\x0b\xc7\x9d\x01\xec\x07\xf0\x3d\xa4\x21\xc1\x54\x71\x40\x16\xdd\x08\x18\x48\xe7\x81\x05\x07\x73\x5c\x3a\x62\xe7\xf6\xa7\x7e\x5a\x57\x9a\x01\x16\xf3\x8d\x87\x72\x2f\x12\x4f\xa6\x1d\x34\xe9\x7d\x7b\x70\x28\xeb\xbc\x67\xb5\x1a\x48\xea\x39\xb4\x7a\xa2\xac\xec\xbe\xd2\x58\xd8\x6d\x55\x00\xe5\xa5\xfb\x85\xd2\x43\x69\x01\xdc\x6f\x0f\x1e\x73\x60\xf6\xf6\x6c\x61\xa8\x16\x6a\xaf\xec\x9c\xe2\x31\xf5\x22\x14\x4a\x36\xac\x14\x44\x34\xe3\x24\x0a\x02\xe4\xdb\xee\xee\xa1\xd2\x39\x64\xf0\x98\xc1\x9b\xd0\x80\xf1\x59\xbf\x98\x87\xec\xa6\x47\xf5\xcf\x14\x09\xd4\xd1\x64\xf1\xbf\x4e\xdf\xbd\x1d\x84\x20\xa2\xb0\x47\xf9\x6e\x97\xbe\xd3\x7b\x7b\x44\xb8\x9d\x92\x68\x34\x1a\x41\xf5\x27\x7f\x08\xfc\x39\xc2\xe2\x99\xf8\x4b\x3c\xd2\x76\x52\xf9\x58\xff\xe2\xaf\xae\x10\xbc\xfe\x40\x61\x24\x5f\x25\xbf\xd6\x86\xd6\xc5\xc2\x03\xcc\x9b\xf5\x70\xb6\xec\x33\x76\x16\xa6\x82\xaf\x4c\x69\xda\x4e\x29\xa3\xd8\x52\x18\x96\xdc\x88\x94\xc7\x72\x41\x65\x3d\x47\xc2\x61\xa5\xbd\xd5\xdd\xc5\x2e\x59\x17\x93\xa3\xea\xc4\x38\x95\xb0\xa7\x1e\xa8\xbf\x83\x4f\xab\x70\xb9\x4b\xef\x28\x66\xb3\x1a\x1e\xc8\xb9\xda\xd0\xb6\x5d\xc5\xe0\x86\x76\xe2\x43\x4c\xf2\xcc\xcf\x71\x21\xf6\x85\xfb\x7a\x5d\xab\x8c\xe7\x31\x29\x65\x92\x42\xe3\xa7\xb6\xfc\x8b\xb4\x4b\x97\x44\xd3\x57\x3e\xff\x43\xf8\x10\xf1\x3f\x54\x23\xfe\xa7\x36\x16\x0f\xed\xc3\x83\x83\x03\xdb\x9d\x43\x4a\xf9\xc4\x6d\xdb\x55\xce\x93\x43\xfb\x98\xcc\xe7\x31\x16\x86\x63\xb1\xe9\x86\xbb\x07\x6e\x99\x1e\x7a\xb8\x7b\xe8\x72\x72\x3c\x89\xc8\x15\xf2\x61\x34\x14\xce\x4b\xfc\xc9\xb1\x58\x74\xf9\x5b\x12\x40\x1c\x41\xd1\x4f\xa2\x62\xe4\x1f\xa7\x3a\x5f\xfe\x6b\x0e\x3e\x9d\x81\x29\x1d\x3e\x71\xa9\x5c\x8d\xa4\x5f\xdb\x76\x13\xe7\x09\x9b\xc2\x60\xc2\x8f\x15\xdb\x95\x76\x9d\xa3\x2b\x80\x02\x30\x0e\x44\x1f\xa2\x88\x2d\x6f\x3f\x85\xec\x19\xa0\xf0\x43\x24\x8c\x07\x72\x3b\x9c\xa7\xbb\x4e\x2f\x81\xed\xb8\xf0\x62\xf0\x3b\x41\xb8\xc7\x11\xbe\x70\xa5\x05\x80\x53\xa4\x90\x30\x38\x8b\x4d\x3e\x4a\xbd\xa8\x9c\x1d\xad\xe2\x96\x2c\xca\x40\x82\xed\xa2\xc1\x91\xf1\x7b\xa0\x1d\xff\x84\x56\x58\xea\x9a\xf5\x0d\x6b\xc0\x8f\xb9\x81\xd8\x48\xa7\x30\x80\x1e\x23\x51\xcf\x3e\x0f\x15\xf5\x8f\xfc\xf1\x0c\xd0\xd9\x85\x2d\x74\xb1\x74\xd4\xf5\x2b\x7d\xa8\x38\x2e\xdd\xdb\xb3\x6f\x6f\x07\xcf\x9f\xf1\x37\x8b\x05\xe7\xbe\x54\x33\xc0\x96\xbd\x2a\xe2\xb8\xc8\xd9\x4f\x28\x64\x6a\xb3\x22\x48\x7b\xb7\x92\xe2\xd4\x1e\x64\x22\x24\x63\xc6\xe6\xc1\x29\x98\xc0\x9e\x9d\x78\x40\x9e\x0a\xd3\xb0\x53\x41\x53\x19\x1a\x39\x48\xa8\xd2\x50\xd4\x3f\x35\x28\x74\x08\x17\xe6\x79\x50\xcd\x4d\x95\xb1\xeb\xf4\x97\x93\x81\xf2\x57\x12\x0b\x98\xb0\x4a\x38\x82\xd9\xf8\x82\x01\x8b\xd0\xbc\x67\x76\x2e\xe4\x33\x67\x20\x5c\x34\x29\xeb\xd9\x61\x3c\x0e\x90\xb7\x3f\x97\xb6\x23\x61\x25\xa2\xd2\x4a\x54\x82\x1b\xaa\x7a\x12\x04\xa3\x0f\x6a\xd7\xbe\xb2\x1f\xa5\x03\x24\x71\x10\x66\x5b\xc5\x5d\xec\xe2\x79\x20\x98\x89\x6e\x78\xc6\x29\xdf\x38\x57\xc4\x4e\xe0\x3d\x69\xa3\x3b\x3f\x83\x9c\x65\xd7\xee\x54\xf4\x61\x69\x62\xb1\xf8\x59\x26\x22\x14\x6a\x16\x31\xdd\xdb\x07\x2b\xae\xd1\x8e\x21\xb0\x90\xd4\x9e\x22\x45\x1b\x79\xc8\x93\x8c\x51\x29\x37\x04\xe7\x27\xb0\xdc\x56\xe3\x12\x69\x3d\x92\xfb\xdc\x05\x46\x30\x49\x72\x5f\x4d\xef\x11\x8c\x8b\x0b\xbd\xee\x11\x25\x9c\x44\x06\xbf\x53\x82\x45\xec\x88\x66\xeb\xc0\xc9\x44\x27\x48\x3b\x26\xa7\x08\xe1\x6d\x28\x09\x5c\xc7\xc6\xb8\x44\xbd\x81\x98\xc1\x28\x8c\x10\x85\xc9\x2b\x3a\x42\x8a\xab\xe9\x48\x19\x17\xe8\x47\x09\x49\xed\x20\x49\x4e\x49\xcf\xd2\x75\xd4\x76\x99\xe3\xaa\x57\x69\xd7\xfa\x1d\x49\xde\xe5\x78\xad\x90\xc3\x04\xe2\xa2\x91\x69\x68\x7a\x0b\xaf\x7f\x91\x23\xf6\x80\xcb\xdc\xdd\x03\xc7\x0d\xaa\x1b\x10\xde\x60\xc7\xd8\xcd\xa3\xd1\x88\xee\xed\x45\x7b\x7b\x95\xa3\x1e\x38\xae\xfd\x22\x81\x53\x7d\x10\xd4\x7e\xb0\x70\x5c\x2a\x8d\x95\x6a\x93\x40\x61\xa1\xec\x1d\xa4\x57\x44\xa7\x67\xff\x9b\xd8\x30\xfd\x00\xe1\x4b\xb1\xc7\xe7\xe4\x8a\x9f\xed\x07\xa3\xd1\xa8\x57\xe4\x0d\x11\x0c\x03\xe0\xc1\x9e\x6d\xd9\xae\xdd\xb7\x8d\x07\xaa\x47\x5b\x5a\x8e\x05\x0b\x71\x06\x01\xc4\x53\x36\x53\xbb\x6f\x47\xaa\x44\xd4\x76\x06\x94\x42\xf6\x06\x84\x21\xc2\x53\x55\x84\x3d\x21\x10\xe8\x5c\xfc\x47\x0e\x4c\xce\xa5\x6d\x67\x00\xc2\x90\x0b\x36\xdf\xfc\x8d\xc3\x6b\x21\x7f\x64\x1b\xe0\x5b\x11\x0c\x46\x36\x65\x37\x01\xa4\x33\x08\x99\x6d\x49\xd1\xf1\x9b\x34\xae\xe9\x1b\xfb\xc7\x6f\x1c\x67\xc1\x8f\x49\x81\x13\xda\xd3\x87\xa4\xd5\x8a\xdf\x89\x68\x38\xe1\x62\x31\x87\x6c\x46\x7c\x19\xfe\xb4\x48\x6d\xe5\x30\x27\x62\xd2\x5a\x11\x73\x0c\xe8\x9d\x85\xed\xe4\x65\x43\xc4\xa9\xe9\x0a\x04\xfa\xba\x2d\x2e\xcb\x2e\x3f\xf9\x7b\x64\xc4\x5c\x3a\xc2\xa6\xff\x10\x9a\xf4\x64\x9f\x9c\xf2\x3e\x7f\xa6\xfd\xbe\xf5\xe3\x81\x73\x2b\x62\x98\xe6\x90\xc4\xac\x87\x38\x4b\xe1\x77\x3e\x38\xf0\x40\x10\xf4\xb8\x10\xe4\x28\x41\x9d\xdf\x06\x67\x11\xb9\xb6\xe8\x88\x2f\x2b\x23\x92\xd1\xf6\xa4\x95\x34\xd3\x09\x6b\x13\xff\x94\x22\x50\x45\x53\xdd\x7d\x50\x61\x1e\x9d\xea\x46\xa6\x1e\x97\x8b\xcc\xa9\xbb\x41\x63\xcc\x60\x72\xbe\xf1\x3b\xe0\x73\x98\xdc\x11\x7b\x6a\x43\x8b\xc0\x31\xe8\xdc\x26\x62\x8c\x38\xc6\x46\xf0\x91\x6d\x7d\xb6\xcc\xb3\x35\x0b\xd7\x40\xdf\x2a\xa5\x9f\xbd\xd1\xd9\x11\x3d\x99\x45\x7c\x93\x17\x3b\x6d\xdb\xd9\x23\xdb\xb2\x1f\xc1\xb4\xcb\x5f\x11\x9b\x91\x98\x9d\xc6\x93\x09\xfa\x54\x06\xac\x68\x9a\x9f\x20\x74\x6e\x73\x7b\x9f\x6f\xbc\x73\x0c\xe6\x70\xe4\xa7\xed\x2e\x4c\x6e\xd5\xab\x75\x67\x70\xf6\xf6\x7a\x2d\x66\xa1\xae\x04\xc2\x5f\x81\x7a\x11\x09\x82\x33\xa2\xcf\x27\x3c\xca\xc2\x04\x9d\x01\x99\x4c\x84\x9b\xc2\x4e\x76\x38\xcc\x85\xd6\x1c\xef\x62\xf3\xc0\xb5\xc6\xc4\xbf\xe1\x1c\x0c\xa3\xb9\x88\x99\xd3\x43\x84\x43\x3c\x60\x24\x5c\xb8\x8f\xbf\x3b\x70\x16\xee\x35\x40\xec\xd4\x18\xdd\xd8\x1c\x3d\x67\xf4\xa3\xa4\x18\x03\xbc\x85\x7b\x08\x9f\x38\x0b\xd7\x27\xd7\x38\x20\xc0\x7f\x89\x82\x8c\x06\x9a\x1f\xeb\xcf\x02\x32\xee\x9d\xc3\x0b\xf7\x56\x86\x6c\x32\xf8\x89\xed\x8b\x40\xcd\x85\x90\xe8\x15\x4b\x56\x21\x78\xfc\xc6\x9f\x7f\x32\x98\xd3\x53\x70\x05\xdf\x45\xef\x42\x88\x79\x77\x4e\x63\x8b\x1e\x76\x99\xb3\x03\x03\x0a\xf3\x12\xb7\x17\x41\xc0\xe0\x8b\x40\x44\x8a\xf4\x6c\x60\xf3\xfd\x2e\xd8\xf6\xc8\xf6\x11\x0d\x03\x70\x33\xb4\x30\xc1\xf0\x3f\x6c\x37\xf9\x88\xa3\x4f\xb1\xff\xe3\x19\x0a\xf8\xba\xee\x48\xed\x92\x82\xe4\xc3\xfb\xd7\xaa\x67\xb9\xd1\x3f\xbc\x7f\xdd\xc3\xbc\x67\x71\x08\x10\xbe\x9b\x15\x8a\x46\xcc\x85\x03\x2f\x40\xde\x65\xaa\x6d\xe0\x5f\x47\xf0\x8a\x5c\x1a\x5f\x13\x27\x37\xbc\xa4\x37\x3d\x7c\x4b\xbd\xbc\x64\x54\xda\x99\xa1\x5a\x31\x6f\x9c\x08\x77\xa7\x8e\xef\xc8\xb5\x56\xd5\x27\x08\x81\xb4\x52\x9d\xe0\xfb\xe9\x9d\xb5\x78\x1c\x87\x84\x9f\xc5\x29\x1e\x6f\xd5\x35\x4f\x86\x1d\x73\x21\x53\x86\x21\x0f\x85\x6a\x8b\x8a\x03\x06\x4d\x6e\xf8\x42\x19\xae\x6c\x05\xa7\x39\x0e\x91\xed\x0c\x52\xeb\x8d\x31\x04\x2c\x71\x9a\xd3\x1f\x84\x31\xe5\xe7\xda\x42\x0a\x13\x1f\x28\x8c\x7e\x41\x14\x8d\x25\x57\x6e\x14\x29\xf4\x18\xd2\xbc\xb5\x6f\x48\x3e\x95\x92\x85\x02\xfd\xfc\x42\xc3\xc4\xf9\xce\x51\x14\x81\x1b\xe9\xb1\x05\x47\xe7\x17\x8e\xcb\x46\x50\x04\x4d\x6c\x68\xae\x72\xb6\x47\x41\xb0\xda\x2c\x5d\xfb\xe9\x04\x05\x0c\x46\x23\x10\x04\xf6\xf6\xcf\x99\x82\x2b\x98\x5e\x55\xa0\x0a\x59\xf7\x4b\x9d\x2a\xab\x70\x90\xcc\x9e\x19\xf3\x3d\xf9\x70\x66\xbb\x5b\x43\xc8\xbe\xc8\x8e\xdf\x6d\x69\x4b\x49\xf7\xf9\x8b\xd7\x2f\xce\x5e\xd8\x8a\x5c\x4e\x12\xe3\x2d\x5d\xb6\x6f\xd7\xde\x37\x4c\xc0\xf7\x44\x30\x19\x2b\x74\x97\xfd\x22\xb4\xdf\x2b\x4c\x5d\xd9\x43\xee\x74\xd2\xd2\x8a\xdc\x7e\x87\x40\xf6\x0b\x82\xd7\x62\x9e\xf2\x3e\xb1\xcc\xce\xc8\x2c\xf3\x53\xc1\x35\x8c\x94\x13\x70\xc9\x8d\x83\xf5\x3a\x9c\xc6\xf3\x39\x88\x6e\x56\xe5\x5d\xfb\x54\xf6\x53\xb3\x24\x50\xa2\xe4\x58\x75\xf2\x46\x98\x3d\xe9\x0c\x85\xa6\x37\x6b\x9b\xd1\xe7\xe2\xcb\xa7\x73\xe2\xc3\x51\x39\x07\x79\x77\xda\x8d\x85\x08\x4c\x3c\x57\x72\x8d\x02\x10\xc1\x8e\xe4\xa9\xe5\xa2\x56\x27\x17\x54\xd8\xe7\x88\x2c\xc3\x48\x77\x7c\x74\x38\x36\xf9\xe0\x13\xc8\xbc\x99\x18\xfe\x39\x60\xa0\xd5\x80\xe2\x93\xfd\xe5\x8f\xe9\x5b\xfd\xe9\xf0\xfc\xc2\x9d\x27\x93\xe5\xbf\x14\xf5\xc8\xac\x3c\x23\x7e\x5b\x96\x2d\x37\x78\x86\xa5\x3a\x3d\xfd\xe1\x08\xbb\x6c\x90\xc2\xc5\x79\x43\xf2\xc3\x65\x03\x05\xe3\x08\xea\xbf\x5c\xd6\x2a\xf5\x4a\x2a\xef\x12\x72\x89\xf2\x2e\x17\xd2\xf8\xaf\x5e\x15\xdb\xde\x7b\x18\x6d\x02\x51\x1a\x27\x59\x2a\xad\x4b\x8b\x9f\xdc\x56\xdb\xad\x66\x50\x16\xa5\xd3\x2b\xaf\xa2\x69\x56\x63\xec\x4a\x6f\xae\xfa\xde\x55\x78\x6b\xfd\x6d\xa0\x56\xd2\x37\x18\x50\xab\xcd\xa8\x97\x83\x76\xd9\x81\xb5\xfb\x27\x5d\xe0\x56\xfb\x67\x20\xd5\x58\x70\xf4\xa3\x61\x69\x50\x41\xd7\x4e\x2e\x0a\x60\x3f\x8d\xaf\x72\x5c\xe8\x24\x12\xf3\xb3\x1b\xc1\x81\xba\x4d\x58\x9f\x81\xed\xa7\x2d\x51\x2e\x4e\xff\x93\x88\x7c\xba\x51\x77\xe2\x9e\xbe\x2e\xa9\x35\x39\xea\x9d\x5f\x18\x8c\x61\x1d\x12\x43\x47\x9c\x9a\x58\x85\xab\xc9\xd8\x25\xf4\x51\x10\xb2\xab\x8f\x43\x29\xf5\x9a\x04\xa9\x2c\x12\xa5\x64\xd7\x08\x0d\x2b\x15\x83\xfd\x58\x7a\xdb\x41\x2d\x1e\x49\xdd\xc5\xad\x58\xdf\x57\xfe\x10\xba\xa9\xfb\xe9\x90\x25\x3f\x44\x2a\x03\xbc\x68\x8f\x82\xfd\x64\x20\x3b\x2f\x23\x94\x61\x80\x08\x0c\x00\xdf\x3f\x01\xd3\xac\xe3\x62\xd9\xe4\xb9\x78\x06\xa6\x90\xd6\xac\x89\xb8\xa5\x63\xe5\xdd\x98\x1b\x8c\x39\x25\x72\x0a\x1f\x5f\x5a\x2f\x34\x08\xd2\x31\x42\xba\x35\x90\xa7\xf6\xd3\x68\xc4\xa2\x18\xda\x43\xfe\x97\xf4\xa2\x51\x96\xab\x5a\x18\x0d\x37\x02\x66\x24\x2d\xd3\x80\xcb\x5d\x40\x21\xeb\xe1\xc1\x1c\x32\xe0\x72\x52\x73\x85\x43\xcc\x2b\xac\x1f\x0e\x90\xef\xd4\x18\x42\x51\x0b\x12\xc3\xe5\x73\xee\xc4\xac\xa4\x77\x75\x47\x46\xa5\x84\x2e\x8e\xd4\x76\xb2\x5d\xfd\x82\x57\xb3\x9d\x32\xd6\xb1\x93\xbf\x91\x74\x64\x25\x1d\x66\xbc\x48\xe7\xd9\x52\xb6\x6e\x4d\x35\x2b\x9d\x30\x5d\xa6\xa0\x27\xf0\x06\x72\xe9\x74\xad\x93\x70\x6d\x65\xa7\x5f\x79\x32\xca\x17\xaa\x0b\x19\x0a\x85\x75\xca\x62\x15\x2d\x9a\xfc\x6f\x59\x36\xa3\xf1\x40\xca\x39\x4d\xe9\xae\x73\xcb\xd8\x72\x02\x58\x6b\xe6\x97\x21\x91\x46\x00\x71\x95\x52\x44\x68\x91\x23\x88\xcd\x71\xcf\x2f\x5c\x32\xfa\x6d\x30\x41\xd8\x7f\x85\x7d\xf8\xa9\x07\x33\xf6\x40\xed\xb1\x21\x07\xe2\xc0\x0c\xf8\xf9\x38\x1a\x09\x23\x19\x1d\xc1\x73\x72\xb1\x33\x21\x51\x4f\xba\xfb\x92\x47\x87\xff\x81\xfe\xa6\x5a\x4b\x4b\xac\xed\xec\xed\xf5\xd0\xee\x88\xbf\xfb\xfc\x19\x9e\xa3\x0b\xa3\xaf\x00\x5e\xc1\xc0\x76\x76\x47\x23\x5a\x7c\xea\xec\xed\xed\xf6\xca\x3f\xf8\x5b\x69\xfb\xff\x40\x8f\x1e\x39\x58\x92\xc4\x2d\x7f\xc3\x0f\xb9\xec\xf7\x1c\x78\x57\xb4\xcf\xbf\x51\x9d\xf4\x0f\x53\x09\x05\x67\xee\xad\xef\x75\xee\x8f\x86\xe3\xda\xb5\xf7\xd3\x34\x21\x9d\xce\x6e\xb9\x4b\x92\xad\x69\x0c\xb8\x04\x9d\x74\x04\x03\x37\x82\xf1\x1c\x4d\x26\x1d\x76\x52\x15\x2c\xc6\x73\xdc\x6a\xb3\x99\x60\x19\x49\x3f\x45\xc6\xb4\xcc\xa5\xdb\xe0\x00\xb6\xed\x2c\xdc\x88\x04\xc1\x18\x78\x97\xe9\x21\x7f\x3f\x80\x0b\x51\x48\x21\xf4\x0c\x8c\x03\xf8\x6e\xa2\x52\x73\xad\x7e\x4a\x3e\x55\x3c\x67\x74\xb0\xe5\xe7\xa5\x37\x03\x78\x2a\xb8\xde\xa9\x48\xbb\xe7\x75\xe0\x7e\x54\x7d\xb1\x6e\x19\x30\x85\xe9\x35\xdf\xfc\xed\x01\x52\xbc\x62\xbd\xd0\xf0\x2b\x1b\x63\xc0\x9b\xcd\x57\xa5\x0c\x90\x76\xd3\x45\x85\x5b\xe4\xfb\xbb\xbb\x70\x6f\x0f\x0e\x84\x33\x66\x14\x7b\xd2\x47\x5b\x2a\x1b\x16\x3d\xe8\x3c\x65\xc3\x8e\x44\x93\x42\xd6\x81\x74\xe4\x81\x99\xe2\x66\x35\x71\xc5\x40\x4e\x85\xe4\x95\xb3\x24\x70\x21\x89\x5c\xc1\x63\x12\xde\x9c\x89\x64\x15\xad\x1c\x78\x54\x12\x2a\xba\x2f\x13\x5c\xd4\xb8\xef\x6c\x64\x77\x76\xbe\x18\x2f\x5c\x8f\x84\x37\x26\xab\x5c\xa7\x3c\xc8\xfb\xce\xf0\xcf\x02\x77\xdc\x9c\xa0\x3b\x27\x57\x70\x53\xf3\xe2\x7d\xdf\xd7\xbc\xae\x88\xb8\xd9\xa7\x87\x9a\xbd\x93\x49\x06\x92\x77\x39\xc9\x86\x6d\x38\x25\x21\x32\xba\x69\x4c\x61\x24\x24\x25\xd3\x95\x22\x0b\x8b\x54\xf0\x95\xe4\xfb\x00\x98\xe0\x57\xfc\x53\x32\xda\x35\x3c\x64\x0a\x61\x21\xfc\x11\x54\xce\x7a\x3f\x8e\x0e\xff\xf2\x34\x13\x9f\x84\x09\xfe\x20\x22\x3b\x33\x4e\xc1\x99\x81\x8b\x8e\xa6\x6a\x68\x97\x38\x0b\x19\xb2\x76\x2b\xa3\x43\x87\x44\xe0\xaa\x4e\xa7\x21\x0d\xfd\xca\xe9\xae\xc4\xd0\xe0\xda\xfb\xbc\x0b\xdb\x29\xe7\xe9\xb4\x8a\xa7\x4b\x45\x6e\xb3\x8b\x81\x6c\x67\x97\xf7\x0e\x4b\x6f\x16\xb9\xf4\xe7\x0b\xc3\x1f\xc7\x64\x95\xd5\x23\xcb\xbf\x93\xa6\x59\x3d\xe7\x42\x9b\x30\xb4\xf4\xdb\xd1\x8a\xd1\xc9\x58\xa3\xed\x17\xfa\xa3\xe1\xed\xc2\x4d\x6d\x72\x94\xff\x8c\x48\x00\xc5\x1f\x2a\xcb\xdc\xf0\xfc\x42\xfd\xc9\x1f\x06\x08\x5f\x8a\x47\xca\x05\x57\xfc\x6d\x30\x7a\x65\xf7\x68\xcb\x31\x93\xb0\x6c\x67\xa7\xec\x23\xb1\x07\xb1\x76\x05\xaa\xed\xb4\x18\x49\x0c\x07\xc6\xcc\xf8\x2e\xa9\xe8\x9f\x98\x84\x9f\x51\x91\xcb\x34\xee\x3d\xdb\xe8\x27\x71\xad\xa6\xed\xe6\x98\x83\x48\x20\xd7\xd9\x29\xfb\x58\xc0\x42\xb5\xdf\x36\x54\xa1\xd7\xb4\xcb\x51\xa4\x53\x53\xb6\x62\x6b\x2e\x18\xc1\x81\xb1\x72\x1b\x15\x2e\x0c\xb7\x73\x85\x18\x61\xa2\x32\x10\x3b\x22\x2e\x93\xe8\x19\x51\x57\x07\x9e\xd3\x11\x4a\xfe\x1e\x21\x71\x75\x7e\x76\x23\xf4\xc6\x2e\x56\x23\x49\x0d\xab\x08\x2e\x18\x08\xe2\x1c\x41\xf9\x7f\x97\x69\x57\x72\xfe\x48\xff\xe9\x32\x73\xce\x23\xe0\xb2\xbc\x5a\x4d\xec\xaa\x12\x65\x46\x69\xc4\x8c\x4b\x47\xbb\x87\x2e\xe2\xff\x00\xfe\x4f\xc4\xff\x09\xf8\x3f\xde\x68\xf7\x50\xcd\x3a\xf5\x5f\xc4\x05\xff\x45\x2c\xfc\x17\xf1\xc8\xb6\xeb\x62\x32\xe4\x4e\xe7\x67\x56\xd6\xcd\x86\x92\x38\xca\x18\xd1\x71\xc3\xd6\xd7\x86\x27\x61\x20\xd8\x49\x54\x0e\x13\x12\xbd\x00\x12\x05\xb7\xf5\x33\xe2\x9d\xf8\xad\x8e\xd6\x01\xff\xbf\xb3\x53\xd6\x58\x90\x85\x2f\x49\x3d\x6e\xaf\x9b\x12\x5a\x5b\x67\xa7\xec\x0b\xd1\x63\x2c\x7b\x9c\x67\xe6\xc8\xb9\x80\x48\xea\x91\x99\xa4\xc4\x45\x87\x69\x34\x71\xa7\x16\x38\xc9\x4d\xa3\x19\x31\x8a\xc4\xe5\xd1\x2a\x35\x41\x6e\xa8\x9f\xaa\x70\x59\xc7\x9d\x8d\x44\x9a\x81\xd4\xa2\xe2\xf2\xc1\x86\x58\x26\x4d\xf6\x5d\x72\x8d\x61\x34\x84\x03\xf1\x7f\x7d\x11\x93\x28\x19\x86\xa3\xd1\x88\x0c\x8e\xc5\xb3\x53\x06\x18\x1c\xa8\x37\x9f\x3f\x57\xbe\x7a\x0b\xaf\x55\x2f\x47\xd7\x00\x31\x84\xa7\xef\xe1\x15\x82\xd7\x25\x9d\x71\x32\x8f\xe4\x5b\xf5\xc9\x7b\xf8\xbb\xc8\x95\x51\xd2\x58\xbf\x72\xf9\x7c\x7f\x06\xf4\x38\x03\x69\xbc\xb7\xd7\x5b\x12\x5a\x27\xdb\x63\x0e\xea\x78\x6f\xaf\x1e\xf0\xcc\xc7\x09\xfc\xa5\x9f\xe9\xb7\x0b\x77\xd2\x82\x1c\x92\x64\x33\x33\x67\xa7\xac\xbd\x20\x86\x89\xe3\xce\xc5\x5f\xf2\x2e\xc8\x7f\xe7\x08\x60\xb7\x62\xe6\x7b\x7b\x2d\x1b\xbe\x85\xd7\x22\x12\x6f\xf7\xc0\x8d\x46\x71\xa1\xff\x3a\xe4\xec\xed\xf5\x10\xff\x2e\x68\xf3\x9d\xc6\xce\xde\x5e\x0f\xe4\xa9\xb8\x9a\x1a\xbc\x11\xd8\xdb\x8b\xf9\x11\xc2\x37\x45\x28\x88\xdd\xcf\x13\xbb\x2f\x89\x3d\x76\x15\x4e\x87\xf3\x1c\xa1\xd3\x72\x92\x45\x79\xb2\x04\xe5\xd4\x17\xd5\x92\x50\x50\x41\x23\x9e\x7e\xfe\x16\x5e\xf3\x03\x45\xf7\xe6\xcb\x88\x21\xfe\x88\x8b\xde\xea\x71\xf5\x7d\x22\xb9\x24\x38\x0b\x77\xd6\x82\xb0\x8c\x2c\x58\xa1\xb3\x53\xf6\x85\x20\xad\x19\x5f\x32\x83\xb4\x66\x5c\x28\xc0\xf9\xe3\x30\x44\xb8\x93\x82\x64\x3f\x44\xb8\x5c\x14\xcd\x5f\xd3\x78\xef\x31\xee\xdc\xbf\xf8\xa4\xc1\x31\x31\x33\x06\xc1\x27\x08\x67\x55\x61\x9d\x66\x23\x6f\x9e\xe6\xb1\xeb\xa3\x48\xea\x1c\x46\xe5\x6a\x8d\x92\x99\x76\x70\xae\x81\x57\x5c\x6e\x1c\xc7\xf4\x9e\x62\x87\xe4\xc3\x17\x1c\x0a\xe8\xbb\xb7\xe2\xaa\x46\x67\x66\x32\x47\x13\x7d\x2c\x42\xd3\x29\x8c\x06\x20\x0c\x83\x9b\x9e\x0c\x37\x4c\x03\xf2\x5d\x95\x01\x61\x0c\xab\xbe\x27\xb8\xea\xd3\x18\x37\x7f\x3c\x99\x54\x7c\xdd\x21\xca\x48\x4b\xcd\x45\x5f\x26\x91\xc8\x44\xa4\xa9\x6c\xed\xce\x7f\x27\xa9\x4d\xb6\xc2\xa1\xdf\x8b\xa3\x08\x62\xf6\x52\x5e\x0d\x45\x50\xbc\x79\x93\x14\x0f\xda\xc5\x41\x99\xb7\x80\xdb\xc5\xa2\x5d\xa8\x80\x10\xfc\x37\x18\x27\xd0\xe9\x2e\x25\xd4\x97\x12\x13\xad\x98\x59\x67\x87\xc3\xf5\x81\xba\x0e\x67\xa7\x24\xfd\x8c\x31\x8e\x58\x8e\xd4\x9e\x17\x07\xc1\xee\x08\x3e\xc5\xf0\xda\x2a\x89\x7f\x86\xce\x50\x7c\x1a\xc1\x80\x00\xbf\xb7\x9a\x7f\x50\x0e\x99\xab\x38\xe0\x2f\x5c\x15\x74\x66\xda\x27\x4a\x5c\x84\x73\xca\xc8\xa5\x2d\xc5\x1d\x5c\xf2\x6b\x48\xc6\xe8\x90\xe0\x31\x01\x91\x9f\x81\x5f\xe9\xda\x64\x8e\xf4\x36\xbe\x4e\xda\xa6\x92\x41\x9c\x91\x50\x6c\xdf\x40\x22\x93\x48\x93\xcb\xd8\x72\x16\x35\x0a\xfa\x4d\xf8\xba\x77\xdb\xc9\xe6\x06\x11\x91\x7e\x88\xbe\x24\xd1\x18\xf9\x3e\xc4\x22\xcd\xb0\x23\x14\xaa\xed\xb3\x08\xd7\x6d\xb0\x4c\x4e\xe1\x64\x87\x75\x8d\xa8\x28\x21\x50\x53\x63\xb5\xce\xd0\x02\x38\x40\x3e\xdf\x11\x7d\xfb\x11\xff\xb3\x98\xa5\xbc\x95\x62\xae\x4b\x60\x4e\x06\x19\xad\x64\xb7\xf6\xe8\xe8\xc2\x1e\x24\x9b\x17\x9b\xa8\x1e\x0e\xe3\x78\xca\x02\x81\xf0\x15\x62\x40\xa5\x32\x68\x7b\x6e\x31\x1d\x7f\x71\x6c\x1e\xb7\x2a\xd8\xbf\x98\xd9\xdb\xb0\x03\x98\x71\xf9\x59\x8e\x2a\x40\x96\x69\x13\xcc\x4e\xf9\xc2\x54\x27\xb4\x28\x1a\x01\xf4\xbe\x62\xce\x4e\x41\x9d\x52\x65\xe5\xb0\xed\xd1\x68\x84\xa5\xc6\xeb\xc0\xd6\x8a\xdd\x02\x0b\xcf\x2e\x99\x8a\x90\x69\x76\x04\x30\x28\x5b\x12\x6a\xbc\x22\x9d\x96\x6a\xb2\x15\x89\xe6\x33\xc6\xe4\xd4\xc4\x58\xdc\xa5\x16\xee\x1c\x60\x30\x85\xad\x79\xe3\xbe\x6c\xbf\xdd\x2c\x72\xe1\x4e\x23\x80\xd9\xbb\x6b\xcc\x6f\xaf\x7a\xd2\x1d\x78\x95\x9c\xe4\xbe\x50\x49\xd5\x5e\x16\xbb\x64\xf4\x9a\x06\x64\x0c\x82\xfb\x4a\xb8\xb0\x46\xd1\xbc\x21\xfb\xa0\xca\x8a\x50\xed\xf5\x9f\x14\xa1\xad\x17\xe0\xe5\x99\x54\xe3\xc5\x7f\xfa\xe6\xec\x44\xe6\xbc\xca\x57\x3f\xc8\xed\x6f\x44\x7f\x12\xb8\x3f\xf2\xe7\xe2\x24\x6b\xa4\x02\xb9\x54\xfb\xaa\x60\x51\x5d\x94\x15\xb8\x82\x06\x18\xf0\x4e\xe0\x68\xf0\x28\x17\xa1\x66\x63\x23\x67\x43\x03\x4c\xad\xa1\xc9\x64\x0b\xac\xf4\xc6\xe2\x30\x95\xc4\x5f\xbd\x46\x1e\xc4\x14\xae\x0f\x9a\x40\x76\x58\x0d\x48\xd1\x2d\x4c\x1c\x54\x1a\x90\xc6\xb5\x5a\x01\x92\x64\x85\x0c\x48\xe4\x8a\x41\xed\xdf\x93\xe4\x6b\xdb\x10\xed\xaa\x8a\x4c\x0d\xb4\x6b\x80\xb1\x21\xda\xcd\xc1\xd1\x40\xbb\xf4\x06\x7b\x7f\x57\xf5\x5b\xd6\x47\x2a\x7a\x1b\xdd\x60\x6f\xdf\x28\x2c\x55\x89\x9b\x5c\x68\xc8\x0d\xf6\x5e\x3f\x3f\x3a\x59\x3b\x3c\x81\x0f\x42\x01\x54\x7b\x58\xc2\x48\xa8\x74\x05\x38\xeb\x23\x60\x13\x1e\x35\x42\xab\xf8\x8d\x8c\xd2\xa2\x80\x36\x51\x75\xea\x54\x28\xd0\x37\xc5\x9f\xc5\x10\xfb\x4a\x49\x5f\x4b\xec\x11\x44\xc2\xa7\x79\xa3\x80\xa8\x41\xf2\xb8\xe3\x84\x2d\xab\xbc\x19\x22\x48\x4e\xf3\x70\x12\x91\x39\xa2\xb0\xd7\x63\x2e\x4e\x12\xad\xb4\x00\xd1\xcc\xbf\x56\x45\x00\x9f\x3f\xe3\x5e\xd1\x47\x21\x29\xf4\x9f\x26\x65\xa4\xd5\x22\x72\xab\x5c\xbd\x2e\x1a\x19\xc9\x35\x5d\x5b\x89\x3c\xfb\x72\xf2\x4f\x45\xab\x6c\x11\x7f\x20\x32\xc4\xfc\xd7\x9b\xd7\x3f\x33\x16\xbe\x97\x58\xdd\x01\x03\x12\x42\xdc\x53\x84\x87\x1c\x57\xd4\xc8\x51\x6f\x7f\x16\x39\x8a\x7b\xb6\xf2\x9b\xed\x73\x0e\x6b\xbb\xc5\xeb\x3f\xff\x2a\x52\x19\x81\x79\x9b\x91\x3d\x0e\xc8\xd8\x76\xc1\x80\xc8\x34\x2c\xd9\xf4\x52\x8f\x0f\x0e\x46\x23\x39\x7d\x49\x4e\x19\x15\x92\xee\xc8\xc5\xb5\x79\x64\x70\x69\x1e\x99\xba\x34\x32\x89\xef\x08\xe0\x58\xd7\x19\x8c\xf5\x1c\x8d\x4c\xbd\x13\x14\x40\x0c\xe6\xd0\x48\x7a\xf6\x8d\xfd\x8d\x6b\x8b\x55\xab\xc9\x41\x03\x39\x54\x22\x07\x0d\x75\x71\x9a\x83\x86\xb8\xb8\x4d\x0e\x1a\x5a\x97\x83\x06\x3b\x2e\xbf\xd3\x2c\x60\x40\xa1\x25\x52\x43\x71\xdc\x0a\x75\xb4\x89\x5c\xf5\x86\x72\x29\xb4\xc0\x3f\x94\x4e\x4b\xc8\x81\xf9\xbc\x41\x2f\x49\x34\x7f\x0e\x18\x48\x74\x76\xf2\x16\xa3\x5a\xf7\x65\x21\x3c\xe6\xb8\xd5\x3b\x89\xac\x7f\x27\x91\x5e\xd1\xbd\xa6\x64\x27\xa1\x55\x77\x12\x30\x76\x12\x4d\x77\x92\x9a\x7c\x61\x2b\x21\xd7\xde\x23\xd1\xd4\x4c\x57\x30\x20\x57\x30\xba\x8e\x10\x83\xef\xa2\xa9\x6b\xef\x89\xca\x9d\x99\x06\x11\x94\xd4\x22\x12\x44\x38\x6e\x54\xb6\x17\xa3\xcc\x5e\x04\x8e\x1b\x95\xec\x9f\xc2\xe6\x79\xca\x7a\xce\x90\xf0\x85\x8f\xca\x48\x42\xbd\x11\x24\x81\x95\x63\xaf\x48\x01\x0d\xd8\x3a\xe5\xb2\xb4\xd3\xc2\x69\x96\xd1\x6e\xe4\xc5\x33\xad\xa4\x6c\xe5\xdb\xcb\xe2\x70\x5f\x7d\x50\xc2\xf7\x3b\x98\x79\x44\xf5\xd5\x87\x04\x4d\xab\x25\x68\x52\x48\xdc\x98\xd5\x45\xf5\xdf\xde\xe8\x22\xad\x11\xcd\x72\x84\x82\xfb\x2e\x95\x2a\x9d\xe6\x92\xc4\xc9\x2e\x69\x04\x11\x83\xdd\x43\x16\xa2\x6e\x0b\xd6\xc1\xde\x91\x9b\x50\x75\xfe\xa1\x9f\x78\x43\x95\x70\x64\xa9\x9e\x45\x10\xa5\xf8\xbc\x8b\xaa\x7c\x19\x62\xe8\xcb\x71\x3a\xd0\x84\xc8\xe1\xdd\x4e\xed\x5d\x32\x2d\xfe\x75\x45\xe4\x45\x22\x38\x07\x10\x5c\xb5\xf5\x8a\x28\x19\x42\x7c\xde\x18\xdd\xd1\xc1\xfb\x01\x79\xd9\x2a\x40\x77\xa9\xc3\xd3\x69\x6c\x5e\x79\x04\xbf\x46\x94\x95\xd8\x39\x4d\xdf\x4f\x56\xe6\x4c\xc9\x4c\x97\x1a\x38\xe0\x5d\x09\xe1\xe5\x94\x81\xc8\x71\x2b\xdf\xc6\x21\x9f\x6e\x75\x83\x37\x32\x7d\x65\x75\x83\xa3\x30\xa4\xd5\x6f\x9f\x91\x4f\xd5\x2f\x7f\x42\x93\x9a\x91\x9f\x43\x8a\xa6\xb8\xa6\xeb\x38\x18\xd7\xc1\xcd\x22\xe4\xd5\x40\x76\x82\xe0\xf1\x0c\xd4\x4d\xfd\x19\x88\x1a\x5a\xbc\x44\x18\x60\xaf\x06\x39\xaf\x41\x0d\x88\xc7\xc4\xaf\xf9\xf4\x67\x18\x84\x35\xd3\x03\x38\x06\x41\xcd\xf4\x5e\x06\xe4\xba\xfa\xed\xbb\xb8\x66\x56\xaf\x6a\x90\x7e\x02\x22\x86\x61\x0d\x41\xbd\x8b\xa6\x35\x73\x22\xf3\x9a\x19\xbf\xc2\x13\x84\x11\xab\x69\x71\x46\x7c\x52\x03\x5b\x44\x3c\xe8\xc7\x51\x4d\x07\xef\x62\x36\x25\x08\xd7\x80\xf8\x0a\x7b\x64\x5e\xdb\xe2\x2c\x02\x57\x30\xa8\x7e\xff\x2b\xc2\xb5\x18\x7a\x4f\x80\x3f\x07\x75\x6b\x4b\x30\xbc\xa9\xd9\xb2\xd0\x8b\x23\xc4\x6a\x5a\x9c\xc5\xb8\x06\x07\x3f\xc5\xa8\x8e\xee\x4e\xe7\x28\xa8\x79\xfd\x9e\x78\x97\xb0\x86\x78\xce\x50\xdd\x12\x1f\xc7\xb5\x34\x1d\x5d\x42\x56\x8b\xfb\x23\x8c\x49\x5c\xbb\xe3\x9e\xc3\x2b\x52\xc7\x90\x7e\x25\x51\xe0\xd7\xd0\x50\x00\x6a\xa8\xff\x98\xcc\x43\x82\x95\x07\x51\x55\x0f\x90\x84\x75\x08\x3c\x9e\x41\xef\x32\x40\xa2\xd8\x40\x97\x6b\xc4\xa5\xd7\x97\x2a\xd7\x9a\xdc\x51\xc5\x02\xe7\x5b\x96\x38\x6a\x05\xeb\x93\xd6\xef\x76\x71\xf0\x92\xc5\x52\x84\x6f\x97\xa8\x44\xd2\xa8\xa4\x93\xc5\xe3\xf8\x3d\x35\x17\xcb\x96\x1e\xc4\x89\x9e\xd9\xd1\x11\x6f\xc2\xee\x5d\xda\x20\x53\x79\x1b\x96\xb7\xd9\x49\x15\x23\x89\x82\xdc\x28\xa3\x54\xd4\x46\xa4\x15\x61\xf8\x08\x86\x51\x3d\xd5\x80\x63\xd3\x9e\x9e\x8e\x35\x90\x58\x1b\xd0\x58\xd4\x95\x90\x89\x34\x2a\xc0\x5a\x38\x03\x55\x27\x7b\xf4\xe3\x2d\x93\x5a\x7c\x2e\xb5\x91\x29\xc2\x6d\xf0\x98\x2a\x3b\x25\xe6\xa5\x40\x4b\x94\xd0\x4a\x47\x99\x3a\x10\x47\x61\xf8\x21\x0a\x7a\x99\x67\xa7\xf1\xd8\x27\x73\xc0\x47\x73\x1e\xa9\x22\x15\x1a\x3e\x99\xb8\x50\xfa\xaf\xec\x10\xe9\xc8\xd2\xbb\x8d\xa0\xf4\x8f\xfd\x10\xa1\x21\x5d\x64\xa7\x09\x7b\x8e\x9e\x10\xff\x89\x7b\x02\x72\xf1\xdb\x16\x9f\x5b\x13\x80\x02\x11\x35\x99\xce\x94\xc4\xed\x49\xa6\x30\x55\x3c\xfa\xf1\x16\x0f\x54\x2f\x1d\x16\x34\xbb\x3a\xa5\xcb\x28\x3c\x7d\xce\xc8\x25\xc4\x3d\xc7\x85\xbd\xdc\x5a\x35\x7e\x91\xac\x66\x12\x74\x14\x91\x09\x0a\xe0\xea\x73\x05\xbe\xf0\x2b\xd7\xdd\x25\x53\x61\x92\xce\x2a\x88\x4a\x38\x2b\x84\xfa\xab\xe4\x26\x75\x2b\x97\x5f\x94\x5e\xe2\x90\x0f\x4b\x67\x26\x5e\x09\xef\x39\x06\x5f\xf9\x46\x5d\x9b\x01\xf2\x8b\x49\xdb\xf9\xc3\xa7\x70\x00\xe7\x00\x05\x43\xfe\xcb\x95\x7f\x1a\x9f\x89\x07\x25\x5f\xca\xe7\x4f\x6d\x7b\xa8\xfe\x16\x4e\xf6\x18\xcc\xa1\xf9\xb5\x7e\x56\xd2\x41\xf2\x4a\xf6\xa1\x7f\xba\x13\x14\x51\x96\xef\x47\x3c\x7c\x5b\xde\x51\xfa\xee\x69\xda\xcd\xd0\x78\xee\x06\xa0\xd8\x23\x7f\x56\xd1\x61\xf2\x2a\xdb\x9f\x7e\xec\x42\x0c\xc6\x01\xf4\x87\xbb\xbd\x5d\x13\x51\xf2\x69\x49\xdc\x6f\xf2\xca\xf9\xfc\x39\xf9\xd1\x29\xaf\x79\x00\xc6\x30\xf8\x7a\x75\x66\xab\xeb\xc3\x14\x82\x36\xa6\x0f\x53\xfd\xaf\x5d\x1f\xa6\xe1\xee\xa2\x0f\x4b\xe2\xcb\x97\x53\x87\x75\x9a\xca\xaa\xea\x30\x31\xd8\x3d\xa8\xc3\xba\xad\x57\x07\x75\x58\x6e\x42\xe5\xea\xb0\x2e\x3b\x1b\xe1\xcb\x8a\x8d\x3d\x47\x9f\x10\xa6\xfb\x98\x30\x34\x41\x30\xba\x5b\x49\x36\xd9\xef\x6e\x7d\x1d\xd7\xf5\x08\xb3\xb5\x0c\x40\xc4\xe1\x3c\x8b\x69\x8b\x3c\xa7\xaf\x11\xbe\x5c\x29\x8f\x8c\x88\x58\x2e\xaa\x1f\x65\x2e\x31\x80\x7d\xc4\xf7\x42\xfb\xe4\xdb\xa2\xbb\xec\x08\xd9\x6c\x1a\xad\x22\x86\x93\x68\x68\x3e\xbd\x4c\xcd\xc1\x86\xa1\xab\x23\x1b\x1a\xdd\x87\x40\xe4\xcd\xcc\x09\x27\xf9\xbf\xc4\x94\x9e\x5e\xc2\x9b\x6b\x12\xf9\x74\x64\x3f\x82\xd8\x23\x3e\xfc\xf0\xfe\x55\x72\x1b\xec\x98\xbf\xb3\x6c\xb6\x08\xfb\xc6\x98\x12\x9c\x0d\x0c\xba\x70\xc7\x31\x0a\x7c\x8e\x57\x63\x38\xdb\xc5\xfc\x9f\x12\x27\x02\x9d\x43\xa2\xc2\x97\x20\xd7\x4a\x94\xca\x4c\xb8\xa4\xce\x8f\x63\xef\x8e\x54\x68\x3c\xc7\xff\xde\x9e\xcd\xc0\xb8\xf0\x2c\x49\xcd\x90\x79\xf1\xf9\x73\x0f\x8f\x24\x91\x1a\x4b\x9b\xbc\xce\xd0\x93\x90\xed\x5c\x36\xb2\xff\x06\x2c\xbe\xd8\x89\x89\x7d\xf4\x0d\x8b\x62\xf8\x8d\x7c\xc8\x3f\xed\x4b\x8f\x5b\xe4\x8f\xbe\x31\x3a\x55\x01\xfd\xae\x6d\xb6\x14\x6d\x32\x43\x64\xdf\xcb\xcc\x3f\xfd\x24\xe9\x42\xbe\xbd\x51\xfc\xbf\xec\xbb\x7c\x73\xf9\xb8\xd0\xf8\x26\x84\xd9\x76\x29\x02\xbe\x91\xc5\xc8\x8c\xb7\xd8\xb5\xbf\xf9\x31\xd3\x29\x62\x01\x74\xed\xbf\xed\x83\x1f\x45\x01\x43\x61\x5f\x1f\x65\xf1\x2f\x12\x01\x98\x0e\x1e\x2a\x76\xc3\xcc\x1d\xe2\x98\x66\xeb\x32\xa8\x1f\xb0\xdf\x02\xfb\x18\xb2\x6b\x12\x5d\x96\x2d\x00\x5f\x18\x46\x86\xfb\x26\xa9\xf3\xd3\x29\xc2\x20\xf8\x5a\xb1\xab\xe7\x57\x68\x9e\x4e\x7c\x93\xcb\xc1\x94\x0b\x2b\xbe\xd4\x8a\xba\xd4\x55\xe5\x96\x77\xfc\xca\x1f\x8a\xc4\x1d\x11\x1a\xc7\x0c\xd2\x73\xdb\xc4\x9f\x7d\x31\x10\xd2\x86\xab\x41\xa8\x6c\xcb\xa1\x4e\x5a\x9b\x29\x99\xab\xda\x17\x70\x9f\x7c\xad\x53\x3b\x57\x7d\xaa\x09\x20\xf9\x40\x23\xbe\x69\x30\xe3\x93\x14\xf9\xc3\x9c\x1a\xac\xa2\x0b\x63\x19\xed\x0b\x71\xc1\x6d\xd5\x52\x0d\x17\x47\x41\xa6\xbd\xf0\x6b\x52\xef\x48\x14\xce\x00\x1e\xee\x1e\x2e\x76\xf0\x40\xfe\x18\xa5\x75\x4a\xf1\x40\x2e\x52\xa6\x78\x29\x36\x48\x33\xf7\x42\x21\x2f\xf7\x34\x61\x60\x7b\x7b\xe6\x63\x63\xef\x29\x67\x2e\x98\xcb\x04\xa3\x06\x37\x2f\x2b\x29\xae\x88\xf3\x34\x81\x78\xf7\x60\x98\xfc\x4d\xd4\x1f\x2e\x96\x59\x8d\x8e\x85\xbb\x96\x20\x3c\x34\xe9\x31\xf5\x36\x5b\xdd\xb2\x18\xd0\xe5\x96\xa6\x15\x82\xf0\xf2\x3d\xf4\x48\xe4\x1b\x51\x32\xc9\xa4\xdd\xd2\xec\x3f\xc6\x27\x69\x7e\x24\x66\xa2\xd0\x45\xa3\xe4\x1a\x46\x9c\xa7\x36\xb5\x87\x44\x75\x12\xc4\xa2\x68\x6d\xfa\x9e\x3a\x4f\x6d\xdf\x1e\x52\xf3\xfd\x0e\x9a\x24\xc9\xf2\x38\xdf\x63\xc6\xf9\x2e\x84\x81\xcc\x33\x6d\xfa\xbc\x5d\xa4\x69\x62\x64\xa2\xd7\x11\x4b\x99\x88\x10\xe8\x71\x2e\xaa\xcd\x84\x5f\xb3\x3c\x94\x99\x8b\x0b\xdc\x5b\x51\xc6\xf1\x04\x44\x60\x4e\x85\x5b\x10\x87\xce\x14\x3f\x4c\x50\xf8\x3b\x7d\x5e\x16\x41\xb4\xed\x92\xdb\x96\xf2\x02\x9b\x01\x2a\xab\xfc\x9e\x49\xc7\xaf\xa7\x70\x64\x3f\x95\x55\x7c\x47\x25\x85\x14\x07\xd4\x6c\x3c\x2c\xbe\x2f\x94\xe4\xef\xf1\x0e\x95\xbb\x58\x49\x7f\xbc\xbd\xea\xcd\x71\xd9\x20\x8e\x82\x91\xf8\x37\x2d\xad\x9a\xc9\x92\xe8\x66\xd2\x84\x39\x02\xbf\xbd\xd2\x92\xf9\xa2\x97\x47\x50\xe2\xcd\x38\xcd\x4c\xf4\x08\x63\x75\x4d\x6d\x3e\x2e\x82\x83\x08\x02\xdb\x48\x05\x24\xb6\xfb\x88\x99\x8c\x1f\x0e\xa8\x48\x98\x29\xd9\x42\xcf\x8e\x20\xf0\x09\x0e\x6e\x44\x35\x58\x57\x15\xf7\x1b\x84\x44\x52\xc0\xc8\x06\x63\x4a\x82\x98\x89\xec\x39\xf2\x5d\x00\x27\x6c\x64\xf7\x7f\xf8\xe1\x87\x1f\xc2\x4f\xf5\x65\xff\xc4\x68\x01\x3f\x03\x0c\xdf\x48\xf8\x09\x7a\xc7\x64\x3e\x07\xd8\xef\xd9\x1e\x09\x6f\xec\xfa\xe2\x7d\x92\x2e\xc5\x6a\x88\x6b\xec\xcd\x2b\x3c\x21\x3d\xfb\x98\x84\x08\xfa\x96\x46\xa4\xc5\x88\xe5\x05\x28\x94\xce\x65\xce\x42\x79\x5a\x2e\x41\xcd\xdd\xae\xde\xc4\x03\x41\x5f\x65\xd8\xbb\x2f\x57\x87\x34\x4a\xf5\xd6\xf4\x1c\x93\x1a\x6a\x11\x90\x9d\x8b\xf7\x1b\x66\x95\x00\xe6\x47\xe7\xf0\x62\x24\x4f\xf0\xf2\xf6\xc9\xad\x31\xf7\xd1\xc2\x15\xa3\x55\x7d\x24\xb5\x23\xc5\x8f\xe4\xbd\xfb\x54\x32\xb2\x9f\x91\x6f\xe8\x88\x32\x6d\x39\xea\xfb\x33\xe4\xc3\xbe\x59\x7a\xb8\xfc\x90\x60\x99\xa3\x88\x39\x4f\xcf\x2f\x86\xbf\x0d\x68\x18\x20\x71\x5f\xfe\xac\x6a\xa9\xe6\xc7\xcd\x66\xb1\x2d\x0c\xb6\x73\x20\x37\xa4\x48\xbd\xf8\xb4\x6c\x3e\xf8\x62\x98\xfb\x3d\xfa\x4d\x16\xee\x37\x46\x7d\x89\x22\xca\xde\xc7\x38\xbf\x56\x13\xf5\x7c\xb4\x7b\xb0\x70\x11\xd5\xcd\x86\x3d\x67\xf4\x63\x4e\x17\x5c\xfa\x9d\xe3\xc6\x38\xdb\x7d\x09\x88\x49\xeb\x82\x91\x74\xa7\x8e\xc4\xa7\xd3\x6c\x4a\x8d\xbb\xa4\x6d\x20\xc6\xc9\xd0\x12\xe7\x84\x84\x33\x22\x32\x15\x55\x55\x85\xf9\xa3\xb6\x05\xc2\x13\x52\xd7\xa0\x83\xc9\x98\x44\x53\x80\xd1\x1f\x32\xf4\xf7\xab\x0f\x4f\x6c\xaa\x0d\xf4\x2e\x9a\xb6\x52\x24\x99\x58\x5b\x5b\xaa\x8c\xec\x52\xb4\x54\xd3\xe6\x73\x53\x20\xbf\x44\xe3\x93\xa8\x60\x28\x64\x6a\xf5\x10\xa4\xbd\x5b\x55\x77\x78\xa8\xd4\xd7\x49\x19\x62\x57\x5c\x81\xf4\x63\x55\x63\xd9\x9d\x83\x4f\x67\x60\x4a\x93\xd6\xf2\xa7\x2d\xd2\x92\xaa\x14\x86\x2f\x94\x0e\x48\xb7\x29\xbe\xb1\x9d\x45\x5d\x32\xc1\x72\xc4\x76\x28\xa9\x23\x17\xf1\x14\x32\x86\xf0\xb4\xa5\xeb\x60\xc5\x6a\xba\xf6\x3e\x95\xfd\x3c\xbd\x84\x37\x15\xe9\x94\x72\xeb\x6c\x18\x71\x45\xc6\x04\x2a\x0a\x13\x9b\xf0\xb4\xd2\x91\xae\x02\x51\x75\xc8\x56\x52\x8d\x50\xc6\x3e\x24\x40\x75\x05\x28\x03\x43\x0b\xe2\x2f\x43\x4a\x0e\x84\xee\xeb\xd4\x08\x44\x35\x1e\xe4\xce\x89\x29\x7c\x2e\x79\xd4\x6b\x32\x25\xab\x6c\x7b\xd7\xe6\x87\x0a\xb1\xcb\x07\xb7\x3b\xc6\x02\x84\x08\x63\xe8\xdf\x33\x2f\xbe\x37\x26\x8c\x30\x62\x48\x30\x44\x7f\xb8\x7b\xd8\x36\x49\x13\xc2\x74\x74\x7e\x91\x54\x3c\x3d\x41\x98\x96\xe5\x01\x52\xf7\x9e\x34\xe5\x43\xe5\xd5\x2c\x77\x95\x7a\x9a\xb6\x30\x00\xb4\x9d\xaa\x1c\x42\x69\x73\x0e\x9a\xed\x98\xb7\xb5\x3c\x51\x55\x66\x8c\xeb\x90\x20\x7e\xb9\xd2\x6b\x5d\x4b\x3d\xa0\xb6\xc7\x92\x9b\x3a\x1c\x99\xe8\x72\x77\x0f\xcc\x57\x02\x35\xae\xf0\x71\x73\x86\x15\x88\x34\xe0\x96\xf9\xfe\x44\x7a\x8f\xe4\xbc\xab\x5b\x5b\x1d\x48\x54\x02\xc6\x61\x26\x9d\x78\xf9\x92\x37\x87\x18\x65\x16\xae\x1d\x07\xee\x6c\xb3\x6d\x8f\x73\x95\xaf\x70\x6b\xf1\x93\x35\x08\x94\x47\x4c\x48\xb3\x7a\x9a\x0e\xb1\xcb\x34\xd6\x0c\x6b\x5a\x6c\xa4\xfb\xba\x7e\x91\x1b\xd5\xdc\x8d\xfc\xc6\xa6\xcd\xc7\x27\xe2\x38\x6a\x1f\xbc\x5c\x48\x87\xde\xc4\x74\x53\x86\x6d\x3a\x8a\xe9\x84\xc8\xf2\x97\xe8\xc9\xc8\x35\x4c\x92\x04\xb2\xa9\xa6\x43\xbc\x80\x7b\x7b\xac\x67\xe4\x1b\x16\x73\xec\xd9\xb6\xf2\xdb\x40\x54\xc4\x50\x6c\xeb\x9c\x64\x06\xa2\xe2\xc4\xd2\x74\xb9\x3a\xa3\x78\xe3\x54\x3b\x08\x1c\xd2\x92\xfc\x15\x5c\xfe\x6a\x05\x0b\x6d\x3e\x6f\x11\xd6\x29\xd1\xd1\x6a\xdb\x37\x94\x58\xbc\x6f\x4e\xe0\x13\xaf\x2f\xe7\xd3\x8f\x20\x8d\x83\x25\x2b\xa4\x76\x22\x26\x2f\xaf\x4a\xf8\x13\xf9\xe5\xb5\x77\x72\xd3\x85\x81\xee\x38\xee\x33\x59\x9e\xd6\xae\x6e\xc2\xc9\x26\x5b\x6d\x00\x16\x39\x94\x4b\x47\xe9\x95\x5f\x6f\x08\x99\x14\x42\xcf\xf4\x69\xd2\xfe\xf9\xc8\xf4\x23\xd8\xa3\x85\x7c\xc5\xd4\xb5\xf7\x24\x56\x46\xad\x12\x59\x0a\x7f\x47\xd4\xae\x20\x63\x21\x59\x44\x32\xc9\x33\xf8\x89\x7d\xcd\x13\x2d\xab\x15\x13\xc1\x49\x04\xe9\x2c\xe3\x57\xa4\x2a\x56\xa9\x57\xa5\xb3\x59\xc9\x99\xa9\x1d\x61\x67\xcb\x06\x99\x4d\x8c\x8a\x41\x07\x7b\x7b\xbd\xcd\x15\xac\x73\x8c\x02\x1c\x49\x41\x51\xe0\xfb\xcf\x02\xe2\x5d\xb6\xc8\x02\xac\x31\x39\xe6\xed\x69\x97\xb2\x3e\x1d\x6f\x09\x62\x80\x2e\x9e\xb8\x8d\x33\x28\x16\x30\x93\x93\x58\x9b\xb2\xb3\x33\xc8\x42\x70\x13\x70\xb7\x4c\x3c\x9a\x03\xbc\x73\x5a\xe3\xf5\x32\xde\x4e\xf3\x4d\xae\x42\xeb\x58\x27\xe1\xf3\xd6\xad\x22\xb9\x18\x36\x63\x60\xc8\x33\x87\x22\x35\x2c\x57\x9d\xbc\x83\x69\x52\x1f\xcf\x75\xc1\x6d\x73\x44\xbd\x24\x43\x3a\x45\xf3\x30\x80\x22\x22\xae\xd8\xcb\x5d\x66\x46\x5f\x41\x57\x16\xd7\x26\x53\x8c\x5b\x64\x52\x6c\x93\x7b\x43\xfa\x81\x9c\xe4\x33\xa4\x97\x64\x51\x37\x5c\x10\x86\xb6\xed\x66\x3d\x18\x54\xf7\x1e\x99\x87\x31\x83\xbe\x20\xca\xc4\x61\xc1\x35\x72\xc0\x14\x15\x73\x86\x63\x83\x22\xa4\xf6\x65\xe3\xf8\x5a\xcc\x00\x3d\xf2\x3c\x12\x63\x46\x0b\x50\x20\x7a\x94\x51\x07\xb8\x76\x7d\x1a\x1e\x81\x55\xb7\x90\xd5\xdf\x36\x5a\x91\x68\x08\x30\xc1\x37\x73\x12\x53\xe1\x0f\x52\xa7\x81\x20\x11\xbf\xc1\x15\x9b\x54\x8f\x3e\x00\x6a\x2e\xb6\x63\x4e\x12\x54\xcd\xd0\x98\x7d\x09\xe0\x25\xea\xcd\x56\x43\x2f\x24\xf9\xad\x1f\x9f\x19\x95\x4d\xbe\x37\xbe\xd8\xc5\xf8\x37\x49\x21\x6f\x88\x0f\x6d\xa7\x5a\xb1\x5b\x33\xbe\xf3\xf9\xf3\x2d\xf2\x87\xf6\x81\xbd\x70\x1b\x58\xb5\x84\xb7\x0d\xa7\xe6\x6b\x62\x0e\x55\xb2\x01\x96\x20\xb4\xb2\x80\xd1\x0a\xb2\x6a\x46\xd6\xde\x5e\x6f\x45\xc2\xb5\x0f\xca\x1b\xd6\xd0\x90\x56\x47\xa8\x7c\x4d\xeb\x41\xcb\xfd\x4c\x63\x6f\x6f\x37\xc9\x6f\xd5\x7a\x0b\xc9\x24\x55\x02\x01\x2f\x7c\xc4\xa1\xfd\x93\x61\x00\x8a\x59\x2b\x14\x18\x99\xd6\xfe\x6c\x78\x50\x69\x9f\x39\x1e\xae\x10\xbc\x3e\xc2\x20\xb8\x61\xc8\x2b\x72\xf0\xaf\x1c\x0f\x40\x4f\x3c\x41\xc5\x73\x40\x67\xc2\xb7\xed\xcf\x86\x0a\x3e\x79\x91\x74\x2f\x41\x85\xf8\xf5\xe7\x46\x43\xe2\x89\xba\x1e\x34\x58\x1d\x4e\x50\x33\xf5\x63\xd9\x01\xfa\xd4\xb6\x87\x95\x68\x2d\x9d\x75\x6e\x84\xcf\x9f\xed\x83\xf2\x86\x0d\x68\x15\x2e\xf2\x2d\x3f\x52\xa9\x23\x17\x4e\xa3\xc5\xdc\xc8\x5a\x90\x76\x5e\x59\x26\x64\xe1\x52\x08\xf1\x5b\x78\xfd\x8b\x74\xe3\xc9\x7c\x55\xf0\x37\x4e\x5f\x25\x93\xc8\xd0\x53\x92\xa0\x6a\xf0\xe2\x0a\x46\x37\x04\xc3\x0f\xca\xfe\x91\xff\x36\xa9\x2a\xcd\x1b\xf4\x4a\xfa\xcd\x94\x53\x10\x06\xac\x00\x50\xa6\xa0\xb4\xdd\xe2\x9a\x2a\x3f\x24\xe1\xea\x5c\x32\x94\xf2\xa3\xe2\x77\xe0\x19\xa0\xbf\xce\x00\xa3\x6f\xe1\x75\x63\xba\x03\x38\xfa\x71\xb7\xb7\x5b\x89\x12\x93\xb8\x12\xd0\x47\xed\x50\xb2\x34\x4e\x70\x6a\xb1\x4a\xae\xa2\xa2\xa8\x9f\x5e\x43\x65\x34\x32\x11\xe6\xd4\x61\xcc\xdd\x3d\x74\x76\x60\x8f\x38\x0b\xa7\x53\xd1\x03\x06\xe7\x61\x20\x32\x70\x7e\xdd\xa6\x25\x34\xe7\x73\x3b\x05\x57\xd0\x3f\x53\x53\x1e\xe6\xb5\x0b\xaa\x98\x88\x46\x09\xcd\x5a\x9b\xe5\x05\xdc\x34\x90\xbb\xf6\x53\x11\xc6\xc4\xe9\xb2\x4d\x54\x39\x29\xb5\x57\xe1\x8e\x5a\x39\xa3\xfa\x75\x7b\xc5\x9c\x39\xef\x76\xba\xb9\x12\x2c\x6c\xb3\xe3\x4b\x57\xac\xe8\xfc\xfa\x54\x63\x25\x4b\x04\xb7\xcf\x13\x8d\xfa\x10\xba\x6f\xc1\x1c\x0e\x99\xfb\xe2\x93\x07\xa3\x90\xd5\x55\xa7\x2f\xa2\xaf\x95\x91\x92\x24\xbe\x09\x5a\x87\xdd\xc1\x9c\x27\x0f\xd8\xaf\x7b\xfb\x36\x24\xd3\x48\xd0\x2e\x92\x28\xdb\xee\x2d\x13\x7a\xfa\x15\xac\xc2\x2d\x48\xae\xbd\x0e\x42\x99\x24\xe2\xa0\x9d\x9e\x58\x4c\x62\x5f\x72\xac\xb2\xb9\xc0\x92\xf4\xc8\x79\xfa\xd1\x6e\x76\x86\x62\x58\x76\xdb\x51\x1d\x2c\x07\x5f\xc2\x78\xd0\x09\x3b\xed\x6d\xb2\x62\x12\x4f\x45\xde\x68\x38\x3a\xb4\x53\x98\x7a\xa5\x16\x80\x4e\x3c\xa4\x03\xc8\xaa\xd2\xda\x31\x99\x87\x32\x05\x47\xea\x1c\xdb\x83\x23\x38\x60\x11\x9a\xf7\x1c\xc7\xb4\x81\xc1\x51\x69\xf0\xbf\xe3\xa6\xe5\xdd\x59\x21\xa9\x0f\x13\xe5\xdd\xd9\xe8\xf0\xe0\xa0\xce\x25\x3b\x83\x95\x83\xbd\x09\x0a\x18\x8c\x46\xa6\xf7\xeb\x5e\x80\xe6\x88\x65\x2c\x98\xf7\x8c\x3b\x61\x2c\x12\xd7\x8b\x02\x8d\x16\xec\x40\x1b\xb7\x64\x76\x3c\x6d\xba\x10\x77\x69\x00\x80\x8b\x0b\xfb\xb1\x5d\x11\x48\xc5\x0c\xaa\x2d\x44\xa5\x7c\x4d\xdb\xaa\x4e\x00\xa5\xd7\x24\x57\xdf\x31\xcf\x17\x5c\x7b\x3f\x54\xed\x6a\x84\x1a\x5d\xe4\xd1\xac\xe2\x28\x4b\x5f\xae\xc6\x70\x2a\x6a\x31\x0b\xbe\x56\x8d\x6d\x23\xfa\x55\xae\x8d\x6d\x0c\xeb\x0c\xa4\xc9\x4c\xb5\x90\x2e\x13\x24\x9a\x12\x96\xe2\x43\x68\xbc\xd5\xe1\xa3\xa2\xb8\x92\x12\x78\x59\xa7\x57\x11\x5f\x6e\x23\x7c\x05\x02\xe1\x56\x26\x27\x9b\x5b\x87\x5b\x95\x9a\x6c\xd1\x22\xd7\x90\xca\xd1\x20\x21\x2a\x15\x17\x0a\x69\x86\x14\xbe\x29\x64\xd9\x15\x95\xbe\x35\xba\x47\xd1\xa0\x0c\xff\xf9\x79\x7e\xfe\x9c\x7d\xc2\x9c\xa7\x75\x53\xae\x76\x94\xc6\xa5\xc2\x0e\x93\xa9\xe1\x98\x37\x53\xdb\xdd\x60\x96\x6b\xe2\x7d\xfb\xa2\xfb\xa7\x8a\xc9\xd5\x3b\xfc\x9a\xd8\xac\xa9\x33\xb0\x4d\x1c\xa4\x8d\x34\x28\x64\x2c\x11\x16\x0a\xe9\xbe\xe1\x58\x52\x56\x98\x3a\x6b\x76\xcd\x7e\xe9\x83\x90\x1f\x23\x77\xe7\xf9\xd5\x68\x5e\x4e\xaf\x22\x15\xd3\xda\xa4\xc4\xfb\xf3\xd9\x9b\xd7\xcf\x40\x44\x07\x1a\x8a\x9e\xb0\x51\xfd\xe5\xd3\xcb\xbf\x82\x7f\xfc\x6b\x6c\xbb\xc2\xcc\x3e\xfc\xe6\xd6\xa6\x37\xf3\x31\x09\xa8\x3d\x3c\xbf\x70\x6d\xca\x00\x13\x51\xd2\xfc\xf7\xf9\xa1\x7b\xfe\xf8\xb1\x6b\x93\x98\x05\x32\xb5\x2b\x08\x28\xbc\x70\xcf\x0f\x5c\xfb\xe3\x47\x6c\x5f\x5c\xb8\xf6\x0c\xd0\x17\x57\x20\xb0\x87\xe2\xdd\xe2\x1b\x77\x0e\x19\x18\xde\xce\x05\xbc\xe2\x02\xd2\x80\x90\xc1\x6c\x4c\xed\x16\x94\x92\x7e\xec\x25\x69\x70\x55\x82\x98\x7e\x48\x42\x72\x55\x51\xcb\x5c\xb4\x80\x51\xab\xef\x57\xa6\x9d\xca\x0f\xd4\xd4\x6c\xf7\x16\xe2\x78\x0e\x23\x30\x0e\xf8\x27\x5c\xa0\x28\x2b\xf2\xae\x51\xb1\xe0\xdb\xa8\x25\x2e\xbc\x98\x32\x22\x5e\xf3\xfd\xd1\x57\x41\x4c\x77\x56\x4d\xbf\x82\xe0\xbe\x25\xb3\x9f\x5f\x91\x6f\xc3\x52\x82\x93\xec\xa4\x40\x76\x7f\x75\x6d\x1f\x5d\xd9\x2e\x8b\x62\x4e\x6d\x87\x07\xae\xed\x05\x80\xf2\x45\xbd\x42\xf0\xba\x9f\xcc\xd4\xbe\x70\xcf\xbf\x4f\xe8\xf1\xe3\x47\x4e\xa3\xfc\xeb\x09\x89\xe6\xc9\xe7\x99\x06\x69\x9b\xaa\x11\xae\x91\x3f\x85\xac\x1f\x20\xca\xfa\x21\xf2\x2e\x61\x64\x15\x1f\xf5\x67\x24\x42\x7f\x14\x86\xcf\x0c\x10\x07\xa5\xfd\x93\x50\x3a\x67\x96\x7f\x9b\x7e\x1e\x20\x3b\xd9\x6f\x87\x8f\x93\xef\xcf\x1f\xff\xe0\x9e\xab\x4e\x2c\xfe\xf3\x7b\xd7\x46\x13\xdb\x3d\x3f\x7f\xfc\xad\x7b\x6e\x2b\xe7\x7a\xf4\x07\x5f\xd0\x2b\xe4\x73\xf4\x72\xfc\x8a\xd4\x02\xd0\xb7\x2f\x5c\x1c\x07\xc1\xc5\xc5\xc5\x85\x7b\xfe\xc4\xb5\x81\xf6\xa8\x3d\x7f\xfc\xc4\x3d\x70\xcf\x79\x5b\x82\x75\x17\xfc\xd3\x0a\x20\x9b\xf1\xc8\x4f\xa5\xfe\x4c\x54\x9c\x32\xe6\x9a\x76\xed\x9e\xff\xb0\x42\xcf\x46\x97\xcf\x62\x14\xb0\x3e\xc2\x96\x90\x5d\x52\x19\x30\x33\x02\xff\xf5\x6d\x33\xa6\x24\x7a\xdc\xdb\x1c\x41\x8a\x3e\x58\x39\x94\x28\x85\xf1\x30\xb7\x4a\x3e\xf2\xd4\x22\xf1\x01\xd3\x12\x0a\xae\xfd\x4a\x54\x7b\xb0\xcf\x90\x77\xc9\x47\xd5\x78\xfe\x21\xcb\x5b\x43\x10\x81\x39\x64\x30\x12\xcc\x79\x21\x97\xce\xcd\x43\x53\x8d\xca\x15\x29\x49\xe7\x83\x5e\x81\x92\x74\x17\x1b\xa0\xa4\xb4\xeb\xb5\x51\xd2\x2f\x08\x58\x86\x96\x9d\xe3\x85\xc2\x48\x1e\x0c\x0d\xb4\x54\x82\xab\x07\x5a\x32\xf0\xf3\xfa\xf9\xd1\xc9\x0a\x74\xc4\x3f\xdf\x00\x0d\xc9\x6e\xd7\x46\x3f\xc7\x04\x63\xe8\x31\x8b\x11\x8b\xf7\xbc\x7f\x24\x14\x1b\xd6\x73\x91\x16\x9c\x44\x37\xcd\x64\x94\x43\xd3\x97\x4f\x42\x56\xee\xbf\x15\xc9\xe8\xf8\xe8\x74\x05\x2a\x3a\x3e\x3a\xcd\x11\x51\x1e\x3c\x03\xc4\x6e\x94\x24\xba\xae\x9b\x78\xcb\x9e\x73\xdc\xe8\x18\x62\x16\x81\xc0\x3a\xca\x72\xa5\xd3\x96\x5c\x29\x8b\xae\x6a\x6a\x2a\x03\xd6\x00\xf8\x5e\x68\xaa\x0c\x96\x92\x7d\x5a\xf6\x38\xff\xcc\x78\xfc\x9d\x6b\xc7\x68\x3f\x46\x32\x4f\x1d\xbf\x31\x5c\xb8\xe7\xe7\xf6\x7f\x52\x25\x93\xd8\x4f\x0e\x0e\x04\xaa\xd2\x8f\xd7\xc7\xee\x1b\xd6\x9f\x4b\xad\x7d\x59\x58\xac\x51\x38\x94\xf9\x96\x8d\x4e\x26\x24\xb2\xdd\x24\x33\x7d\x3f\x8e\x82\x92\xb3\x52\x11\x8e\xf5\xe1\xfd\xeb\x7a\x4e\x7f\x28\xf7\xde\x84\x78\x31\xed\x23\x1c\xc6\xcc\x96\xd3\x3b\x3f\x17\xb9\xe7\x6c\x26\xcb\xa3\x8a\xcb\x81\xad\xa7\xc0\xf1\x97\x81\x40\xd1\xb4\xa2\x0e\xfd\x4a\x15\x1b\x70\x6d\x01\xe4\x45\x61\x9b\x6b\x68\x3f\x44\x81\x28\x91\x20\x08\x45\x20\xc7\x23\x98\x45\x24\xb0\x10\x07\x4a\x6a\x75\xb2\x6f\x4c\x3e\x90\xbd\xac\x96\x20\x91\xce\x41\x50\x2e\xa3\x8b\x2e\x39\xe8\x96\xd8\xed\xf3\x58\xb2\x18\x8d\x4e\x38\x98\x0e\xac\x19\x63\xe1\x70\x5f\x66\xb5\x9a\x11\xca\x86\xdf\x7f\xff\xfd\xf7\xb2\x2c\x75\x7b\x4a\xbd\x5b\xa2\x88\x20\x08\xe6\x65\x64\xf1\x5e\xbf\x68\xa4\x88\xe5\x68\x41\x0e\xdc\x40\x0d\x0a\xba\x6a\x7a\x10\x50\x6e\x31\x45\xcc\x01\xc2\x5b\xbb\xf6\x52\xb7\xfa\x77\x78\x53\xb9\xfe\xd6\x89\x68\x62\xa9\x36\x8d\xa4\x90\x64\xd1\xab\xa5\x86\x88\x5c\xd3\x72\xa2\x48\x21\x6a\x20\x0c\x03\xf4\x0b\xf7\xaf\x95\xe4\x71\xa2\x9b\x6d\x27\x89\x1c\x93\xf0\xc6\x62\x33\x68\xbd\x3f\x3d\x32\x50\x6d\x4d\x22\x32\x57\x0b\xa0\x52\xd6\x50\xeb\x7f\xfe\xcf\xff\xe5\xef\xe8\xd6\x52\x93\x17\x20\x19\xb4\x58\x42\x4c\xef\x5e\x3d\x3f\xb6\x8e\x45\x03\xeb\xd5\xf3\x0d\x72\x95\x04\x88\x06\xfa\x49\x81\xad\xe6\x2d\xc7\xaa\xcd\x76\xd2\x8e\x60\x2f\x2a\x7a\x62\x6b\x69\x22\xdf\x4d\x42\x10\xa2\x52\xa9\xf5\xea\xb9\xd5\x7b\x27\x24\x7b\x10\x38\x1b\xa4\x0a\x55\x99\xb5\x9e\x24\x14\xac\x17\xf9\xc5\xdc\xe8\x2a\xbe\x9a\x58\x37\x24\xb6\xae\x01\x16\x57\x44\x7a\x83\x3d\x4b\x58\x81\x2c\x84\x2d\x60\x85\x20\x62\xc8\x8b\x03\x10\x29\x8c\xf5\xc4\xb2\x7f\xfc\x98\x28\xcd\x2c\x61\x87\xfa\xf8\xd1\x76\x5c\x2b\x94\x92\xa7\xe0\x28\x29\x82\xc5\x17\xdf\x1d\x1e\xfa\xdf\x8f\xff\x72\xd8\x3f\x84\xde\xf7\xfd\x6f\xbf\x9b\xfc\xa5\x3f\xf6\xbe\xf7\xfb\xdf\xf9\xf0\x2f\xdf\xfa\xdf\x7d\xeb\xfd\xe0\x3f\xae\x5a\x81\xfb\x27\x23\x11\xe1\xd0\x57\x8a\xe1\x02\x2d\x7d\x50\xf5\x81\x36\x48\x40\x06\x00\x0d\x54\x24\x5a\x7e\xa0\xf2\x2e\x5a\xc5\x59\x8e\x74\xa3\xed\x64\x2d\x1f\x28\xf4\x45\x42\x58\xa5\xbb\xb8\x46\x6c\x96\x54\x82\xb3\x00\xf6\x4d\x3a\x15\x2f\x13\x6a\xec\x49\x87\x38\xf1\xce\x8a\xb1\x0f\x23\xeb\x0d\xa0\x0c\x46\xea\x38\xe3\x1f\x03\x4a\xd1\x14\x5b\x1f\xbf\x11\x8a\x7b\xd1\xcb\xc7\x6f\xac\x88\x04\xb0\xa8\x6c\x01\x53\x80\x30\x65\xea\x6b\x1a\x42\x0f\x4d\x10\xf4\x2d\x30\x26\x57\x70\xdb\x09\xd6\x54\x3b\xe7\x89\xf6\xa4\x54\x25\xbd\x01\xa2\x4d\x80\xe0\x17\x6b\xfd\x67\x1d\xf1\xa6\x90\x35\x10\xb0\x6e\xf8\xb5\x11\xf1\x76\x50\x95\x36\x8e\x20\x0a\xc6\x01\xb4\x5e\x0b\x2f\xfa\x56\xd4\xf2\xa9\xcf\xc8\x74\x1a\xc0\x94\x60\x34\x91\x08\x8d\x86\x6b\xb3\x19\x9c\xf3\xff\x13\x7c\x26\x1b\x5e\xe8\xf5\x2d\x50\x84\x2f\x87\xd7\xa3\x5f\xb8\xf6\x1c\xfa\x28\xe6\x17\xb7\x00\x4d\x67\x4c\x29\xe4\x4a\x74\x6b\xe2\xf9\x9c\x93\x6d\xdb\xbe\x35\x59\x34\x52\xc7\xbd\xed\xef\xc0\x07\x61\x5f\xd9\x3b\xd3\xf0\xe5\x23\xdf\x17\x0e\x60\xa6\x60\x0f\xb0\x75\x2c\x39\xa1\x78\x55\x25\xb5\x6f\x70\xe1\xaa\xa1\x5c\xef\x22\xd6\x8c\xb3\xe4\x82\x36\x2a\x96\xd7\xa4\x26\xbf\x23\x7a\x99\x11\xca\x72\xf6\x85\x52\x65\xed\xfa\xf4\x6d\xe9\xb0\x59\x61\x85\x3f\x4f\x16\x4e\x5a\xb1\x7e\x16\xc0\x15\x19\x3d\x6f\x2a\xf8\xfa\x69\xa6\xd9\x56\x71\xf8\x57\x27\x16\x89\x2c\x3e\x4f\x0b\xf8\x7e\x04\x29\x75\x2d\x21\xec\x72\xe0\x07\xf0\x13\x98\x87\x01\x1c\x90\x68\xea\x5a\x87\x8f\xff\x3a\x38\x18\x1c\x0c\x0e\xb7\x83\xb7\xe7\x28\x44\x38\x47\x97\x52\x88\x75\xa2\x5e\xad\x57\x44\x48\x47\x75\x6d\x1c\xcf\xc7\x42\xe9\x5d\x45\x22\x12\x84\x46\x12\xd1\xcd\xb6\x8a\x44\x38\x50\x96\x9c\xa1\xa2\x8d\x27\xdf\xff\xb0\x95\x34\x00\xb1\x17\xdd\x88\xab\xb0\xd1\xcf\x8b\xcc\xc3\x5a\x23\xac\xb4\x7a\x65\x8c\x32\x04\x7b\x33\x80\x45\x5d\x85\x0a\xf6\xae\xac\xa8\xd9\x61\xf4\xa9\xc3\x09\x45\x16\x37\x19\xa8\x07\xc2\x06\x52\x98\x7c\xba\xa0\x8d\x96\x58\x69\xc5\xcb\x00\xa9\x88\xb3\x68\x2b\x3a\x8a\xd9\x2c\xe1\xe7\x26\x2a\xce\x6e\x42\xf8\x96\x60\x79\xc0\x88\x3e\x12\x8b\x9f\xa2\x51\xda\x87\xff\x8a\x41\x90\xa1\xd4\x84\xa8\x61\xa6\x23\x49\xd8\xcb\x8d\xad\x0e\xb7\xea\x59\x1b\x3b\x74\x99\x11\x6a\xf6\x45\xad\x59\x7e\x03\xf8\x3e\x65\x20\x62\x67\xaf\x4f\xef\x0b\xe7\x99\xf1\x37\x86\x77\x63\x94\x65\x71\xbf\x95\xbc\x65\x0c\x28\x7c\xfe\xd6\xe8\xe3\x19\xa0\xd0\x92\x4f\x36\x70\xb0\xa8\xe1\x6a\x64\x0f\x0d\xd0\xdd\xea\xda\xc4\xf2\x22\x3c\xb5\x44\x65\x00\x6b\x42\x22\x4b\x26\xab\xb4\x64\x90\x89\x16\x1f\x48\x3c\x12\xb7\x42\xd7\xf7\x46\x4a\x8a\xe0\x7f\x7a\xa4\xca\x1c\x76\xcf\xab\x8b\xb0\x9f\x5d\x5d\x84\xfd\x0d\xae\xae\x1c\xae\x6e\x75\x15\x40\x35\x22\xc3\xb3\xa4\xc9\x56\x89\x0b\xb2\xec\xbe\x17\x41\x1f\x62\x86\x40\x40\x05\x91\x08\x79\xac\xcc\xe9\x6b\x8b\x08\xe0\xa4\xa8\x6a\x12\x64\xb0\x39\x35\x53\x71\xe8\xa2\x82\xa9\x40\x16\x75\xba\xa5\x0c\x71\x98\x0d\x1f\x48\x64\x65\x12\xe1\xfc\xec\xa5\x60\x72\x59\x0d\x59\x64\xa5\x4f\x37\x40\x1e\xc6\xb0\x35\xfc\xc2\x04\xae\x86\x2c\xde\x92\xb4\xd1\x56\x91\xc4\xa9\x79\x88\x08\x72\x98\x20\xec\xf3\x83\x46\x1e\x23\xf2\x54\xe9\x7d\xee\x11\xe1\x5c\x7f\xcc\x7b\x1d\x85\x30\xa2\x04\x3b\x99\x67\xbc\x79\xf6\x09\xc2\xa2\xbe\xcc\x89\x6c\xdc\x60\x22\xeb\x3c\x07\x6b\x86\xa6\x33\xa9\x01\x32\x66\x23\x74\xec\x37\x96\x41\x1d\x16\xc0\xfe\x3e\xd1\x26\xa8\x5a\x8a\xb9\x5f\x32\x17\x5d\x14\xe8\xbc\x05\xd8\xab\x12\xba\x39\x70\x0d\xa5\x67\xe0\xfb\x0a\x49\xdd\xba\x42\xc0\x12\x93\x4c\xa8\x7e\x2f\x43\xcf\xe2\x9d\xd3\xfb\xdc\xf3\xf0\x88\xce\x50\xf8\x9b\x17\xc1\x6b\x87\xff\x12\xa6\x87\xdf\x28\x03\x93\x89\x53\x49\xe8\xf9\xc7\x77\x4e\x60\x49\x41\x58\xbe\x3b\xde\x67\xa4\x2e\xb1\x5f\x92\xca\x90\xd6\xfb\x8d\x09\x60\x05\x18\x6a\x08\xae\x08\x6f\x0d\xd5\x1d\x95\x34\xde\x2a\xea\xd3\x86\xde\x7d\x79\x08\x27\x93\x53\xb4\x16\x23\xdf\x42\x58\x9c\xc5\xae\x45\x8f\xde\xa8\x1c\x95\x6f\xc1\x1c\xf2\xe7\xf5\x9e\xd7\x9b\x61\xa6\x59\xa2\xa0\x7c\x97\x08\xa3\x54\x04\x59\x04\x39\x34\x3e\x60\xc0\xba\x9e\x41\x6c\xc5\x94\x6f\xa3\xe6\x33\xf9\x7e\x39\x6c\x86\xa0\x44\xb5\x44\x6d\x79\x2f\xdf\x06\x99\x26\x9b\xde\x0c\xe9\x60\x6d\xb7\x84\x01\x5e\xdb\x8d\x91\xf9\x64\xab\xb6\x47\x02\x59\x61\x67\x4c\xd1\x15\xc4\x6f\xab\x57\x61\x8b\x68\xea\x35\x68\x22\x29\xb3\xc5\xa6\x29\x2a\x19\xab\x2d\x41\xa5\xc0\xb5\xa5\x27\xf3\x8b\xad\x22\x27\x0d\x58\x81\x9a\xe8\xd6\x79\xb4\x16\x17\xee\xc5\x1c\xa0\xa0\x9a\x86\x92\xd7\x9b\x26\x20\x39\x50\x5b\xea\x51\x60\xb5\x25\x9d\xa4\xf9\x56\xd1\x8d\x80\xaa\x40\x34\x35\x08\xdf\x12\xb2\x11\xd7\x84\x37\x22\x42\xbc\x70\x79\x48\x29\x27\x6d\xb0\x49\xd2\x31\x61\x69\x43\x3c\x19\xd8\xdb\x90\x4f\xee\x83\xad\x22\xa0\x14\xd9\x6c\x06\x98\x85\x84\xa6\x65\x82\x20\xb5\xf8\x5d\xe3\x0a\xf9\x31\x08\xe4\x2d\xc3\x9a\x43\xc3\xb4\x27\x7f\x58\x24\xb2\x62\x8c\xfe\x15\xc3\x36\x4b\xb5\x1e\x31\x2f\x47\x24\x2d\xe4\xbc\xad\xbf\x4a\xe7\x9c\x73\xee\xc9\x1f\x29\x43\xed\x6b\xf4\x45\xaa\xed\xf7\xc1\x0f\x69\x5d\x0b\xb6\x19\x1f\xa4\xd6\x63\x7c\x21\x0b\x09\x82\x80\x5c\xbf\x24\xd1\x5c\x94\x26\x30\xf7\x1a\x67\x74\xaf\xf9\x5d\xf7\x4e\x97\x2d\x0f\xcf\xda\xd6\xaa\xd0\x71\xeb\x05\x5a\x87\x58\x82\x05\xdf\x92\xaa\x83\x2b\x04\xa4\xce\x1e\x60\xdf\x8a\xe0\x54\x78\xd8\x27\x4e\xcc\xd9\xa4\x11\x56\x2f\xa6\x70\x12\x07\x42\xdd\xc5\x20\x15\x26\x44\xfe\xf1\x12\xee\xc7\x6a\xa5\x64\xb8\xe9\x38\x66\x8c\xe3\x4f\xaf\x96\x47\x02\x49\x14\x12\xc7\x9a\x68\x6c\x82\x8f\x03\x11\x31\xab\x91\x6a\x1a\xb4\x8f\xd5\x47\xff\x84\x1c\xb9\x7c\xb1\x38\x6a\x5c\xfb\x0c\x52\x66\xfd\xcf\xff\xf9\xbf\x8d\xce\x1f\x27\x11\xbc\x42\xf0\xba\xc5\xd1\xae\x27\xf0\x38\x3b\x81\xfe\x14\x84\xe5\x79\x80\x2a\x7c\xf8\xd6\x11\x91\xbc\xe4\xd6\xac\x0a\x3d\xaf\xd8\x9e\x1e\xa0\xb9\xa8\xd9\xe3\xa3\xd3\xca\x80\xd9\xb2\xce\x97\x77\xe2\xd3\x63\x67\xc5\x3f\x0f\xd0\xa6\x50\x59\x0f\x50\x21\xeb\x7d\x88\xd6\x73\x37\xa8\xc0\xd9\xdd\x44\xca\x56\x47\x7b\xdf\x0f\x35\x44\xd0\x17\xfa\xc3\x1c\x59\x24\xac\x83\xd3\xc7\x1d\x10\x46\x06\x8c\x6a\x0a\xd1\xcd\x3e\xd4\x53\xca\xfb\x6c\xb3\xad\xa6\x98\x34\xee\xe9\xfd\x6b\x41\x2f\xfb\x1e\xa0\x6d\x69\xa6\x55\xca\x8a\xce\x7c\x1a\xc9\xac\x06\x9d\xd8\xf5\x4f\x11\x84\x38\xe1\xd6\x95\x99\x12\x5e\x13\xef\x12\xfa\xe5\x0e\x53\xaf\xd5\x78\x42\xaf\x0d\x58\xaa\x72\x2a\xe7\xf5\xa7\x40\x24\xc2\xab\x66\xf2\x05\xe3\x8a\x9d\xe1\xd5\xdf\xbb\xf6\xb4\xe8\x07\xfe\x12\xa0\x20\x8e\x38\x81\xca\xf4\xb0\x1c\x88\x83\xcc\xb1\x5e\xed\x82\xad\xc8\x22\x2c\x25\x09\x19\xbc\xa2\x12\x96\xf5\x27\x72\x18\x6b\x7e\xd3\x7f\x62\x97\x44\xd3\xa8\x20\x0f\x44\xb0\xc5\x9b\x42\x7f\x68\x19\xa7\x55\x1e\xd8\x74\xf2\xed\x48\xa3\x80\x95\x12\x5e\x23\xb6\x87\xf4\xab\x95\x07\x6a\x7f\x4e\x7c\x20\x78\x84\x39\xad\xcc\x43\x06\xc6\x08\xfb\xf0\x93\xed\xda\xfd\x43\xfd\x30\x22\x5c\x82\xb3\x7d\x04\x02\x32\x2d\x08\x96\x0d\x9c\x4e\x74\xdf\x4f\xbf\x35\x3b\xd4\x59\xc5\xbb\xa7\x3f\x93\xbd\xaa\xfc\x92\x15\xb2\x6e\xab\x2e\x4a\x93\xed\x58\xa9\x04\xb2\x84\x10\x2e\x3b\x1e\x13\xff\x26\x0b\x98\x5d\x10\x34\xf8\xe2\xe8\xa1\x5c\x1b\x51\x1d\xb6\xd4\x3a\xa1\x4e\x2d\xbd\x0a\xc6\xe5\x03\x3c\x4d\xe7\x77\xe8\x96\x0d\x3c\x87\x94\x82\x69\xc6\xbf\xb3\x81\x0a\xd7\x01\x19\x8d\x3d\x0f\x52\x33\xc3\xdc\x71\xba\x65\xd4\xcb\x49\x1c\xb8\xd6\x84\xc4\xd8\x4f\x36\x4f\x11\x7c\x15\x6f\x9c\xe1\x1f\xd2\xf8\x3b\xc8\xf3\x5a\xb1\x00\x10\x88\x5a\xdf\x65\x5d\xc9\x04\xe7\x4b\x65\x34\x0a\x33\x61\x52\x1c\xd2\x27\xee\xa1\x7b\x6e\x4f\x4c\xe3\x8c\x09\xa1\x9d\x69\x16\x80\xf2\x56\xbd\x6c\x33\xa8\xf5\xab\x46\x1b\xa7\xe9\x44\x39\xd4\x7c\xa3\xb8\x92\xe6\x29\xb3\xf4\xad\x53\x12\xfc\x84\x90\xac\x93\x43\xf5\xb5\xb0\xdb\x65\xc3\x47\x94\x5f\xa4\x9b\x4e\x2f\x70\x53\x73\x78\xe9\x93\xe9\x18\x60\x0f\x06\xba\x61\xc7\xfb\x77\xe1\x59\x91\xbc\x72\xcb\xb0\x5c\xda\xd1\xe6\x6c\x99\x2b\x65\x23\x4d\xfb\x1c\x03\xef\x32\x0e\xfb\x11\x94\x59\x71\xef\x37\x05\x27\xf9\x2f\xff\x5f\x04\xff\xe5\x8f\x76\x39\x5f\x57\x4e\xbe\x59\xf5\x75\x0e\x27\xdd\x8f\x26\xd5\xc1\x1f\xc2\x63\xbe\x9e\xff\x27\x05\x5d\xed\x4c\x8d\xb8\xd6\x0c\xa8\x94\xf5\x94\xba\x87\x27\x32\x2a\xa2\x16\xb0\xe6\x71\xc0\x50\x9f\x41\x0c\x30\x83\xbe\x65\xa4\xb9\xb5\x20\x06\xe3\x00\xe1\xa9\x35\x26\x6c\x66\x7d\xfc\x68\x33\xe8\xcd\x06\xf3\x1b\x4e\x3f\x00\xdf\x0c\x3c\x32\xff\xf8\xd1\x16\x4a\x8a\x8f\x1f\x6d\x0a\x02\x48\x8b\x6f\x19\xb1\xa2\x58\xeb\x95\xd9\x0c\x5a\x14\xcc\xa1\x05\x3f\x41\x2f\x66\x60\x1c\xc0\x7d\x1f\x30\x30\x06\x14\x0e\x8a\x90\x1e\x71\x00\x13\x70\xd5\x0c\xc7\xf9\x19\x4a\x6c\x59\x02\x5d\x88\xb2\x48\x14\x9a\x4a\xf7\x9f\x2b\x53\x18\xa0\x20\xb0\xc6\xd0\x0a\x61\xc4\xc5\x79\x0e\x0c\xb0\x3c\x55\x54\xc0\xa2\x37\x94\xc1\x79\xff\x1a\xf9\xd0\x92\x6b\x66\x01\x2f\x22\x94\x5a\x20\x08\x2c\x89\x1c\x5a\x06\x60\x33\x74\x67\xe2\xe3\x4a\xe8\x2c\x0f\x60\xa5\xf5\x61\x44\x43\x67\x01\x35\x66\x3f\x80\x57\x30\xd0\x20\xf5\x94\xa9\x2a\xba\x84\x7c\xe7\x67\x71\xed\xe4\xc1\x6b\x71\xb7\xf8\x33\x92\xd4\x76\xd3\x53\x2b\x82\x6f\x22\x29\x0e\x1f\x27\xab\xbb\xa5\xa6\x12\xf1\xa1\x8c\x78\x4e\x02\x08\xa8\xc8\xc0\x60\x01\x4b\xcd\xe4\x99\x84\x48\x18\xa0\xe6\x68\x1a\x01\xa1\xc4\x1c\x43\x76\x0d\x21\xb6\x28\x0c\x26\x7d\x19\x47\x89\xfd\x14\x3b\xc7\x01\x89\x7d\x11\x5f\xc9\xa1\xaf\x97\x56\x0a\x50\xbc\x62\x02\x43\x0c\x5c\x56\xa3\x99\xc2\x2b\x18\x81\xc0\x9a\x23\x1c\xb3\x8c\x6d\x42\x06\xee\xab\xb5\xe6\x04\xa8\x50\x1a\x46\x84\x4b\xaa\xd6\xff\xfc\xef\xff\x67\x85\x72\x9e\x9c\x44\x00\x13\x99\x85\xae\x67\x28\xc8\x34\xe7\x67\xa7\xdc\x16\x48\x24\x54\x09\x23\x32\x8d\x20\xcd\x8b\xaa\x5d\xa4\x2f\x10\x4d\x11\xee\x33\x12\xf6\x9f\x1c\x58\xea\xd7\x98\x30\x46\xe6\xfd\xc7\x07\xa5\x47\x90\x94\xbf\xbc\x19\xf4\x2e\xc7\xe4\x53\x2a\x81\x19\x79\x2a\xd5\x09\x25\xa1\x3e\x0d\xa1\x27\x74\x37\x0c\xc8\xd3\xe9\xa2\x85\x68\xfc\x5e\xb4\xd6\xf3\x9e\x70\x3c\x24\x99\x6a\x3b\xe4\xea\x6c\xd0\x01\xa4\x40\xbe\x8f\x31\x46\x78\xda\xf5\xf0\x9c\x3d\xe9\x72\x45\x51\x54\x1b\xc9\xb1\x5c\xbd\xe2\xd7\x00\xb1\xc1\xa0\x70\xdd\x58\x8e\xfd\x6e\x5c\xd3\x93\x53\xcc\x57\xaa\x7a\x9e\x2b\x96\x9a\xa8\x71\x64\xe1\x07\x2e\x27\x3e\x3b\x3a\xfe\xfb\x87\x13\xeb\xec\xc5\xdb\xa3\xb7\x67\x56\x4f\x6b\xfa\x54\xe1\x3c\xdb\xe5\x7f\x25\x11\xda\x8e\x56\xf2\xd4\x29\x83\x24\x66\xab\xd5\x41\xeb\x97\x9e\x3a\xda\x0f\x2a\x3e\xdd\xba\x95\xd2\x6b\x73\xfa\xcf\xd3\xb3\x17\x6f\x6a\x8d\x2d\xa7\xe2\xc8\x6a\xc6\x7c\xd5\x4e\x2d\x3d\x10\xca\xf6\xe6\x4b\xa1\x01\xeb\xba\x35\x1b\x24\xec\x49\xd6\x9f\x4a\x6d\x4d\xa9\x6c\x33\xd9\xb1\xe0\x73\x8a\xf1\x70\xb1\x8b\xb6\xd7\xc0\x96\xcd\xe5\x54\x33\x85\xb5\x4e\xa6\x92\xd5\xa4\x9a\x90\x54\x17\xf0\x58\x7f\xf6\x12\x05\x50\x39\x1e\x76\x51\x08\x54\xa8\x98\x6b\xee\xb6\x77\x73\x75\x52\x5f\xde\xeb\xdd\xe9\xbd\x84\x41\x26\x3c\x04\xd5\x82\x82\xd8\x3a\xea\x74\x33\xc5\x04\x3a\x23\x71\xe0\x5b\x04\x07\x37\x86\xac\x08\xf9\x13\x0b\xe0\xca\xfe\xe0\x3c\x64\x37\xa9\xa0\x93\x48\xb3\xba\xeb\xee\x49\xae\x9b\x26\x98\x4a\x22\x42\xae\xad\x02\x2c\x82\x7d\x99\x40\xcb\x9c\xa4\x8a\x22\xd2\x71\x15\x61\xe2\xea\x40\x5d\x4b\xa4\x2c\xa6\xae\xe5\x01\x06\xa7\x24\x42\x90\x0a\x19\x4e\x57\xed\xbd\x5f\xa1\x4d\x51\x58\x6b\xa9\x2d\x2a\x20\xeb\x3e\xc4\xb6\x0e\xec\x44\xea\x3d\xfa\x5c\xdc\xaa\xee\x23\xed\x46\x99\xf9\xea\x3b\x52\xc6\x40\xd3\xac\xa0\x77\xaa\x1e\x87\xbf\x00\x9e\x07\x43\x26\xcf\x7e\x7d\xf9\xdb\xff\x03\x85\xfa\xbd\xb8\x22\x86\x42\xf3\x2f\x98\x95\xdd\x3e\x29\x44\x1c\x06\x04\xa4\xe9\xd3\x95\xad\x42\x9a\x23\xcd\xa9\x36\x65\x1f\x28\xda\x51\xcb\xa6\x2b\x5b\x65\x0c\xad\xf9\xf9\x6a\x8d\xf5\x8c\x10\x0a\x4d\x19\xb7\x82\xbc\x1b\x23\xf4\xdb\x51\x4a\x4a\x18\x6d\x42\x91\x8a\x4c\x53\x4d\x63\xbd\xc7\x71\x82\x9b\xec\x79\x9c\x30\xd2\xb5\x1c\xc8\x79\x10\x4b\xe7\xb5\xe6\xa3\x59\x4f\xac\x78\x36\xeb\xb9\x69\xde\x22\xa7\xc7\xdb\x83\x88\xf1\xbb\x78\x64\x8d\x23\x72\x4d\x65\xa0\x22\x9f\xa3\x95\xf7\x98\x5a\x7e\x96\x1f\xc4\x66\x78\x0f\x81\x7f\xb3\x8c\xac\xbb\x51\x81\xf5\xbd\x34\x0d\x8b\xfd\xdd\xf6\x62\x61\x4c\xed\x99\x00\x49\x2a\xeb\x1b\x6c\xc7\x33\x72\xad\x56\xe1\x8d\x32\x60\x76\x16\x5f\xf3\xe7\x65\x89\x38\x5b\xaf\xf2\xe8\x64\x10\x68\x30\xd4\x7a\x04\x4f\x50\x34\xd7\xd2\xd3\x83\xad\xb6\x85\xad\xf6\x58\xe2\xcc\x7a\x9f\x4a\x9c\xeb\x33\xd7\x96\x30\x8a\x4c\xc1\x2e\x79\x74\xd1\x78\x3c\x47\x35\xee\x87\x36\xc1\x29\x74\x8d\x69\x62\x1a\x40\x6d\xe3\xde\xd9\x70\xde\xc9\xe3\x4c\x56\xec\x94\xd5\x25\xfa\xb9\xd8\x26\xa5\xac\xe3\xa7\xab\xf5\xfe\xc5\xe9\xd9\xbb\xf7\x2f\x94\x18\x35\x87\xd8\x93\x62\x91\x12\x9f\xaa\x8f\xb4\x02\xcb\xc9\xf9\x13\xa9\xb3\x5b\x52\xbe\x9a\x5d\x18\x00\x0f\xce\x44\x1d\xf8\xc4\xcb\x48\x64\x7c\x12\xae\x44\xf9\x0d\x92\x73\xfd\xb1\xe6\x24\xa6\x90\x45\x20\xb4\x4b\xa7\x60\xe4\x17\xe2\xbd\x24\x6b\xd2\xe0\xe2\x99\xc1\xe6\xd2\xde\x42\xff\x24\x71\xe6\x5e\xa0\xa5\x4a\x46\xf8\x95\x20\x27\xfa\x23\xc1\x2e\xbd\xe6\xda\x63\x77\x90\xee\xe7\x6b\xb4\xec\xae\xa0\xf6\x59\x7a\xa2\x5d\xce\xce\x86\x79\xa6\x94\xdb\x85\xe7\x6c\xc0\xd0\xbd\x5e\xf3\x76\x56\x77\xb0\x26\xfb\xb6\xbc\x57\xf4\xf9\x69\x76\xbf\xb6\xed\x57\x3f\x3f\xfe\xf0\xcf\xf1\xc9\xdf\x57\xb6\x6d\x87\x11\xf1\x63\x8f\xf5\x65\xc1\xe9\xae\xe7\xbb\xfc\xaa\xcf\x47\x8b\x69\x93\x82\x25\xd5\xe5\xca\xcf\x8e\xae\x00\x0a\xc0\x38\xf8\xff\xd8\x7b\xbb\x2d\xb9\x6d\x64\x5d\xf0\xfe\x3c\x05\x36\xf7\x9a\x9e\xee\xe9\x4c\xd5\x8f\x24\xcb\x72\x4f\x4f\x9f\x52\x55\xd9\x96\x5d\x92\xaa\x55\x25\xbb\xdd\xb6\xd6\x59\x28\x12\x99\x09\x17\x93\xa0\x01\xb2\xb2\xd2\x7b\xf5\x5a\xfb\x1d\x66\x5f\xce\x45\xbf\xc5\xb9\xef\x47\xd9\x4f\x32\x8b\xf8\x21\x41\x12\x04\xc1\x9f\xfc\x29\xb9\xf6\x39\xcb\xad\xca\x64\x82\x40\x44\x20\x10\x11\x88\xf8\x02\x75\x82\x32\x85\xe6\xe8\x3a\x4e\x0a\xbf\x71\x41\xd1\xcc\x9b\x78\x8b\x24\x89\xd9\x17\x07\x07\xab\xd5\xea\x89\x62\xf0\x13\x9f\x2c\x0f\x02\xb2\x8a\x32\x8b\x57\x9f\x71\xae\x2d\x25\x41\x80\x98\x23\xbf\x8b\x54\xf3\x04\x5f\xd8\xd2\xe1\x1b\x93\x93\x32\xfd\x4b\x53\xbf\xa5\xfd\xe5\x35\x01\x69\x3c\xa7\x30\x40\x13\x40\x11\x3f\xba\x00\xba\xc7\x22\x15\xff\x06\x47\x90\xae\x65\x26\xbf\xf0\x09\xd4\x84\x9f\x80\x37\xfc\xb2\x0b\xe5\x57\x5d\xa7\x64\xb9\x4c\x23\x9c\x88\xe7\xcf\xa3\x04\xd1\x98\x62\x86\x00\x0a\x30\x9f\x04\x60\x08\x2e\x43\xc4\x58\xb8\x7e\xd2\xbc\x73\x3b\xdf\x36\xb4\xc8\x4a\xce\x22\x65\x16\x48\x42\x9f\xe9\xdc\x70\xbf\x1d\x6c\x79\x5b\x88\xa3\xdb\x26\x6a\x37\x85\x86\x1a\xaa\x31\x62\x18\x19\x5f\x21\xc9\x59\x35\x77\x0a\xf2\x9f\x8b\x07\x4a\x99\x66\xc5\x26\xf0\xd5\x73\x17\x99\xbe\x49\x0c\xc9\x72\xff\xfa\x67\xf6\xff\xcc\xb3\x32\x6f\x83\x6c\xd5\x0d\xbb\x20\xdf\x01\xec\xe9\x14\xa5\xd3\x15\x62\xc9\xf4\xe8\x09\x5c\xc2\x5f\x49\x04\x57\xac\xbc\x31\xf2\xa7\xa7\xf9\x2c\xa7\x2b\x1c\x05\x64\xc5\xa6\x70\x19\x7c\xf6\xec\x09\xba\xd7\xd7\xfc\xbd\xf8\xce\x2b\xcd\xfd\x7f\xef\xcb\xcc\x43\x1c\xa5\xf7\x62\xde\xda\x9c\x2f\xb2\x4f\xf7\x74\xc6\x01\xa4\x2b\x1c\xd5\xa6\xbc\x84\xfe\xbb\xab\xd2\x94\xdd\x2d\xb2\x0d\x49\xbb\xa6\x5e\xec\xe2\x8e\xf2\x07\xf7\x5a\xde\x8b\x69\x3e\x38\x81\xd7\xa6\xfe\x50\x24\x5e\x9b\xf2\x06\x44\xbe\xd9\xbd\xe2\x66\xf5\x74\x4e\xe1\x7a\xfa\xfc\x30\x0f\x96\x97\x03\xa2\xf5\x2d\x92\xdb\x08\x69\x82\x43\xfc\x2b\x62\x40\x1a\x39\x19\x61\xa6\x09\xd1\xcc\x76\x15\xf0\x23\xa9\x30\xaa\xf4\x37\x7e\x76\x78\x98\xc7\x87\x33\x92\x45\x24\xc1\xa2\x5e\xd4\x70\xba\x26\x0b\x4c\x03\xde\x23\x67\xdd\xd6\x38\x92\xc4\x28\x02\x8c\xa4\xd4\x17\x71\x44\x61\xbd\x0e\x34\xcd\xe5\x07\xad\xfd\x23\x9f\x55\xfb\x47\xb6\xde\x2b\x14\xa6\x74\x43\x04\x48\x3a\x54\xe2\x41\xf1\x9c\x1c\x67\x27\xf9\xb2\xc5\x84\x47\x72\x26\xe6\x28\x42\x14\x86\xfb\xd2\xb1\xfe\xfa\xdb\x6f\xd9\xe7\xe7\x5f\x25\x3b\x4e\x97\xb5\x87\xa4\x5a\xc2\x50\x0c\x27\xe8\xba\x62\x67\x5e\xe1\x04\x81\x26\x60\x20\x6f\x50\x99\x5a\xf1\xba\x72\x7d\xda\x92\x04\xdc\xb5\x96\x1c\x2e\x8c\xdf\x7a\x7d\xda\x02\x32\x3e\xc2\xeb\xec\xbd\x63\x77\x99\x19\x1a\x66\x92\x25\xab\x80\x2d\x08\x4d\x00\x5f\x83\xa8\x10\x5e\x60\xe6\x10\x5f\x32\x7e\x30\x3e\xeb\x39\x59\x32\x56\xbc\x51\x65\x27\x65\xde\x6b\x1f\x9b\xd8\xdf\x14\x3f\xcf\x0c\x1e\x42\xa7\xcb\xe2\xd7\xfa\x5c\x57\x6b\x86\x57\xeb\x39\x90\xff\x3b\x15\x4f\x5b\x1c\x8e\xa3\x46\xd9\xd0\xaa\x65\xaa\xfa\xcd\xa2\xb3\xc7\xe3\xab\x7c\x3f\x40\xf7\x71\x08\x71\x24\xf2\x61\xf7\x85\xc1\x3a\x23\xaf\x79\x6d\xbf\x7d\x17\xa7\xf8\x80\x43\x00\x4c\x63\xec\xdf\x66\x07\x95\xda\xc9\x24\x3a\x15\x97\xc2\x1f\x65\xa5\x9f\x39\xce\xc5\xdf\x91\x3f\xe9\x5e\x49\xb8\xe1\xa5\x5f\x90\x39\x71\x14\x60\x8b\xfc\x35\x86\x19\x55\x78\x31\x0f\x37\xd6\xc3\x8c\x0d\x51\xc4\x6a\x50\xd5\xfb\xc0\x10\x38\x13\x87\x8f\xf5\x12\x43\x3e\x23\x17\x36\x66\x5d\xfe\xf0\x65\xe3\xc0\x61\xc5\x45\x2a\x9d\x27\x2e\x50\xc1\x29\x3f\xf3\x3c\x95\x5d\x90\x99\x0a\xa4\x11\xef\x7d\x13\xfb\xfa\x07\x99\xb3\xed\x8b\x2c\x82\x84\x00\x31\x13\x00\x01\x1f\x13\x64\x33\x92\x39\xdb\x9f\x3d\x8b\xef\xc1\x3d\xff\x9f\x7a\x54\xab\x6e\x57\x95\x8a\x64\xd1\x2f\x86\xa0\x5e\x48\x44\x86\x86\x6a\x50\x3f\x93\x4d\x81\xba\xd4\xc9\xf6\xbe\xa7\x6a\xb1\x0b\x08\x9d\x9f\x11\xd5\xa7\x58\xdf\x57\x1f\xde\x5f\x80\xab\xf4\x26\x20\x2d\x4d\x8c\xbb\xc2\x5d\x95\x2f\x9f\x32\x5b\xa1\x98\x42\xd9\x56\x50\xaf\xae\xf6\x09\x90\x25\xe1\x01\xf1\x99\xad\x67\xc0\x50\x91\x91\xcd\x39\x21\x45\x2a\x0b\x1e\x90\x08\xfc\xf4\x53\x66\xc5\x32\xbd\xc1\x10\xaf\x99\x58\xa0\x48\xd4\x4a\x28\x92\x01\xbe\x6c\x75\x17\x75\x83\x00\x43\xbc\xc9\xa7\x1c\xe0\xa7\x9f\xbc\x76\x9f\xa3\xbd\x17\xd6\x26\xd5\xab\x6c\x49\x2c\xa0\x83\xc0\x77\x18\xad\x78\xa8\xf7\xd5\x1a\x9c\x44\x24\x5a\x2f\x49\xca\x44\xff\xd1\x96\x83\x67\x00\x32\x4d\xdd\x24\xe0\x28\x32\xf9\xfb\x4f\x54\x12\xca\x00\x90\x1a\xe7\x77\xb8\xe1\xd5\x0c\x15\xbb\xab\x05\xe4\xd9\x2e\xfc\x0a\x5f\xb4\x26\x4c\x23\x98\x66\x02\x96\x60\x1f\x26\x28\x00\x99\x45\x07\xee\x30\xcb\xec\xaa\x3a\xf1\xb7\x64\x5b\x4a\x54\x0c\x12\xdd\x21\xca\x30\x89\xce\xa3\x80\x77\xd6\x28\xc5\x7b\xd5\x97\x1c\x35\x05\xfb\xa8\x8e\x8e\xd1\x5f\x91\x88\xd8\x41\xed\xf5\x6d\xfe\x86\x69\xc6\x46\xe7\xe3\xb4\xf6\xe0\x5e\x7a\x22\xba\xca\x53\x13\xe5\xae\xc8\x02\x46\x01\xaf\x05\xc3\xcb\xcc\x73\x3e\x10\x0e\xb4\x3c\xe3\x54\x74\x0a\xc6\xb8\x74\x03\x34\x31\x68\xd0\x72\xc8\xab\x1e\xde\x62\xe5\x3b\x24\x76\xf0\xfd\xdb\xf3\x38\x4e\xbe\xff\xe6\xe5\xc9\xc9\xab\xf7\xd1\x02\x1e\xc0\xa2\x94\x0a\x67\xa6\x49\x8a\x03\xc4\x0e\x82\x83\xef\xdf\x1d\xc6\xc9\xff\x7a\xf3\x37\x3c\x3f\x79\xf5\x19\xfb\xe6\x45\xee\xf8\x8b\xd6\x45\xfa\x2d\x05\x45\x30\xe0\x0a\x56\x65\xc7\xc0\x4a\x63\xac\x3f\x74\x8c\xdb\x6c\x6a\x47\x2c\xe1\xfd\x35\x9c\xeb\x53\x7f\x03\xef\xf1\x32\x5d\x82\xec\x63\x70\x89\x24\xd4\x14\x32\x37\xee\x56\xe2\x20\x1b\x7a\x29\x89\x39\x3a\x6e\xee\xbb\x95\x7d\xc7\xc5\x4e\x7b\xf5\x53\xb3\x71\xe9\x17\x86\xbe\x27\xa8\x97\x7f\xd4\x90\x2c\x23\xe7\x63\xe8\x25\xd5\xdc\x03\xea\xa9\xda\x7c\x6a\x3e\x1f\xcb\xd9\xa4\x6a\x1f\xeb\x60\x1e\x4f\xed\x01\xcb\x4e\xef\x7f\xe6\xf8\x7e\x3d\x9a\xfa\x6c\xc4\xf7\x3f\x77\x7c\xff\x73\xed\xfd\xcf\x47\x7c\xff\x67\x8e\xef\xff\x4c\x7b\xff\x67\x23\xbe\xff\x85\xe3\xfb\x5f\x68\xef\x7f\x31\xe2\xfb\x3f\x77\x7c\xff\xe7\xda\xfb\x3f\x1f\xf1\xfd\x2f\x1d\xdf\xff\x52\x7b\xbf\xad\x2f\x61\xd7\xf7\x1f\x1d\x3a\x4e\xe0\x48\x0f\xe9\x8b\x3f\x5a\x83\xe0\x23\x1c\x59\x5f\x93\x15\x58\xc2\x68\x0d\x92\x4c\x23\x66\x6e\xd9\x0d\x92\x7d\xc1\x05\x70\x2a\xcc\xb5\x3c\xf8\xbd\xba\xbb\x7f\xca\xef\xec\x8f\x0e\xf9\x8f\xda\xfc\xb2\xe2\xb3\x7d\xc1\x72\xba\x52\xa1\x6c\x2b\x9a\x93\x80\x69\xb2\xa4\x1b\x31\x2b\x8e\xd3\x66\xc3\xfc\xd5\xa8\xfc\x48\xc1\x7e\x1c\x25\x68\x2e\x2d\x83\x3d\x09\xf8\xcf\xbf\x24\x7f\xfc\xe3\xd9\x2a\xda\x52\xc0\xbf\x94\xeb\xda\x60\x6e\x2c\x8e\xab\x4f\x7c\x83\x29\xb4\xec\xce\xda\xad\xf6\x19\x66\x71\x08\xd7\x0c\x60\xc6\x52\x24\xba\x9e\xe3\xa8\xd1\x9e\x72\x4d\x39\x1e\x1a\x80\xf8\x19\x53\x58\xc1\xd3\x6b\x70\x12\x06\x5f\x4a\xe4\xaf\x2a\xfb\x08\xd9\xc7\xa7\x14\x05\xac\x40\x55\x74\x6e\x4c\x38\x54\x15\x7e\x99\x86\xe1\x1a\x64\x7a\x1b\xcf\x30\x0a\x80\x8c\x1d\x70\xe4\xfd\xcc\x88\xe7\xf5\x0d\x19\xa7\xf3\x50\x33\xd0\xf1\xf0\xb2\xa9\xeb\xa1\x88\x8e\x1a\x7c\xb3\x3c\x95\xfd\x5a\x74\xc6\x6a\x1f\x8d\x14\x4e\x2a\xf8\xaa\xc6\xb6\x30\x37\x7f\xfd\x16\x39\xfc\x43\xce\x41\x01\x43\xa2\x26\x71\x80\x9a\x40\xf1\x77\xc5\x30\x86\x7c\x8a\x74\xff\xbd\xa5\x7d\xe0\x20\x76\xc9\x97\xd5\xbb\x06\xea\x0c\x53\x33\xda\x22\xbb\xd4\x05\xd0\xc9\xe5\x6b\x70\x4d\x6e\x51\x04\xf0\x4c\x42\xa1\x9c\x24\xd9\x10\x18\x46\x12\x1b\x83\xd0\xbc\xc1\xa2\xc0\xd6\xc8\x91\x34\xb2\xa7\x6d\xea\xb9\xa5\x74\x6c\x50\xbd\x6d\xe3\x79\x71\x4d\x51\x18\x1a\xaf\x4a\x5c\x0e\x8d\x1b\x02\x69\xe0\x7e\x68\x8c\x53\x60\xd1\x22\xb5\x09\x5f\xd1\xf4\x16\xe9\xe5\x24\x27\x71\x0c\xbe\x45\x96\xfe\x4e\x03\x24\x57\x7b\x61\x59\xcb\x88\x2f\x94\xd8\xc2\x38\xe6\x33\xd8\x72\x83\x5b\x94\x97\xed\x5a\x23\x36\x62\xae\x3c\x54\x03\xe3\xb8\x42\x3d\xfb\x43\x2f\x5d\x0a\x1e\x9c\x82\xd6\x7b\x66\x9d\xbf\x2e\x6c\xd0\xa1\x16\x7a\x67\xac\x55\x6f\x03\x29\xfe\x26\x9b\x7a\x24\x73\x3d\xc4\x3e\x8a\x18\x12\x9b\x60\xa7\x56\x7a\x7a\xf1\x22\x5a\x87\x77\x5f\x6d\xd4\x4a\xf7\x2c\x37\x7c\x2c\xbd\x61\x3e\xc5\xd2\x35\xf7\x54\xae\x7f\x67\x0c\xdc\x06\x5c\x1c\x91\x18\x47\x51\xc0\xf3\xe2\xf4\xc4\xd2\x9f\xc9\x9a\xc7\x42\xf3\x3c\x84\x19\x45\x08\xc4\x21\x8c\xfe\xcd\x62\x3c\xc0\x52\xf8\x40\x68\x85\x1f\x8f\x5f\x4e\x7e\x6c\xae\x07\xe0\xe5\xc3\x24\x4d\xfe\x42\xd1\xec\xcf\x30\x8e\x7f\x17\xfe\xb9\x8e\x3f\x53\xba\xde\xfc\x1d\x0e\xf2\x47\x2a\xf4\xc1\xa2\x9f\xef\xef\x88\x61\x0c\x42\xe7\xaf\xe5\xd7\x69\xd3\xef\x19\x82\x89\xb8\xeb\xf9\x1d\x6c\x7a\x06\xf2\x36\x7f\xf2\x56\x2a\x7b\x12\x35\x3d\xa9\xe0\x3d\x6d\x81\xcf\x1e\x05\x48\x9d\x60\xfa\x3f\x88\xb2\x06\xf0\x96\x7f\xe8\x72\x1b\xee\x86\xa0\xe2\x28\xa6\x47\x23\x8a\xe9\x3c\x53\xb4\x15\x41\x7d\x8b\x7d\x24\xe0\xdc\x16\xf0\x0e\x01\x18\x01\xc1\x9e\xbc\x92\x44\x9f\xd9\xa3\xe4\x3e\x24\xc9\x15\x79\x40\xe0\x32\x84\xd1\x2e\x24\xf7\x78\xa3\x0a\xf6\xeb\xe5\x72\x22\x3c\x6f\x93\xa0\x82\x05\x64\x00\xdd\xc7\x98\x22\xa3\x67\xf4\x28\xb3\x7b\x2a\xb3\xef\x51\x84\x76\xa2\x67\x9f\x6e\x5e\x5a\x3d\x2d\x8f\xd2\xce\x24\x1d\xf1\x5a\xaa\xe3\x94\x21\x0a\x38\xb4\x37\x40\xf7\x3e\x42\x01\x13\x30\x43\x49\x82\x02\xdb\xc8\xb9\x88\x54\xd1\xc0\x41\x88\x97\xd8\x16\xc7\x78\xdc\x1c\xfb\xb6\x39\xa4\x29\xb2\x8b\xed\xf1\x6c\x97\xca\x1c\x33\x10\x91\x04\x88\xcc\x0d\x27\x81\x75\x28\xa3\x8d\x29\xf6\x71\x34\x57\xa2\x6a\x89\xc9\x3d\x1c\xb6\x0a\x36\x78\xbd\x2a\x5e\x3a\xde\x75\x6c\x2a\xca\xc9\xd2\x9b\x29\xd6\x43\x26\x22\x2d\x15\x51\xf0\xfa\x6c\xc4\x18\xa7\x48\x56\x21\x51\xc8\x63\x26\xea\xad\xe5\x80\x91\x59\x1f\x95\xd3\x1c\x5b\xc0\x15\x86\xc6\x8b\xfe\x9a\x12\x8e\xd4\x86\x19\x78\x7d\x26\x02\x98\xd9\xab\x33\xb5\xc5\x3b\xfa\xef\x49\x68\x3a\x23\x5f\xb5\x8e\x58\xb1\xad\xa5\xa9\xf5\x08\x8c\x33\xdc\x28\x54\x58\x67\xbe\x50\xd8\x34\xf3\xae\x17\x08\xdc\xa4\x0c\x47\x88\x31\x40\x68\x76\x5e\x33\x12\xc1\x50\xdc\x1c\x91\x19\xc8\x14\x9e\x2f\xe9\xb4\x47\x9c\x44\x95\xce\xcc\xa7\x42\xe2\xac\x2d\x99\x47\x62\x25\x92\xcd\x98\xe5\xff\x5a\x4f\xe2\x2d\x73\xf3\xfb\x05\xa2\x08\xac\x90\x80\x87\x64\x28\x0a\xaa\x60\x0b\x30\x0a\xc0\x0d\x0e\x79\x3e\x9f\xa8\x8a\xdc\xa7\xfd\x29\xcd\xa1\x5a\xc6\x5b\x63\x76\xf0\x78\x5c\x15\xaf\x9e\x78\x51\x2a\xda\x25\xb7\x98\x6b\x5b\x65\x2b\xbf\xfa\xe3\xf6\x70\x0c\xfd\x5b\x90\x9d\x8f\x1c\xbc\x2e\x8f\x88\x0c\xb6\xda\x19\x80\x09\x8f\x04\x2e\x89\x2d\xa1\xd0\x72\xdf\xb4\x91\x9a\x85\xad\xdc\xfe\x70\xee\x27\x90\xea\x37\x96\x57\x02\x00\xa4\x0c\xa1\x6a\x18\x76\x0c\xc1\xe3\xaf\x2e\x8e\x86\xcf\xc5\xa2\x60\xe6\x34\x4d\x39\x62\x4c\xb3\xe1\x4b\xb5\x46\xc3\x1d\x65\x72\x1c\x6d\x13\x71\x19\xfc\x3d\x45\x7f\x90\x49\x57\x25\x60\xdd\xe6\xbb\x9d\x2d\xb3\x17\x45\xfa\xbc\xb9\xff\x0e\xc3\xed\xb0\x37\x7b\x75\x0f\xe6\xf2\x19\xef\x8e\xb5\xd7\x1c\x47\x57\x90\x89\x9f\x1b\x64\x26\x7c\x1f\x18\x45\x29\x0c\x4b\xae\xcf\x3e\x32\x3c\x73\x9c\x74\x4b\xef\x44\x4c\xfb\x95\x38\xf9\x36\xce\x74\xf1\xfa\x06\xb6\xcb\x2f\xcd\x7c\x97\x13\xdf\xe5\xa6\x86\x1c\x0d\x15\xc4\x70\x0d\x10\xf4\x17\x60\x8d\xa0\x5b\x73\xf9\xb1\xe1\x8c\x36\xaa\xdb\xc9\x6c\x6b\xd2\xf0\xc0\x35\xfc\x0a\x01\xde\x10\x0f\xf8\x0b\x48\xe7\x28\x10\x8a\xc0\xa7\x28\xc0\x09\xf0\x21\x15\x40\xba\xea\x4b\x74\x87\xe8\x1a\x3c\x3d\x04\x01\x5c\xb3\xcc\xa4\xa0\x08\xce\x12\xb3\xef\xb0\x6f\x5a\xe2\x0d\x89\x92\x45\xb8\x06\x27\x4b\xd1\x9e\xf0\x51\x4b\x38\x69\x89\x94\x09\x45\xb1\xcc\xc8\xd7\x5b\x53\x34\xdc\x94\x1b\x56\x9f\x50\x0c\xc3\x4e\x49\x4c\x1b\x96\x23\x39\x21\x2d\x43\x0a\xc3\xf0\x2f\x1b\x97\x1f\xf1\x5a\x25\x3f\xde\x0f\xa8\x56\xd4\xe3\xe2\x98\x0c\x0b\xc6\x3e\x34\x43\x5f\x66\x9d\xe8\xa6\x81\x68\x7c\x8c\x49\x64\x4f\xf7\xd2\x98\x96\x11\x1c\x52\x04\x2b\x7c\x53\x0c\xa3\x64\xc5\xca\x20\x26\xda\x8b\x55\x3b\x54\x35\x8f\x8f\xbc\x60\xa2\x56\x37\x28\xbf\x1f\xbb\x48\x70\x3c\xeb\x10\x16\x64\xbb\x45\x6b\xae\x0b\x28\xf2\x11\xbe\x43\x01\xe0\x0a\x1f\x64\x1e\xc1\xd4\xd1\x1f\xd8\x4c\x4b\xed\x01\x19\x5e\x45\x3f\x6c\x7b\x0d\xc5\x45\x2e\x4f\xdd\xd2\xb4\x3a\xfb\xd1\x12\x1c\xce\x9c\x54\x26\x81\x1e\x3d\x1d\x2c\xee\x3c\xff\x81\x7d\x0f\x76\xdc\xd9\x7e\x48\xd2\xa0\x0b\xe6\x40\x0f\x5c\xab\x76\x6d\xd0\x52\x0f\xe1\x34\x46\x80\x0a\x19\x36\xb4\xaf\x31\x6c\x98\x5a\x56\xeb\x05\x4a\xb2\xd3\xef\x36\x22\x2b\x80\x45\x99\xff\x8a\x97\xe9\x87\xf8\x96\x83\x43\xf8\x21\x61\x48\x7a\x4e\xbe\xb8\x19\x25\x14\xf8\x1c\xf7\x58\x7c\xac\x9f\x6d\x4d\x8d\x56\x2c\x33\x78\x8f\x7e\x49\x11\x4b\x58\xd1\x71\x25\x8d\xb3\x17\x1f\x3f\x03\x0b\x92\x52\xc6\xbb\x55\x0a\xe4\xef\x96\xd1\xb7\x03\x92\xec\x9d\x72\x8a\x9c\x08\x62\xb4\x60\xb0\xf3\xa5\x65\x3f\x48\x47\x82\x45\xee\xd2\x16\xab\x9c\x6a\xda\x20\x4b\x5c\x01\x97\x04\x89\x8a\x59\x3f\xf6\x02\x70\xe8\x05\x20\x39\xac\xa4\x01\x14\xac\xee\x8d\x7b\x5e\xef\x09\x00\x2a\xff\xe7\xe9\xf7\x87\x4a\x92\x1a\xca\x9c\x49\x94\x69\xd1\x53\x0e\xa3\xcf\xdf\x9f\x57\x3b\xcb\x1e\x02\x95\x9b\xf6\xea\xbb\xb4\xf7\x75\xb5\x6b\x4c\x43\x69\xc3\x35\xa6\xb2\x2f\x04\xc8\x29\xaa\x00\x28\x2c\xeb\x61\x5d\xdb\x1b\x4a\xb5\x51\x0d\xe6\x4e\x81\xc0\xc8\xcd\x9d\x02\xfc\x9f\x2b\xbd\x7c\x16\x35\xd0\x95\xe7\x05\xae\xbf\x9c\x95\x61\x53\xb7\x2c\xbf\xbf\xe3\x82\x00\x0c\x57\x99\x6b\xba\x42\xa1\x4f\x96\x45\x0e\xe1\x0c\xa1\xe0\x06\x0a\x5d\x66\x27\x92\xfd\x89\x51\x1d\xdd\x47\x30\xff\xfd\x3f\xa7\xce\x94\xfa\xdf\x28\x74\x7f\xc5\x60\x74\x3a\x8b\x64\xe3\x0c\xf1\xc7\xe3\x81\xd4\x7e\x20\x9d\x69\xd4\x03\xf2\x74\x32\x27\x67\xf6\x3f\x8f\x5c\xac\x3a\x7e\xe1\x27\x2d\x09\x9e\x26\x7a\x23\x1a\x2c\x47\xa2\xb7\x72\xde\xd4\x5a\x18\x76\x28\x10\x30\x83\xe1\xba\x87\x01\x29\xd1\xa9\x16\xf0\x0e\x45\x3f\xfd\xe4\x25\x00\x86\x14\xc1\x60\x9d\xf7\xc9\xa5\x69\x04\xa0\x6a\x97\x96\x10\xa0\x30\x86\x79\x8b\x6c\x6e\xc2\x06\x30\x81\xb6\x1e\x81\x9f\xb4\xda\x7b\xf7\xad\x83\xca\x1b\xbc\xeb\xc7\x2e\xc1\xd7\x8a\x6f\x46\x2a\xe7\x61\x08\x52\x7f\x31\x95\x0a\x64\xb7\x9d\x3b\x3e\xbb\xb8\xbe\xf3\x5f\xf9\x7b\x54\x75\x3f\x34\x69\xc2\xda\x63\x53\xec\xcb\xa7\x87\xaa\x99\x26\x6f\xbc\x8f\x6e\x52\x1c\x0a\xa4\x23\xc1\x1a\xc0\x59\x63\xdb\xa7\x7b\xd3\x1a\xf9\x8a\x4f\xb8\x08\x75\xdc\x38\xb6\x98\xa3\x48\x88\x9f\x03\x52\xd6\xce\x76\x9e\xbe\x4f\xc6\xda\x7a\xcb\x24\xde\x17\xc4\x0b\xf6\xfc\x18\x7f\xf9\x65\xf2\xd7\x4f\x68\xef\x35\x86\x93\x33\xb2\xcb\x20\x77\x81\x48\xc3\x6c\x47\xde\x00\x1c\xec\xfc\x65\x66\x5c\xba\xec\x7b\x6f\xe2\x2d\x64\xff\xf6\x6a\x38\xf9\xea\xcd\xf5\x65\x36\xb7\xf3\x65\x9c\xac\x37\x10\x54\x76\x77\xcb\x34\x62\x71\x00\x8a\xe5\xfa\x49\x36\xe9\x27\x3e\x59\x3a\x9d\x92\x5b\xe2\x6b\xb6\x81\xb4\x9f\x5f\xca\x3f\x47\x44\x2f\x28\x5e\x63\xe5\xa8\x98\x88\x99\xa3\xd9\xac\x76\xcf\x51\xb3\xa3\xcd\x99\xfb\xfc\x73\x23\x1c\xd7\xae\x98\x9a\x32\x44\x4b\x79\xdb\x1b\xc2\x11\xd1\x5f\x66\x65\xae\x9a\xd0\x16\x71\x29\x38\x5f\x2e\x4a\x08\x22\x1c\x20\x26\x93\x27\xd9\xdf\x77\x9f\x58\x16\x6b\xd0\x21\x9b\x45\x13\x29\xbf\xae\x8e\x27\x52\xdd\x97\xf9\x2c\x76\xc3\x3c\xf5\xfe\x7d\x66\x1e\x43\x51\xd9\xbf\xbe\xe2\x1f\x8c\x9e\xa4\x9d\xb3\x4f\xbe\xb0\x92\x9b\x5d\xe1\x9c\x9a\x95\x59\xa7\x8a\x29\xee\xb5\x56\xcd\xf6\xed\xff\x64\x64\x89\xa6\x02\xe5\x69\xdf\xce\x4e\x41\xe0\xb7\xe5\x5a\x0b\xc9\xfa\x91\x2b\x2d\x2a\x9c\x7f\x5b\xaf\xb2\x30\x32\xff\xad\xac\xb5\xa8\x0a\x40\xf1\xed\xbe\xf2\x5e\x21\x35\xec\x13\xbf\x67\xbf\x04\x51\x9d\xd3\x57\xa2\x57\xbc\x00\x26\xfb\x6b\x0e\x4c\x26\x10\xda\x37\x26\x07\x7c\x2e\x56\x09\x10\xb3\xdd\xa2\xd2\xfe\xbd\xc0\xdc\x84\xe1\x1f\x84\x9e\xce\xfc\x76\x8a\x7e\x49\x31\x45\xa2\x5c\x50\x07\x6b\x9b\x80\x1c\x93\x7e\x6f\xf0\xd8\xf2\x1c\x5a\x05\xd6\x7e\x52\xa0\x88\x63\x12\x81\xdf\xbf\x9e\x47\x84\x22\x70\x4a\x51\x90\x7d\x0c\x43\x03\xae\x66\x8d\xb7\x23\xa0\xb9\x4b\x8e\x42\x35\xb1\x71\xf0\xdb\x0d\xa3\xba\x23\xb6\x6f\x93\x21\xaf\x20\x43\x9f\x3d\x03\xe7\x91\x4f\x82\x12\xf5\xb7\x49\xfc\x1b\x3e\x09\x9f\x23\x56\x8d\x49\xfe\xf2\xb8\xfb\xc9\x80\x0f\x0c\x81\xab\x2b\x07\x8c\xc9\xf1\xc8\x9d\x32\xc4\x58\x38\x2a\xa5\xf3\x21\x87\x11\x79\x5f\x20\xb8\xae\x44\xe9\x44\x29\x74\x78\xcd\x03\x0f\x2d\x70\xb8\x99\x72\xde\x31\xdc\x56\x29\x92\x37\x56\x74\x30\x86\x3e\x9a\x72\xe4\xfc\x1d\xc7\x06\x9f\x5e\x84\xe4\xed\xf5\xdd\x8d\x31\x36\xe8\xf1\x79\x7a\xb5\x10\x61\x25\x13\x98\xf7\x10\x69\xcb\xfd\xdd\xab\x60\xf6\xf9\xbd\x0a\xe1\xc8\x7f\x82\x93\x30\x04\xa7\xf2\xf6\xd2\x76\xb1\xac\x7e\xd9\x22\x92\xad\x09\x76\x4f\x2d\x65\xf4\xfd\x13\xec\xe4\x00\xa9\xd9\x26\x12\x52\x17\x62\x56\xb9\xa0\xf5\x44\xb2\x23\x82\xfe\xa2\x23\x53\x6b\x1a\x19\x37\xbf\xb8\x41\x97\x3b\x9d\x08\x38\x9a\x11\xe3\x9c\x6b\x2d\x48\x45\xeb\xd1\x89\xd0\xa7\xc2\x06\x9d\xf1\x6e\x44\x4f\xd4\x2d\x18\xe7\x2d\xa5\x70\x2d\x59\x7b\x34\xf9\x51\x96\xe8\xab\xbf\x58\x98\xce\x35\xd5\x6b\x6c\x50\x5a\x99\xbf\xd3\x2a\x2a\x95\xee\x96\x34\x53\x39\x8f\x8c\x6c\xd7\x99\x69\x6d\x4c\x30\xbd\xca\xbf\x56\xed\x7c\x5a\xf3\x4a\x9b\x26\x5e\x9a\x3e\x2e\xe1\xb7\xc8\xc9\xf3\xd9\xf9\x24\xf2\x61\xb6\x3f\xbc\x20\xdb\x9d\xc0\x6b\xde\x61\xdf\x13\x1a\x06\x25\x6c\xfa\x46\xde\x1b\x66\xf1\x6c\xe2\xc1\x24\x81\xfe\x62\x9a\x10\x12\x26\x38\x2e\x18\xcc\x16\x64\x75\x86\x42\xc8\x6f\xf0\x8f\x0e\x0f\x0f\xcd\xfc\x91\xfd\x8d\xa4\xe4\xb9\x81\x56\x36\x4e\xa7\x7f\x3a\x7e\x77\x46\x52\x92\x08\xe4\xff\xfd\xe1\xe5\x25\x22\x71\x88\x76\xc9\x4c\x45\x94\x87\xc8\x4f\x99\x85\xb4\x47\xdc\xa4\xac\x9c\x82\xbe\x6d\x6e\x2a\x38\x8b\x6d\x32\xd3\x42\x5f\x65\x99\x08\xde\x2a\xc8\x8f\xe6\x84\xb7\x86\xb7\xf7\x39\x11\x02\xc4\x7c\x3d\x4a\x43\x96\x08\x64\x9f\x29\x00\xa3\x64\x01\x13\x80\x79\xf2\xc0\x0d\x02\x2b\x4c\x79\x35\x77\xf6\x67\xb2\x40\x3c\xff\x47\x56\x51\x0f\x20\x82\x93\xb9\x72\x5c\x36\x57\xa4\x20\x88\xdf\x64\x72\x70\x03\xb5\x9e\xa3\x01\xa4\xb7\x9a\x21\x47\x21\x66\x28\xe0\xa6\x1c\x9d\x67\x7b\xe2\x86\xd0\x00\x49\x80\x3d\x4e\x66\x61\xad\xf1\xff\x14\x7f\x77\x3c\x77\x4b\xb6\xa5\x9c\xd2\x54\xd8\x90\x79\xa8\x4a\x6c\x00\x65\x68\xe6\xf2\x6b\xb7\x2d\xe5\xb6\x39\x09\x82\x0f\x4c\x85\xa8\x5b\xdd\xa1\xec\x71\xb0\x5c\x33\x14\xce\x00\x64\x80\xac\x22\x81\x5f\xd1\x68\x57\xbe\x53\x4f\x68\x06\x89\x53\xdd\xd0\x56\x89\x70\x86\x42\x94\x34\x68\xbd\x4a\xc6\xa6\x7c\x56\x6e\x72\x2b\xa4\xf2\x82\xac\x5c\x57\xde\x4d\xba\x9b\x37\x68\xdb\x9e\x39\x6a\x28\x75\x72\x6a\x4b\xd3\x94\x07\x2a\xec\xef\x80\xd3\x65\x33\xa9\x9f\x1b\xcb\xfe\x1c\x27\x01\xb4\x77\x0e\x28\x3f\x51\x01\x97\xa8\x66\x70\x83\x71\xd2\x3f\x1b\xf2\x58\xb2\x03\x97\x44\xb2\xc2\xc0\x9e\x79\x2c\xb6\x88\xd3\xe1\xea\x35\x64\x92\x9d\x50\x5e\xa0\x04\x58\x2a\xff\xb1\x82\x11\x6f\x30\x2a\x84\x47\x00\x7b\x71\x71\xe2\xb9\xa7\x30\x0c\x73\xd4\x7e\x66\xa9\x71\x75\x22\x92\x4b\x51\x67\x75\xac\xa6\xab\x08\x29\xeb\x42\xf0\x2b\xee\xcf\xa5\x48\x65\x4d\xd6\xb1\x54\x12\x02\xde\x2a\x21\x40\xa6\x48\x3b\x1e\xaf\xe6\x6b\x09\x79\x23\x51\x2a\x8a\xd0\x7b\xd3\xea\xb5\x11\xb2\x56\xb7\x3e\xd9\xca\x45\xd3\x92\xa4\x0c\x25\x14\xc6\xca\xc6\x03\xe2\x29\xd9\xd1\x96\xff\xfc\x4a\xa8\x3b\x65\x46\x74\xd0\xdd\xc3\x8a\x3f\x31\x13\x19\xc8\x52\x40\x4a\x12\xc1\x65\x24\x8f\x48\xa9\x36\x0f\x85\x0c\x19\xd1\x99\x9d\x0d\x1d\x57\x25\xdb\x79\x9f\xb6\xa5\x1a\xef\x4b\xb6\x71\x97\x22\x8b\x01\x75\x16\x5b\x2d\xb5\x68\x5e\xad\x6e\x02\xb8\x2a\xc1\xd6\xba\x13\xc7\x24\xf5\x96\x13\xb8\x03\xd6\x49\x93\xe2\xbd\xe6\x60\x6d\x90\x22\x10\x11\xc0\x16\x90\x2a\x9f\x93\xdb\xe0\x4b\x18\xc1\x39\x6a\x7f\xa9\x6e\x13\x8c\x9e\xab\x5a\x84\x8e\x47\x0d\x46\x73\x51\xd9\x75\xa6\xea\x67\x7f\xff\xfa\xf9\xed\x97\xdf\x5c\x99\xa3\xd1\x0a\x22\x75\xd4\x84\xd5\x4e\x9d\xf2\x9b\x63\xd2\x0d\xbb\xa6\xe6\x18\x34\x9a\xd6\xa7\x0b\xe4\xdf\xde\x90\x7b\x7b\x87\x92\x93\x20\x68\x6b\x50\xb2\x20\xab\x93\x20\x78\x23\x2d\xc9\xc6\x0d\x38\x4a\xa4\xda\x1e\x68\x16\x12\xd5\x1a\x6a\x56\xcf\x75\x00\xa4\x68\x88\x33\xe7\x18\xba\xbc\x85\x66\xb2\x0e\x51\xe1\x57\xdc\xcc\x05\x2f\x9a\x70\x98\xdb\x4f\xa5\x39\xc5\x01\xb7\x05\x20\x8e\x10\x9d\x7e\x36\x7d\x36\x24\xa4\x2d\x46\x43\x61\x38\x3d\x02\xc5\xbf\x97\x38\x08\x42\x7b\xa8\xbc\x5f\xc4\xa2\xf5\x08\x77\x9a\xea\xb1\x36\x55\xca\xf7\x86\x89\xbb\xe3\x86\x05\xc4\x3f\xb5\xff\xee\x59\x60\xe0\x3c\xc0\x89\x6b\x54\xe0\x83\x00\xfc\x94\xfa\xa3\x65\x17\x8b\x87\xc5\x46\x56\xcc\xfe\x44\x82\x02\x6e\x04\x10\x0f\x3b\x13\x60\x33\xb1\x81\xfe\x21\x03\xd3\xd5\x74\xc9\x30\x68\x8e\x14\xc0\x20\x10\xea\x73\xe7\x15\xa2\x40\xfc\x11\x3e\x88\x52\xd1\x93\x20\x00\x17\xea\x0c\xd8\x68\x75\xe8\x40\xe7\xb9\xc5\x6d\x2e\xd8\x5f\xf1\x99\x2d\x19\x7a\x1b\x70\x88\x2b\xd3\xb0\x78\xc3\x9c\xe8\x25\x6f\x98\xff\xee\xad\x8b\x13\xdc\xdb\x4b\x1c\x42\xeb\x1c\x83\x81\x9b\x04\x6e\x04\x4d\xf1\x81\xa0\x86\xe8\x46\x10\x63\xff\x16\x69\xc7\x1b\x89\x4e\x8b\x06\xfc\x16\xc5\x86\x12\xf5\xd6\x71\x9d\xa3\xb1\xdc\xea\x07\xe7\x53\xf7\x75\xa8\x37\xeb\x4d\xb7\x65\x46\xb9\x5b\xf4\xfc\x89\x9d\x83\x18\xa0\x00\x27\x8f\x67\x52\xf7\x33\x49\x9a\x7c\x9f\xc2\xb1\xa4\x89\xc0\x4e\xcf\xa5\xea\x3c\x1e\x0f\xa6\xc7\x83\xe9\xf1\x60\x1a\xfb\x60\x72\x68\x86\x2b\x74\xdb\x16\x0f\xa7\x3c\xb8\x20\x0f\x91\x42\x8b\xe0\x84\x1f\x01\xf2\xea\xe8\x14\x2a\x5c\x5a\x41\x3a\xb5\x76\xc6\xaf\x9a\xb3\x33\xd5\x57\x17\x89\xca\x25\xad\xc4\xb7\xdb\x7d\x59\x99\x27\x99\xfb\xa9\x67\xf2\x5c\xeb\x14\x18\xef\x18\x9e\x6e\xbf\x17\x94\xbe\xb5\xc2\xe4\xba\x29\x8d\x70\x54\xba\xaa\x52\x2b\x36\xc4\x8f\xf2\x3b\x44\x47\x98\xbe\xd1\xe3\xdb\x22\x26\x38\x52\x80\x3b\x65\x88\xee\x45\xb2\xf5\xed\xf1\xe7\x21\x7e\xf6\xf2\xdb\xed\x36\x35\xce\x84\x56\xea\x03\xcc\x4e\xd2\x64\x21\xdb\xe0\xd3\xa2\x6e\x4d\x49\x33\x66\x67\x29\x0c\xb3\x67\xdc\x13\xd6\x3a\x6b\xab\x0d\xd6\x19\xe4\xb9\x6d\x83\x0c\xee\x77\x31\x8a\x3e\x30\x44\x5b\x63\xe8\x96\xa3\x2d\x0f\xe3\x70\xe1\xdb\x54\xb2\xc7\xe6\xed\xe6\xd1\xac\xe7\xa1\x71\x1d\x5b\xbb\xa1\xd1\xcc\xe8\xd2\x40\xfd\xf2\x3f\xf2\x3c\x31\xd7\xec\x4a\x17\x63\x92\x92\x55\xdb\xa4\x9d\x06\xf3\x49\xe8\x36\x4e\xbb\x33\x10\xa1\x55\xb6\xce\x2f\x31\x65\x49\xc5\x1b\x28\x7d\xd6\x92\xc1\xd1\xe6\x1e\xe8\xe5\xa5\x6d\xee\x41\x6d\x4a\x39\x0c\x7b\x05\xed\x52\x7b\x42\xe8\x09\xf9\xcb\xec\xc9\x62\xee\xae\x31\x76\xb7\x4c\xd0\x5d\x30\xe7\x02\xd6\x78\xa3\x7f\xb4\x7d\xd6\xe4\x6f\x6f\xe2\x4c\xf1\x40\x95\x31\x21\xfc\x74\xf8\x72\x5e\x69\x94\x67\xc3\x5e\xd8\x30\x47\xce\xcb\x8d\xf3\xaa\xfc\x38\xd7\x31\x1b\x0a\x66\xe8\x4d\x6d\x47\xe3\x84\xe3\x23\x5d\x73\x95\xdb\x68\x68\x37\x5a\x94\xb1\x32\xc8\xd3\x72\xb0\x57\xc6\x88\x12\x96\xce\x1d\xf7\xfb\xc1\xee\x19\x00\x5d\x39\xb7\x7f\x07\xaa\x6b\x7e\xa3\x63\x50\x8c\x0f\x37\xad\x64\xf3\xbf\x4a\xc3\x5b\xf0\x21\x0e\x09\x6c\x82\xc5\x69\x16\xca\x96\x6e\x16\x15\x98\x67\x7d\x8f\x7f\xe4\x05\xb6\xe1\xad\xb0\x97\xf2\x8a\x5b\xf5\x41\xbd\x4f\xa2\xf7\x5c\x3f\xf6\x26\x40\x29\xda\x09\xc8\x77\x79\x87\x3d\x3e\x24\x8b\xf1\x94\x2c\x97\x70\x1a\x20\xde\x60\x1c\x05\x20\xc4\x2c\xf9\x02\xd8\xa6\x36\x96\x4e\xd9\x0b\x55\x20\x8b\xac\x46\x53\x05\xac\x8b\x2e\x68\xb5\xac\x87\x99\xdd\x0e\xb9\x9c\x7b\x13\xe1\x0b\x09\x43\x9d\xb2\x39\x07\xa4\x11\x98\x3e\xb3\xe5\x31\x6c\x0e\x03\xb3\x08\x92\x8c\x19\x75\xe1\x8a\x71\xd7\x59\x85\xec\xaf\x27\xf3\x98\xcc\x02\x73\x56\x61\x2a\x4c\x9a\x25\x12\x3d\x66\x3d\x75\x34\x6c\x2f\xcb\x70\xab\x01\x12\xa5\x65\x46\xc8\x31\xfc\x2a\xa3\x54\x7b\x90\xa4\x2d\x42\x22\x0e\xcf\xc7\x7a\x98\x8e\x01\x91\xaf\x94\x09\xb3\xb7\xa5\x30\x4a\x44\xba\x15\xc3\x6c\xa3\x2e\x25\x42\x2b\x29\x76\x5d\x2f\x32\x6b\x07\x55\x2b\x6e\xac\x83\x23\xa6\xcf\xc5\xe8\x19\x97\xee\x34\x79\x3b\x29\xc0\x7f\x02\x2a\xbe\xb2\x20\xf7\xb6\xab\x4f\x38\x3a\xd6\x1b\x9e\x1b\x4f\xd9\x04\x9c\xa1\x3b\x14\x66\x9a\x9c\x4d\xc0\x89\xbf\x44\xe0\x1a\xc1\xd6\x62\x1e\x47\x17\x62\xbb\xc2\x51\x31\xe8\xcf\xb4\xca\xdc\x02\x40\xac\x9b\xb8\x74\x31\xec\xcb\xd2\xc1\x27\x53\x67\x75\x9c\xd2\x58\x1a\x2c\x55\xc3\xfe\xa9\x93\xed\xde\xd3\xf2\x1b\xa8\x79\x1e\x4c\x71\x4f\x67\x6b\xf0\x01\xd7\xf6\x38\xb9\x16\x65\x95\xbe\xa5\xd2\x9e\x91\xea\x15\x9a\x33\xdc\x33\x33\xd5\x11\x1a\x47\xda\xb4\x63\xf4\x3a\x75\xeb\x9d\xe9\x8e\x27\xd3\x20\x53\x4f\x27\x4f\xcd\x75\x02\xe0\xf7\xe5\x47\x84\x11\xcc\x2a\x4f\xfd\x61\xac\xad\xaf\xeb\xd3\xe2\xa5\x9a\x06\x53\x2f\x6d\x1e\xfd\xc1\x22\x15\xd4\xf6\xf7\xee\x30\x0a\x84\xe2\x13\x10\x05\x92\xe1\x2e\x15\x45\xfc\x51\x2d\x1b\xff\xa9\x43\xb5\x7e\xe5\x2a\x7a\x9e\xc8\xc1\x2b\xc2\x76\xd8\x03\x1c\x65\x1b\x04\x7d\x8f\x96\xe4\x0e\x75\xa0\xa9\xf8\x81\x33\x59\xc5\xe3\xbd\x28\xdb\xb5\xd6\x61\x1f\xca\x60\x24\x91\xb2\x47\x85\xfd\xda\x4a\xa0\xec\xd1\x4e\x84\xd9\xc1\xca\x7b\xd4\xbf\xb8\x2d\xbe\x56\xff\x32\x9e\x5c\xb4\x45\x9c\x9e\xda\x8b\x59\xda\x1d\x7b\x59\x4c\xff\xe8\xdb\xf7\xe8\x77\xc6\x45\x64\xff\xdd\x7b\x31\xd1\x1e\x1e\x7e\x3f\xb8\x0b\x2e\x4a\x7b\x08\x6e\x61\x8c\x23\xe8\xe0\x16\x85\xa7\x3e\x16\xb8\x45\x97\xf0\x42\x7d\x96\xed\x11\x86\xaf\x6a\xb1\x85\x40\xe3\xf5\xee\xc0\x2d\xa8\x38\x5d\x05\x41\xe5\x19\xbb\xc0\x31\xc0\x51\x36\x84\x00\xbe\xe6\x78\x28\x8c\x11\x1f\xc3\x04\x05\x20\x46\x34\xf3\x05\x31\x89\xd8\x23\xcc\xc5\xa3\x27\xbc\x01\x94\x8b\x1d\xfb\xc3\xd6\x7a\x9d\xc7\xe3\xb7\xf3\xf1\xcb\x8d\xd3\xfd\x3f\x7c\xb3\x69\xee\x69\x70\x5d\x93\xbc\xc1\xd1\xf5\x01\x07\x5f\x75\x1a\xfd\x03\xeb\x28\xa7\xf5\x63\x64\x7d\x2c\xc9\xd8\x83\xd0\x7a\x75\x36\x06\x6e\x3f\x06\xd7\x1f\x4d\x8a\xad\x56\x54\xd5\xd5\xfa\xde\x18\x14\x62\xa7\x08\x13\x7c\x2a\x8c\xef\x7d\xb0\x2c\x7a\x16\x35\xec\xd2\xc4\x90\x41\x42\x11\xf6\x03\xff\xfd\x9f\xff\x05\x3c\xad\x38\x4b\xfa\x35\x95\x03\xc7\x1c\xb5\xd7\x9e\xcf\x84\x16\x45\x73\x5e\xb9\x53\x0a\xde\x6f\xc9\x8c\xe9\xdf\xb4\xa0\xc3\x60\x42\x06\x53\x86\x28\x9b\xe6\xe1\xe3\xb6\xfb\x9a\x22\xce\xdc\x1d\x7b\xbb\x65\x3e\x38\x41\x4b\xe3\x04\x76\x7f\xdf\xd0\xa6\x01\x77\x18\x2d\x57\xc1\xd0\x52\xb0\xdc\x6a\xed\x5e\x20\x78\xa7\xa2\x0f\xd9\x17\xc7\x13\x91\xb7\xf5\xba\x3b\x4c\x72\x3b\x45\xa4\xee\xaf\x1d\x0d\xdd\x8e\x04\x71\x00\xaa\xc9\xce\xd2\x30\x8c\xf4\x06\x77\x63\xae\x73\x00\xee\xb9\x2d\x06\x7c\xec\x00\x1c\xfe\x68\xdb\x8c\x60\xdb\x6c\xff\x14\x87\x41\xf0\x78\x84\x0f\x39\xc2\x4f\x82\xe0\x37\x72\x7e\xbb\xfb\x7f\x2d\xce\x9f\x8c\x45\x89\xd5\x4e\x45\xcb\x7d\x4f\x2f\x1a\x8c\x02\xde\x45\xd5\x5e\xe4\x39\x4a\x78\x60\xe2\xdd\xa2\xf5\x54\xac\xc8\x3c\xaf\xf6\x60\xc1\x15\x7f\x50\x45\xa1\x79\xd8\x99\xcf\xfe\xc9\x93\x27\xca\x93\x14\x63\xb5\xf6\x39\x23\xd1\x95\x22\x46\xa7\x74\xfd\x21\x81\x85\x9e\x45\x15\xad\x5f\x6e\xcb\x10\xe4\x8b\xf2\x51\x54\x3b\x0a\x46\xb2\xbf\x0a\xd3\x27\xb7\xc4\xf4\xff\x6a\x06\x99\xf7\x06\xde\xe3\x65\xba\x14\xdc\xe7\x97\x56\x98\xc5\xa1\x38\x23\x3a\x5a\x9a\x7d\xcc\x11\x86\x42\xd1\x2f\xa8\xa3\x65\xe2\x3d\x97\x16\x97\xec\x6c\xf3\x4c\x9a\x1a\x17\x78\x29\x2e\xf2\x9f\x7f\x54\xa7\xbf\xc5\x5e\xe1\x0f\xe7\x8f\x76\x2b\x15\xda\xea\x6a\x8f\x0e\x5b\x96\x7b\x74\xe8\xbe\xde\xfc\xd9\x3d\x5e\xf0\x71\x1b\x7f\x8f\x3b\x30\xf8\xf8\x01\x70\xf8\x79\x1b\x87\x9f\x77\xe0\xf0\xf3\x07\xc0\xe1\xa3\xc3\x76\x99\xee\x24\xd4\x0f\x60\xcd\xc7\xad\x5c\x3e\xee\xc2\xe6\xe3\x87\xc0\xe7\xe7\xad\x7c\x7e\xde\x85\xcf\xcf\x1f\x02\x9f\x8f\x26\x87\x2e\xd2\xdd\x4d\xbc\x1f\xc0\xba\x4f\x2e\x2e\x5a\x56\xfd\x32\xfb\x3f\xf7\x65\xeb\x8f\x8f\x10\x39\x70\xb1\xcd\xc7\xa9\x27\x1f\x3b\x0a\x28\x5d\x8b\x4f\x38\x06\x58\x64\xda\xca\x4e\x5a\x4c\x78\xa8\xbd\x16\xdd\xbe\x05\x1e\x64\xe0\xb0\x67\x87\xb1\x7d\x25\x5c\x9f\xa6\x74\xed\x44\xfb\x86\xe0\xa8\x13\xcd\xfa\xd3\x62\xdc\x58\xab\xde\x08\x53\xcd\x5c\x07\xf4\x99\x78\xa0\x58\x92\x0e\x28\xd3\xae\x4e\x3b\xd3\xc4\xd8\x17\x66\x23\x71\x5a\x53\xaf\x3a\x67\x9d\xfd\x18\xa7\xdd\x45\x9c\xd6\xc0\xd2\xb1\x4b\xf9\x45\x95\xd2\x98\xb5\xfc\xbc\x3a\x6a\xb7\x95\xfc\x9f\xcf\xf0\x0f\xfe\x9b\xf7\x2b\x73\x25\xbf\xcc\xaa\x57\x15\xfd\xe3\x16\xf2\x7b\xa5\x5a\x96\x3a\x98\xe2\xb7\x68\xed\x87\x04\xde\x3a\x9c\xb6\x7d\x8c\xa4\xfa\xeb\xd9\x3a\xf2\x5f\x47\x97\x94\xcc\x29\x62\x1d\xca\xd1\xfa\x43\x11\x0c\xd9\x6e\xf2\xc0\xba\x20\xfe\xad\x3c\xc4\x15\xc1\x78\xe0\x0c\x64\xab\x01\x34\x8d\x22\x1c\xcd\x9f\x3c\x79\x62\x48\xae\xe9\x7c\x30\x0f\x5b\xac\xe3\xe1\xf3\x03\x0a\x43\xb2\xea\xb4\xf0\xab\x6c\xa9\x2b\x9c\x2c\x40\x2e\x33\xd6\xe0\xf0\x3a\xf2\x0b\xe1\x1a\xf3\xb8\xe9\x00\x15\x7a\x71\x76\x72\x39\x1c\x26\xf4\x51\xe8\x33\x3a\xfe\x86\x05\x9e\x8b\x51\x9b\xb0\x0b\x59\x1b\x55\xd0\xfb\x7b\xa6\x2d\xb6\x0e\xba\x8f\x43\x88\x23\x81\xf2\x1a\x23\xba\x64\x6d\x77\xa1\x6a\x35\x47\xc7\xda\x6d\x06\x47\xaf\xfe\x38\xf9\xf1\xa9\x99\x2e\x09\x99\xcf\x43\x74\x29\x86\x37\x5b\x54\x97\x45\x9d\x03\x38\x17\x93\x42\x81\x79\x0b\x2d\xc8\x2a\x7b\x5a\x3e\xe5\xec\x1d\x7a\xd6\x1e\xf4\x2f\x5d\x5a\xcf\x9f\x50\x4a\x56\x57\x4b\x18\x86\x1f\x62\x99\x44\xcb\xd7\xd2\xab\x85\xe3\x66\x26\x76\x46\x56\x91\xfb\xd4\x74\x93\xbb\xc9\x0c\xb4\x48\x4f\xa3\xc0\xb8\xfd\xb4\x9a\x5e\xcd\x7b\xcf\x36\x5d\x9f\xba\x8c\x57\x49\xca\x3d\x85\x11\x80\x81\x6a\x80\x39\x01\x37\x24\x59\x80\x58\x75\xef\x87\x51\xa0\x3a\x64\xf2\xbd\x4d\x92\x45\xf3\xe5\x6d\x8f\xd5\x7c\x87\x19\xbe\x09\x9b\xf2\xc5\x7b\x2e\x87\x21\xd1\xb4\x97\x01\x32\x93\x37\x76\xd9\x3a\x84\xb1\x3c\x01\x3e\x8c\x40\x80\x19\xbc\x09\x11\x98\x11\x0a\xd0\x7d\x82\x68\xb6\x58\xf1\x68\x88\x6f\x11\x10\xf6\x21\xa2\xec\x20\x86\x34\x89\x46\x5d\xf3\x09\x07\x29\x1f\x75\xc5\xa2\x67\x29\x6f\x08\x0c\x59\x8c\xfc\x84\x2f\x5d\x41\x7f\x4f\xc4\x9a\x44\x2f\x60\x5f\x04\x0a\x46\x5b\x4c\x04\xc3\x75\x82\xfd\x91\x25\x32\x33\xd2\x01\x94\x63\xc3\x10\x50\xa4\xdc\x91\xb1\xe6\xed\x27\xf8\x6e\x64\xb9\x0b\xc9\x1c\x47\x2a\x49\x00\x14\xc0\xeb\x3d\x32\x7c\x7a\x9e\x64\x0e\x87\x99\x3d\xd5\x43\xb3\x2e\x8c\x98\x47\x5d\xf3\x2e\xcc\x00\xc0\x33\x1c\x26\x88\xca\x44\x10\xa9\xb0\xc5\x67\x2d\x39\x14\x5f\xf2\x87\xf2\x4e\x27\x2e\x98\xed\xbd\xb3\x27\x44\x62\x47\x17\x64\xca\xea\x07\x0e\xdc\xf8\x04\x52\x1c\x3e\xf1\x9c\x86\x4f\x3f\x89\xe1\xd3\xcf\x5a\xf8\xf4\xd3\x14\x7e\x13\x79\x09\xbf\x89\x44\x84\xdf\x44\xe6\xc1\x6f\x26\xd5\xe0\x31\xb7\xc0\x62\x14\x25\x99\x0b\x66\x36\x8b\xb8\x73\xc6\xff\x3b\xa5\x88\xc5\x24\x62\xf8\x4e\x7d\x20\x8c\x9b\x10\x31\xc6\x6d\x95\xa9\x18\xa6\x39\x22\x93\x2c\x10\x0c\xaa\x68\x24\x06\x73\x3f\xa1\xb6\x87\xf4\xf1\xcc\x40\x6d\x64\xba\xc2\x41\x92\xa7\x3b\x5b\xaf\xd5\xb4\x31\x6c\xb7\x0f\x0b\xc8\xae\xa4\x24\x7c\xe8\x91\xda\xd0\x1a\x2b\x14\x0d\x19\x9d\x03\x86\x1c\x62\x7e\x2a\xc1\x46\x4a\xd6\xbb\xe5\x22\x5f\x98\x97\x0e\xc0\x4a\x0a\x14\x47\xc9\x7e\xe1\x1f\x38\x00\x28\xbd\x4a\xc3\x8e\x81\xf3\x86\xeb\xd4\xd6\x1b\x51\x47\xf6\xb7\x85\x6a\xfa\x0c\x68\x8f\x96\xf4\x19\xb1\xcd\x7d\xef\x35\xa6\x25\xbe\xd1\x6b\x3c\x9b\xab\x3e\xc6\xb6\x74\xf2\xd0\xb5\x17\xf1\x6a\x8b\xc6\xed\xdb\x90\x90\xf4\xe3\x8f\x99\x5f\xcc\x77\x11\xcf\x29\x70\x0c\x78\xb6\x2a\x25\xed\xd1\xc0\x4a\x00\xa0\xf9\x9a\x00\x86\x78\x1e\x4d\x97\x38\x08\xaa\xaa\xb3\xac\x84\x44\x75\x9a\x96\x3f\xe1\x9c\x25\xd3\x1e\xb0\xe5\xca\xdb\x5f\x20\xff\xf6\x86\xdc\x83\xd6\xf0\xed\x5b\x92\x9c\x84\x21\x59\x71\xad\xd2\x37\xaa\x5c\x5d\x59\x7e\xce\x0e\x58\x9f\x21\xd8\xdf\x6b\x81\xa7\xf2\x49\xfe\xbf\xc5\x2a\xad\xd7\x05\xe2\x74\xc8\xeb\x08\xc7\x8a\xb6\x6f\x61\x95\x63\x2d\xcf\x34\x67\xa7\xcb\x23\x63\x26\x4d\xb3\x96\x31\xef\xb3\x8a\x4c\x8b\xa3\x36\xca\x6c\x13\x4d\xc8\xa0\x54\x60\x1f\x27\x1e\x8e\xc4\x1f\xfc\xf4\x54\xe7\x95\xcc\x58\xfa\xbc\x22\x9b\xa2\x99\x65\xf6\x2b\xfe\xaf\xd2\x4f\x3e\x76\x81\x82\x31\xdd\x46\xa9\x70\x68\x03\xf9\x0b\x60\xc6\xa2\x46\x55\xa4\x42\xb9\xe1\x83\x1c\x19\x8b\x62\xdd\xc1\x54\x1a\xaf\xe2\xf4\xa6\x5a\xc5\x4b\x54\x13\x9b\x16\x6c\x59\x07\x1e\x3b\x90\x4e\x41\x03\xb7\x10\x8f\x27\x92\x31\x0d\xd8\xb1\x81\x86\xd5\x63\x43\x3c\xd8\x05\x7f\xd8\x3c\x7f\x16\xc3\xa8\x0f\x1e\x71\x23\x37\x4d\xf0\xc2\xa5\xc4\x82\x88\x24\x53\xe9\x75\xf0\xa7\xb5\xd2\x68\xd5\x22\x84\x27\xe4\x89\x2c\x22\x97\xac\x82\x09\x68\xb5\xdc\xac\x69\xdd\x6d\xe8\x97\x1b\xa4\xea\xff\x1d\x11\x79\xe3\xf4\xff\xb4\xcd\xa4\x41\x17\xf5\xcf\xea\xdb\x86\x4d\x80\x02\x9c\x90\x1e\x69\xc7\xfb\x71\x6e\x9e\x8b\xd9\x9b\xf7\xe5\xa7\x71\x76\x0e\x58\xe2\x28\x47\xe3\xb8\xe2\x76\x87\x45\x5f\xc2\x1e\x2a\x71\x3f\x24\x2e\x6f\xd5\xf6\xc9\x0a\x5c\xff\x15\xee\xa1\xbc\xc1\xc2\x31\x7e\x98\xf2\x56\x78\xf6\x9f\xb2\xcc\x0d\x5b\xe5\x1e\xca\xdd\xa7\xeb\x6a\x2b\x77\xe6\x61\xee\x26\x3e\xf9\x4f\x7a\x27\x39\xad\xd0\x34\xed\xed\x79\xdb\x8f\x5b\xcd\x71\xab\xa9\x80\xc3\xc3\xdc\x6b\x62\xf6\x9f\xf4\x66\x73\x5b\xe2\x03\xdf\x6d\xfb\x82\x8f\xd7\x78\x09\xbb\xc3\xce\x28\xa2\x7c\xc9\xa1\x31\x4a\x55\x48\x3a\x95\x67\x6e\x63\xe5\x1d\xfb\x11\x31\x86\xe7\x91\xa8\x8e\xc8\xfb\xc6\xda\xa9\x60\x09\xa4\x35\xdf\xf7\x09\x01\xac\x46\x62\xfb\xa8\xfc\x2d\x91\xb1\x47\x83\x19\x27\x19\x92\xe3\x3a\x13\xae\x29\xdc\xd6\xb5\x15\x91\x4b\xbd\xa9\x1b\x1c\x61\x6d\xb4\xea\x20\x95\x04\x83\x92\xf6\x91\xd8\x75\x45\x02\x2b\xaf\xc2\xe0\x25\xc4\x33\x4c\x97\xa7\x30\x16\x84\xf3\xc4\xd5\xb8\xa2\x34\x5b\x90\x15\x67\xdc\x89\x20\xec\xc7\xc9\x8f\x8a\xea\x1f\x44\xe1\x61\x41\xd7\x16\x6e\x15\x05\x19\xe2\x27\x67\x12\x4d\xcf\xa1\xeb\x40\x11\xed\x6f\x90\x56\xaf\x67\xaf\x15\x4f\x83\xa6\x13\x1f\xc9\x55\x35\x44\xeb\xff\xd2\x1e\xc2\xac\x17\x9d\x59\x9b\x16\xf0\xd3\x75\x23\xb0\x84\x2d\x37\x08\x3d\x1b\x16\x38\x8d\x6a\xc7\x21\x74\x1a\xa2\x06\x42\x98\x31\xa6\xc4\xaf\x8c\x7c\x8a\x5b\x7a\xd9\xbb\x8e\x3d\xd8\xf0\xbc\x56\x0d\x6f\xbb\x29\x71\x9a\xa8\x1d\x72\xd0\x33\xb4\x3d\xd8\x39\x38\x21\x17\x3c\x8d\x66\x1a\x2c\xa1\xf6\xd9\x00\x54\xc2\x3c\x7d\x49\x64\xc9\x57\xda\x14\x14\x6f\xae\x25\xc4\x8b\x34\x79\x2b\x7f\x9d\x90\xd3\xfb\xc2\xf6\x8d\x4b\xe2\x42\xcc\xf2\xb1\x2e\xe0\x28\x04\xae\x94\x1f\x54\x08\x9c\xbf\xd7\x08\xec\x68\xa0\xaf\x8e\x0e\xf1\x70\xc8\x5b\xba\x03\x3d\x9c\x78\xe7\xad\x88\x8e\x43\x09\x2b\xde\xe8\x4a\x55\x75\x19\xdb\x91\xa4\x9e\x73\x9d\x72\x51\x59\x33\xa4\x56\x79\x23\xfc\x73\x64\x61\x0c\x19\x5b\x11\xaa\x97\x9b\x5c\x6a\x1f\x8d\xda\x3a\xa5\xc2\xcb\xfc\xd5\xd9\x09\x9e\xff\xd3\xc4\x52\xd3\x93\x5b\x6b\x8a\xf2\x4e\xb6\x07\x01\x11\x5a\x81\xd8\x91\x36\x5d\x6e\xf6\xb7\xc1\x66\x69\x64\x5e\xd6\xb9\x7d\x2a\xbe\x01\xdb\xe2\x7a\x75\x26\x5d\x98\x2f\x7f\x0b\x85\x21\xbc\x2d\x01\x50\x14\xea\xcf\xff\xe1\x49\x9f\x96\x8f\x07\x43\xe3\xd4\x7c\xca\x07\x80\x8b\xd3\xa7\x31\x4b\xef\x75\x8e\xda\x95\xe5\x43\x1c\xc0\xd6\x56\x6f\xea\x21\xa7\xac\xfe\x41\x60\x40\x2d\x1e\x52\x91\xef\xa5\x92\xad\x1f\x3d\x25\xe7\x9e\xaa\x1f\x2c\xf0\xe2\xe3\x79\x36\x9d\x5d\xee\x72\x56\x7b\x53\x8b\xd3\x47\x8d\xb3\xef\x1a\x67\xc4\xd6\x92\xaf\xd2\xf0\xb6\x1a\xe8\xd9\x99\xce\xd1\x11\xf2\x77\xae\x6e\xfa\x34\x8b\xd8\x8d\xde\x39\xca\xdb\x00\x14\x65\x3a\x0d\x71\xb4\xf1\xf4\x91\x67\xa8\x34\xe8\x9e\x30\xda\xf2\xf2\x39\xc5\x01\xa7\x17\xc4\x11\xa2\xd3\xcf\xa7\xc7\x8e\xce\xab\x7d\x40\x14\x86\x42\x60\xdc\xec\xeb\x71\x1a\x0d\x38\xce\x4f\xeb\x11\xb1\xc0\xdd\x52\x64\x3b\x61\xc7\x5a\xc6\x72\x9d\xa6\x1e\x5f\x39\xca\xd1\x2a\xcd\x89\xd6\x5e\xe5\xf2\x3b\x7b\xb2\x68\x7a\x38\x00\x36\xd6\x35\x2d\x76\x9a\xbf\x2d\xa7\xc2\xbf\xfe\xf9\xdf\xff\xf9\x5f\xff\xfa\xa7\x57\x9a\xbe\xd6\x89\xb1\xbe\x69\x3a\xc3\x18\x3b\x18\xf8\x7d\x1f\x74\x74\xd7\x36\xe8\xab\x16\x9b\xe9\x18\x14\xff\xa6\xfc\x44\xfb\x6d\x6f\x2e\x93\xb4\x6f\x08\x25\x79\x07\x86\x05\xc7\x3a\x6e\xb1\x2b\xf6\x09\x0f\x79\x27\xde\xde\x37\x44\x14\xce\x6c\x1c\xea\xb7\x4d\xf3\xec\x87\x36\x69\x0b\x8b\x34\x60\x0b\x3f\xfa\x22\x16\x42\x74\x32\xbd\x37\x82\xfd\x1b\x62\x96\x0c\x42\xfe\x55\xc6\xf4\x01\x0c\x82\x29\x43\x6a\x9b\xec\x12\xfa\xf7\xe8\xe7\xef\x5e\x7e\xed\xdf\x13\x33\xf4\x2f\xff\x8c\x83\x23\xa8\x4b\xf9\x76\xd4\x5f\x19\x4f\xc9\x17\xb8\x2f\xae\xcd\x67\x87\x7b\xef\xda\x1c\x4e\xbc\xd7\x11\x43\x34\x01\x57\x39\xc1\x37\x1b\x54\x31\x32\x2f\x42\xab\x9c\x79\x2b\xfc\x2b\x14\x61\xe0\x52\x76\x9a\xf1\x89\xed\x5c\x37\x3b\x80\xa5\x19\x1b\x94\x97\x91\xd3\x60\x9a\x90\x6c\x67\xca\x58\x40\x8e\x9b\xa6\xaf\x4c\x6f\x56\x1f\xa1\x95\xe4\xc9\x5b\xbd\xdf\xa8\x86\x1c\x51\x7e\xe2\x0d\x66\x0c\x47\x3c\xe9\xc4\xcb\xfb\xdb\x81\x52\xdb\x3b\xfd\x8f\x69\x38\xff\xe9\xa7\x04\x67\x0b\xba\x83\x21\x9f\xbf\xdb\xaf\x8a\x8a\x56\xd1\x66\x5f\xce\x5d\x36\xda\xf7\xc8\x6c\xd6\xde\x50\xbd\x16\xb5\x30\xb3\x2f\x35\xdf\x2a\x88\xb6\xf2\x0e\xad\x42\xe4\xd4\x2c\x1e\xb3\x29\x81\x8c\xa2\x04\xd3\x3e\xe5\xe2\xda\x8d\x91\x39\xe9\xd4\x8b\x29\x62\x28\x99\x8a\x05\x78\xb6\xea\x52\xb1\x2b\xaf\x72\x8d\x5d\x2d\x8e\x1e\x6c\x53\xfb\x62\x02\x1d\x1d\x56\xbc\x9c\x9b\x87\x5b\x8a\x30\xce\xd1\xc4\x63\xd4\x57\xe9\xb5\x07\x8a\x01\x07\x45\x6e\x9a\x54\x61\xd7\xd9\xbe\xc9\x96\xfa\x24\xe6\x32\x5b\xfc\x98\xa1\xa4\xcb\xef\xff\xe7\xf1\x7d\x31\x44\x5b\x6a\x6d\x47\xa3\xad\x9d\x8c\x75\x17\x3d\x9b\xa3\x84\x01\x76\x2b\x55\x76\xb3\xdf\x9a\x52\xf4\xb4\x64\xba\x1a\xac\xcc\xab\xec\x2c\xed\x5f\xdc\x74\x53\x86\xa5\x70\xb0\x5e\x6d\x3f\xb2\xb9\xf6\xd5\x7d\x7b\x33\x6c\xe2\x4d\xbb\x8f\x0f\xeb\xbe\xf9\x5e\x09\x53\x44\xba\x0e\xae\x5b\xaf\xb3\xc0\x1c\xf5\x17\x18\xcb\x7b\x74\xe8\xd2\xe2\x3d\xe8\xde\x47\x34\x4e\x9a\x82\x2f\x9c\x13\x30\x49\xa0\xbf\x98\xe6\x99\xad\xea\xa4\x93\xd9\x8d\x70\x2d\x8e\xe6\xc3\xc3\xce\xdd\xcb\xbd\xb6\xb9\x74\x16\x3a\xf1\xff\x2f\xd3\x9b\x10\xb3\x05\x0a\xc0\xcd\x1a\x94\x5f\xd2\x9a\x3d\x57\x6b\x21\xa3\x3f\x35\x01\xda\xf1\x9f\xe0\x25\x9a\xc2\x39\xd1\x42\x0e\x3e\x45\x50\x07\x16\x19\xa3\x9f\x77\x4f\x47\xae\x4d\xad\xfd\x66\xef\xa2\x60\xe4\xa3\xf0\xe1\x38\x80\x26\x87\x6d\x1c\x0f\x50\x68\x3f\xa4\x2a\xc6\x77\xe9\x02\xa2\xfb\xb7\xc1\xc9\xf7\x08\x1b\x5d\xc0\x2e\x7d\x5e\x4a\x6b\x32\x39\x6c\x47\xaa\x99\x94\xa4\x47\x7e\xc4\x88\xdf\x48\x2b\x82\x23\x37\xe5\xce\x19\x8f\x74\xfb\x88\xe7\xcf\xf0\x62\x95\x8c\x87\xea\x65\x6f\x48\x80\x44\x28\x4b\x08\x56\x39\x7f\x5c\x66\x5b\xe7\x6e\x5e\x9e\x19\xce\x07\xcc\xff\xe4\xe3\xe6\x7f\xf1\xe1\x0b\x49\x6e\x0c\x67\x29\x51\x6e\x87\xf5\xcb\x27\x64\x29\x9d\xd8\x98\xe0\xea\x3c\x19\x47\x72\xa5\xc9\x37\x0d\x71\x74\x8b\x76\x2d\xbb\x27\xf8\xea\xb3\x6f\x5f\x1e\x2c\xcc\xe1\x0b\x1e\xaa\x9e\x98\xfe\xa7\x55\xac\x8f\x84\x17\x59\x6e\x7e\xe6\x95\xd7\x2e\x22\x1b\x53\x4f\x97\xa3\x49\x39\xa8\xf9\x98\x3e\xd2\x1e\xeb\xb8\xc0\xd1\xed\xc6\x03\x1d\x0d\xce\x6b\x02\x6f\x22\x78\x97\x3b\xd7\x6d\xe0\xe0\x55\xa0\xc8\x36\x87\xd6\x96\xfa\xda\x60\x17\x0b\x5f\x2b\x81\x37\x15\x84\xaa\x67\xe2\xd3\xa3\xab\x02\x3f\x4d\x03\x2d\xd5\x41\xaa\x1a\x0d\xe9\x6b\x78\xa3\xe0\xbd\x8e\x34\xf3\xd9\x18\x6b\x6a\x71\x10\xca\x84\x38\xe1\x46\xaa\x58\xf5\x16\x69\x71\x3c\x0e\x2d\x8e\x35\x5a\x14\x2b\x71\x27\x47\xe3\x3d\x7f\xbf\x55\x3d\x1d\x67\x55\x4f\x4b\x1c\x86\xd4\x5f\xb4\xde\x58\xf4\x9e\xf2\xb3\x71\xa6\xfc\x4c\x9b\xf2\x5b\x94\xac\x08\x6d\xd2\x0b\xa6\xa0\x55\x7d\x8b\x66\x3e\x52\x9f\x3d\xda\xa2\x75\x8c\x87\x40\x9e\xb6\xe1\x12\xc2\x34\x65\xb3\x65\x5a\x10\x24\x04\xc8\xd1\x79\xf3\x17\x1c\x89\x16\x22\xba\xf6\x76\x2c\x39\x10\x36\x7e\x88\x59\x32\x8d\xb1\xcf\x0f\xea\x3c\x79\x39\x41\x4b\xe5\xfc\x7e\x89\x51\x18\x64\x36\x16\x8e\x34\xf0\x3f\x8f\x44\xf2\x9f\x85\xd1\x0f\xa3\x00\x07\x99\x51\x20\x2d\x31\xde\x32\x49\x15\xf7\xd9\x8d\x25\x86\x12\x31\x9c\xd5\x0c\xea\x19\x82\x69\xd6\xd0\x19\xfb\x7b\x6a\xa6\x9d\x4a\x00\x8c\x00\xcc\xa7\xdd\x5b\x0e\x2c\xd3\x5f\xe1\x60\x8e\x92\x92\x70\x38\x27\x30\x0c\x0d\x02\x97\xe4\x08\xf6\x3e\x37\x3a\xe9\x2d\x31\xb9\x1a\xe2\xe3\xb3\x32\x1a\x69\x37\xc5\x55\x92\xe9\x89\x1c\xae\x43\x40\xb8\x9d\x4b\x45\xa2\x7e\x42\xd3\xcc\x00\x75\x4c\x0b\xa9\x8e\xdf\x18\x24\x96\x31\xe7\x6a\x94\x18\x32\x86\x12\x76\x80\x97\xf3\x03\x8d\x3f\x07\x92\x7a\xb9\x1b\x30\xc3\x21\x92\xd5\xd8\x39\x35\xf9\xbe\xb8\x4f\xca\x97\xfa\xee\x91\xa3\xb2\x12\x13\x43\xd6\x62\x71\xae\x94\x6d\x2a\x73\xaa\xf1\x7d\x60\x7a\xca\xc0\x16\x69\xd7\x3c\x05\xc3\x19\x6d\xc3\x29\xfb\xaa\x4d\x75\x3e\xeb\x1a\xf7\xea\xf8\xfd\x38\xaa\x5b\x19\x2d\xfb\xa5\xb5\x37\x57\xc9\xe4\x6e\xab\xd5\x0e\x7b\xe3\x5d\x68\x73\x8d\x92\xf5\x2e\xb4\xd4\x4c\xaa\x42\x32\xd1\xa0\xc9\xcb\xcb\xa1\x8c\x75\x4c\xb7\x68\xbd\x22\x34\x10\xf6\x81\xfc\x03\xe4\xbf\x24\xb3\x99\x1d\x40\x41\x2d\xbf\x2b\xe8\xc6\x90\xca\xa7\x33\xa9\xd4\x80\xe8\x35\x25\x57\x3d\xd1\x8f\x61\xd7\x52\xda\x9a\xda\xd1\x2e\x34\xa5\xb7\xf4\x06\x26\xfe\x02\xf5\xbf\x50\x89\x1b\x00\x63\x32\x3b\x41\x8f\x19\xbc\x15\x9f\x80\x19\x49\xa3\xe0\xc9\x10\x7f\x66\xbf\x4d\x8a\xa5\xa4\x67\x71\x38\xed\xc2\x9a\x78\x3a\xae\x35\xf1\x74\x1f\xad\x89\x02\x95\xb8\x76\x2c\x9b\x2f\x8b\x8a\x1f\x14\xa6\xc1\x88\x27\xf9\xd3\xdf\xfa\x49\xfe\xb4\xf9\xd6\xb6\xd8\x15\xca\x5b\xdb\xf6\x8e\x38\x1e\x77\x47\x74\x4b\xb8\xd8\xea\x8e\x30\x66\x19\xd8\x76\xc4\xf1\xa6\x76\xc4\xb0\x0e\x0b\x9f\xc0\x8e\x38\x76\xd9\x11\xbb\xf5\x3b\x8f\xc6\xdd\x17\x1d\xb2\x21\xb6\xb7\x2f\xb6\xe7\x77\x1e\x8d\xef\x77\x1a\x73\x40\x86\xef\xcd\xa3\xdf\xfa\xde\xb4\x26\x4b\x98\x86\xe8\xf8\xfd\x38\x7e\x67\x1e\x79\xde\x2f\xc7\xb3\x16\x2e\xbc\x8a\x91\x8f\x67\x6b\x10\x89\xf9\x82\x80\xe2\x3b\x74\xc0\x5b\x87\x1f\xcc\xb8\x6b\x07\x42\xe2\x43\x4b\x1a\xb1\xeb\xfc\x3b\xfb\xb6\x1b\x70\x4b\x0d\xde\xa8\x5c\x78\xbe\x48\xbb\x5b\x2a\x9f\xbe\xc8\x49\xf2\x71\xe2\xa1\x27\xf3\x27\xe0\xa0\x44\x33\xd7\x9c\xd9\x12\xe1\xfa\x39\x9e\xdb\x92\x73\xfb\x90\x4e\x57\xac\x0f\x23\xb9\xe8\xa1\x17\xba\xbb\x16\x5b\x89\x7b\xf3\x96\x72\x2b\xf1\x90\xbc\x5b\xdf\x78\xa9\xfb\xc8\x59\x2b\xe5\x9d\x3e\x4e\xde\x8a\xfa\xc7\x7e\x24\x5d\xf9\x6f\x20\x5a\xbe\x3c\x8f\xdc\x92\xae\xfa\x25\x4e\xe5\x1a\xad\x9c\x39\xa5\x5b\xbf\x9d\x73\xa7\xe4\x98\x2d\xc9\x53\xe2\xaf\xb2\x99\xbd\xad\x64\xaa\x51\x05\xb1\x22\x34\x23\x4b\xa2\x60\xc8\x4e\xe5\xf0\x6f\x27\xdf\x5f\x5e\xbe\x38\x34\x27\xff\x79\x99\x14\xf9\x30\x71\xaa\xfb\xca\x73\x9d\xf5\xd5\x81\x88\x44\xd3\x98\xe2\xc8\xdc\x32\xb6\xcd\x15\x11\x46\x78\x61\xf2\x5c\x9f\x5c\x7f\xb8\x32\x2a\x26\x43\xfe\x56\xad\x4d\x5c\x01\x74\xa7\x75\xea\xd5\xf6\x4b\x88\x67\xc8\x5f\xfb\x61\x03\x26\xf0\x45\xfe\xf5\xc4\x3b\xa3\x70\xa6\xf9\x1b\x52\xd1\x4f\x03\xf1\xb1\xfa\xb0\xd0\xa5\x93\xb1\x27\x70\xa1\xc3\xcd\xe7\xef\x0f\x45\xdb\xce\xcd\xbf\xfe\x84\xfa\x0b\x7c\x57\x4a\xb6\x96\x53\x80\xf9\x37\x96\xbe\x79\x9e\x86\xe3\x61\x9a\x80\x38\xe9\x1a\xce\x2b\x6f\x94\xcc\xf8\x7c\x35\x5f\x00\xce\x4c\xf0\xaf\xff\x0d\x32\xa2\x66\xff\xab\xad\xae\xbd\x15\x5a\x4b\x22\x4a\x23\xb5\x63\x4a\x12\x95\x13\x61\x22\xf7\x65\xfe\xfd\xb5\xb0\x96\xdf\x92\x08\xb9\x83\x2d\xb6\x6c\x2d\xc1\x2c\x12\xa3\xa6\xba\xa3\x77\x97\xe7\x6f\xab\x26\xc2\x70\xaa\x9f\x2e\x60\x34\x47\xe0\x54\xd8\xe6\x5f\x80\x77\x31\x8a\x32\x8a\xcb\xc5\xa2\x80\xb3\x81\xc8\xce\x05\x4e\x7d\xe8\xdc\xad\xe1\x4d\x30\xe5\x3d\xba\xc3\x68\x35\x32\x5b\x62\x45\x8d\x06\xde\x5c\xbe\x7f\x77\x7d\x7e\x7a\x7d\x7e\xf6\xc8\xa0\x56\x06\x65\x73\x1d\x99\x3d\xa1\x5c\xbe\x91\x37\x17\xef\x4e\xbf\xfd\xe4\x18\xd3\x14\x2f\xe1\x3e\x36\xbe\x49\x33\x7a\x5f\x25\x30\x49\x5d\xe2\xa9\x4e\x34\xce\x7c\xf5\x59\x48\x56\x53\x26\x87\x6d\xcc\x3b\x96\x7e\x9c\x69\x2a\x8d\xc7\x47\xef\x6e\x2f\xdc\xac\x8d\x63\x4a\xee\x60\xe8\xbc\xe0\x71\xd7\x5c\x5e\x76\x75\x32\x6e\x1e\x5e\x97\xa6\x03\x16\xf6\x6b\xfb\x52\x59\x95\x23\x92\x43\x0d\xd9\x62\x43\x8a\xff\x7f\x2d\x1f\x1e\x7f\xe3\x5d\x2f\x30\x03\x98\x01\x08\xb4\x35\x6e\x64\x7f\xc9\x9f\x3c\x57\xc1\x05\x5e\xa7\x92\x39\xaa\xdc\xb1\xfb\x9f\x4c\x22\x03\x79\xc7\x87\x87\xc2\xdb\xcb\x4d\x8e\xee\xa6\xf4\xe9\xc9\xf5\xf9\x57\xef\xde\xff\x00\x0e\xc0\xf5\xc9\x57\xc6\xc0\x75\xa5\x78\x5b\x04\xae\x4f\x61\x82\xe6\x84\x62\xa7\x1b\xc5\xb6\xd8\x12\x4a\xe0\x54\x44\x48\xac\x65\x05\x43\xe2\xdc\x72\xbe\x6b\x73\xac\xbb\xb6\xa3\xe4\xd5\x5c\xf1\x23\xdb\x7e\x1a\x41\xa9\x6b\x2f\x1a\x43\xa2\x2c\xb7\x5f\x09\x9c\xff\xfa\x30\x58\x76\x0d\xe7\xce\xdc\xe2\x97\x5f\x9b\xe5\x91\x98\xce\x28\xec\x39\x6a\xaa\xa1\x48\x23\xc8\xbb\xf4\xd8\x2e\x86\xca\xbf\x88\x11\x5d\x62\xc6\x78\x86\x8c\x2c\x91\x7b\x03\x23\x11\x8c\xe9\xa8\x80\x4d\xc5\xd9\x68\x19\x27\x6b\xe0\xa7\x94\x11\x3a\x8d\x09\x56\x15\x31\x8d\x69\xfc\xe7\x01\x4e\x74\x69\xce\x9b\x69\x68\x2b\xeb\x7c\xee\x76\x38\x32\xf8\x84\xbd\x7e\xef\xb5\x70\xb7\xe6\xd8\x1d\x55\xae\x23\x19\x0e\xd0\x0d\xa4\xd3\x22\xd6\xa5\xb5\xdd\xd2\xcc\x56\x8d\x5d\x96\xe8\x5a\xe9\x31\x63\xc0\x36\xea\x73\x42\x6c\x2a\x28\x96\x8d\x30\x72\x48\x4c\x84\x2a\x77\x1a\x12\xfb\xeb\xd3\xb3\xd5\x2f\x27\x5f\xf9\xfd\xea\x61\xf3\xc2\xc1\x97\x32\x3a\x6a\xae\x0f\x54\x10\x1b\x01\x4c\xe0\x54\xfc\xa0\x5e\x43\x58\x3c\x21\x2e\xcc\x4a\xcf\x94\xa1\x37\x5a\xaa\xd5\x50\x80\x13\x5e\x2c\x3b\xf8\x04\x58\xad\x19\x5e\xad\xeb\xb5\x89\xb5\x0b\x92\xe6\xc0\xbb\x61\x7f\x6c\x23\x54\x9d\xbd\xfe\xb2\x14\xae\xe6\x54\x19\x14\xb2\x16\x4d\xe8\xda\xc3\xd6\x57\xf0\x0e\x89\x77\xdb\xef\x62\x86\x28\xc9\xb6\x30\xa8\x26\x3b\x09\xf1\x5f\x47\x01\x8a\x92\x53\xc6\xaa\xc2\x63\xe5\x25\x17\xe8\x05\x82\x01\x8e\xb4\x16\x5f\xe8\x3e\x86\x51\x80\x82\x1a\xff\x44\xea\x99\xa8\x42\x65\x3a\x9b\xc5\x3f\xf2\xa2\x71\x59\x8a\x29\xcb\xb9\x63\x14\x89\xf1\x9b\x34\xe8\xc4\xf3\x53\x4a\x51\xc4\xd9\xf9\x3a\xf0\xd4\x01\x94\xbd\x09\xcd\x28\x62\x0b\xf1\x11\x9f\x96\x10\x1c\x12\xaf\x2f\xc5\xd4\x48\xf4\x86\x48\x66\x14\x7d\xbf\xf2\x3f\x15\xa3\x4e\x98\x04\x1c\xf1\x48\x94\xfd\x7d\x81\xee\x50\x28\x7c\xf0\xfc\xb3\x2b\xf4\x4b\x8a\x22\x1f\x69\x1f\x5f\x15\x25\x67\xdf\xe7\xb8\x58\x52\xd8\x14\x91\x9c\xee\x4e\xf2\x12\x2b\xf1\xa7\x20\x60\xa3\x68\x2b\x72\xe6\x1f\xe4\x98\x2d\x93\xbc\x48\x4f\x6e\xff\xfc\xa4\x11\x34\xce\x3f\x68\x3b\x8c\x94\xbd\x56\x22\xbc\x7d\x8b\x38\x6d\x0e\xb9\x3e\xc9\xb6\x22\x9c\x6c\x7f\x3e\x67\x6e\xfb\x0f\x74\xee\x3b\x3c\x9b\x0b\x87\xc3\xb3\x9a\xec\x74\xd0\x01\x4a\xb4\x5c\x57\x5a\x15\x3f\x77\x1a\x19\x84\xd4\xfd\xc7\x06\x51\xb6\xf5\xc2\x34\x1d\x3a\x85\xc4\xbb\xa5\xd2\x0c\x3a\x7a\x6a\x4a\x4b\xe2\x75\x1c\xdc\x40\x86\xa6\x14\x45\x01\xa2\x7a\x19\xa4\xd8\x7d\xb9\x3d\x2d\x4d\xe7\xd6\xb4\x81\x8e\x89\x17\x0e\xd6\x67\xc5\xfd\xaf\x59\x98\x12\x8d\xce\x64\x61\xa6\x71\x48\x60\xa0\xf2\x02\xf2\x43\x3e\x57\xc3\xfa\x09\x8b\x85\x0a\x26\x51\x51\x13\xf9\x81\xff\xbc\xf2\x61\x8e\x8f\xff\xa3\x27\xbe\x07\x7a\x11\xe5\xa4\x66\x4f\x18\x95\x59\x5d\x9b\x38\x9e\xac\x4a\xfa\x6a\x93\x74\x17\xdc\xfa\x52\xec\x6d\x4b\x37\x96\xc5\x50\x32\x6a\xcd\x76\xf2\xff\xe8\x6b\x27\xe7\x3d\x7e\x77\x6a\x2a\xc7\x3f\x1c\x04\x57\xcb\x67\xdf\x59\xe0\x37\x6a\x06\xf3\x98\x6d\x8a\x1b\xfe\x6b\x70\xe4\x9b\xae\x16\x60\x1c\xbf\x11\xb6\x4a\x26\xd2\xb6\x6b\x85\x20\xe5\xa5\xd1\x1c\x66\x31\xa6\x98\xa1\xf3\xfc\x07\xf6\xcb\x05\x9b\xe3\xae\xf8\x29\x9b\x19\x5b\x70\x11\x4b\x5d\x70\x03\x4a\xe2\x80\xac\xb4\xc4\x23\x95\x68\x04\x29\x25\x2b\xbe\x79\x4f\x64\xe1\xbb\x4c\x87\x32\x0d\x2a\x23\x23\x31\x89\xc9\x9d\xae\x1a\x95\xc2\x5d\xe0\x00\xbd\x8b\x64\x73\x56\xfe\x0f\xcc\xb2\x63\x41\x74\x67\x15\x8d\x2b\xc4\x18\x88\x66\xa3\xc4\xdc\xb6\xf3\x43\xec\xdf\x02\xfe\x5f\xc2\xd3\xf1\xf8\x3f\xbd\x46\xd6\x34\xe6\x53\x36\x14\x06\x2d\x51\x94\x3a\x26\x4d\x36\x61\xcf\x29\x0c\xf3\xc6\x70\x46\xb6\xca\xf7\xd9\xc9\xc9\x92\x53\xed\x62\x41\xb4\x44\xd6\xec\x65\xf9\x0c\xd0\x6f\x1f\x1c\xb3\x2d\xc7\x98\xdb\x97\x08\x05\x37\x90\xe3\x20\x99\xe7\x35\x93\x0f\x6c\x71\x4e\xef\x11\x0c\x1a\xe7\x43\x11\xac\x05\x64\x9c\xee\xfd\xfa\xe7\x66\xf4\x47\x2d\x34\x25\xb7\x60\xde\x0f\xd1\x25\x85\x73\x24\xaa\x4a\x38\xbd\x46\x8a\xc6\xd9\xf7\xa6\x34\xdf\xbe\x25\x7e\xc3\x57\x3e\x7c\xd9\x90\xa2\xda\x82\xf9\xa7\xe0\x0e\x43\xc0\x90\x9f\x52\x04\xd0\x7d\x82\x68\x04\x43\x10\x36\x03\x08\x0d\xbd\xfc\xea\xf7\x79\x45\xb6\xbb\xeb\xee\x53\x89\xb6\xf4\xa0\x74\x77\x57\xad\x5d\x77\x18\x62\xcc\xaf\x6e\x79\x04\x8c\x5d\xe2\xc8\x1a\x0f\x6f\x3c\x36\x7a\xcb\xdd\x87\x28\x96\x5d\x0c\xf2\x3d\xb6\x24\x77\x08\xdc\x10\x72\xbb\x84\x36\x30\x9a\xfe\xbb\xa7\xc7\xfd\x33\x43\xdc\x7c\x10\x19\xf2\x0b\x14\x25\xd9\xf6\xdf\x2e\xa5\x2e\xcb\x74\x7a\xb5\x41\x02\x95\x87\xe8\x7e\x6d\x3d\xb2\x36\xa6\x38\x4a\x6a\xaa\x89\x7f\xda\xbc\xf8\xa1\x2f\x3e\xe7\x06\xbe\xfe\xc2\x33\xb2\x8a\x84\x57\x64\x3d\x4a\xb5\x7e\xbe\x66\xb3\xf3\x24\x08\xcc\xf1\x9e\xe2\x91\x53\x12\xaf\x7b\x1c\xa6\xbd\xb7\x43\x4d\x27\x58\x26\x3e\x1e\xd2\x98\x1b\xf7\x55\x92\x41\x4d\x00\xae\xf3\xcc\x80\x7e\x18\x6a\x0e\xa4\xdf\xde\x2a\xcf\xd2\x98\x5b\x14\xf5\x65\x8a\x09\x0d\x3b\x4b\xdd\x96\x5e\xf1\xdc\x37\x27\x70\xdd\xe9\x07\xa4\x07\x6a\xa7\x21\x9f\x7f\x8d\x80\x45\x6c\x65\x68\xfd\x4e\x1f\xc2\xb7\x6b\x09\x0e\x99\xe5\x27\xf8\x0e\x27\x6b\x0d\x2f\x95\x1b\xf7\x77\x98\x95\x80\xd4\x46\x75\x56\xbf\xc6\x2c\x21\x74\xfd\xb0\x0c\x9e\x51\x6c\x9e\x0a\xc9\xbb\x6e\xf6\x67\x99\xb0\x46\xb7\xd3\x84\xd4\x29\x42\x49\x2a\x03\x79\x12\xfa\x54\xed\xae\x27\x50\xe3\xb1\xe1\x55\xba\x08\xb4\x09\x93\xeb\x3e\x37\x0b\xd1\xa6\x17\x4a\xb5\x37\x9a\xde\xa5\xcf\x68\xc0\x52\x0d\x52\xb1\x09\x7f\xa3\xeb\x29\x69\x8f\x2a\x95\x62\xd4\xa5\xaa\x36\xb5\x73\x45\x99\x75\x5e\xb9\x29\xd2\x73\x54\x89\x5b\x9e\x4f\xc3\xf9\x72\x4d\x3c\x63\x6d\x9b\xcc\xe9\xb9\x42\x49\x82\xa3\x39\x33\x7b\xef\xb5\x02\x38\xef\x3d\x12\x50\x3c\x45\xba\xd9\x04\x5c\xc3\xf9\x04\x88\x3c\xc7\x09\xf8\x5e\xe6\x4a\xea\xcc\x66\xc5\x4b\xdc\xb1\xdf\x5d\x68\xdd\xd4\x28\xa7\x88\xc6\xca\xf3\x7f\xe7\xbd\x8e\xaa\x03\xee\x23\xec\xef\x15\xbc\x43\x00\x32\x60\x36\x9a\xba\x0d\xee\x84\xfd\x3b\x23\x74\x59\xba\x12\x27\x11\x4b\x6f\x96\x38\xb1\x23\x51\xc1\x3b\xa4\x4d\x51\x0a\xcb\x96\x9a\x1c\xd5\xd0\xc1\xb2\xa1\x66\x7c\x93\x44\x68\x55\xc8\x9b\xde\xc0\xe2\x70\xe2\xbd\x75\x44\xa9\x92\xbb\xdd\x54\x9a\xad\x6a\xb1\x2b\x25\xda\x7a\x69\xf6\x47\xd1\xed\xa8\x32\x0b\x65\x2c\xe8\x64\x9b\xe4\xfd\x51\x3d\xb4\x84\x38\xac\xd4\x66\x83\xbc\xc7\x91\x57\xd8\xd0\x12\x6a\xcb\xa1\x00\xdb\x1b\x08\xfb\xf5\x15\x21\x01\x48\xf4\xd7\x02\x9f\x44\x77\x68\x5d\x20\x6d\x02\x4e\x06\xf7\xd8\xd2\x3e\xc8\x84\xde\x6c\x84\xdb\x9c\xcc\xa7\x38\x76\x8d\x4c\xab\xfe\x1a\xe8\x3e\x81\x14\xc1\x06\xe9\x28\x4e\xde\x15\xab\xcb\x03\x9f\x81\x59\x1e\x02\x7d\x36\x1f\xab\xa5\xfa\xde\xf3\xad\x30\xfe\xfc\x3e\x0e\x21\x8e\x40\xca\x10\xf0\x21\x43\x60\x46\xa8\x40\x58\x4d\xec\x3a\xa9\x8d\xe5\x16\x55\xf6\x69\x97\xde\xbb\xf6\xf5\x78\xf0\xb5\xf7\x57\xed\xcd\x60\x8d\x07\xc7\xee\xda\xcc\x17\xb7\xd0\x14\x47\xc9\xa3\x85\xe2\x60\xa1\xd8\xe2\x79\xe3\x99\x25\x35\x44\x17\xfe\x5a\x00\xc3\x30\x07\x01\x27\x14\x88\xc2\x0b\xd5\xd7\x8f\xd5\x70\x1c\xeb\x99\xfe\x2d\x78\x6f\xb9\x7f\xee\x2f\x90\x7f\x7b\x43\xee\xb5\x8c\xf8\x02\x88\xaa\x68\x5b\x9e\x4d\x4a\xc3\x77\x77\xed\x33\xe5\x95\xe0\x94\x64\x3e\x4a\x94\x66\x6e\xb8\xcc\x3b\xd3\xf6\xc3\x13\x60\x7c\xbc\x01\x84\xc9\xdd\x98\xff\xcd\xf6\xd9\xfd\xcd\xe8\x63\xb9\x55\xad\x0a\xf9\xb2\x10\x61\x37\x04\xfa\xad\xa9\xe4\x80\xc7\x03\x1f\x75\xb2\x83\x4e\x16\xa1\x53\x70\x66\x87\xc0\xdf\xa0\x76\x3e\xa1\x08\xac\x49\x0a\x58\x2a\xff\xb1\x82\x99\x7f\x40\x80\x60\x62\x19\xa1\xff\x2f\x8f\x96\xe0\x43\xd5\x3c\xef\x45\x8a\x76\xcb\x3a\xf3\x0b\x0a\x6b\x7e\x70\xe5\x36\x63\x8f\x14\x8f\xba\xe3\x79\xd4\x3d\x2e\xba\x47\x51\x6b\x4f\x43\x55\xfa\xfc\xf6\x26\x4e\x55\x88\xd8\xce\x82\x54\x95\x29\xa8\xdc\x64\xf5\xe9\x5b\xe7\xd8\xd4\xdb\x6d\x85\xa4\x4e\xf3\xee\x3f\x61\x08\x6e\x10\xc8\xe7\x1a\x94\x1a\xc1\xc8\x0e\x86\x8f\x31\x8a\xdf\xd4\xc9\xe4\x6a\x13\x6b\xea\xc0\x7e\x3c\xd5\xd4\xc6\xc3\x41\x08\xac\x26\xc2\x8f\x5b\x86\xca\x78\x27\x83\x1d\x27\xd7\x27\x17\x6f\x4e\xbe\xfc\xf6\x6f\x5f\x9b\x93\xeb\x03\xe2\xef\x4b\x6e\xbd\x70\xad\x6b\xb2\xaf\x6e\x11\xab\x7b\x20\x59\xa0\x25\x7f\x77\x1a\xc7\x88\xfa\x90\x21\x85\x0a\x6d\xdc\x0f\x5c\xd8\xc5\x04\x1a\xaf\x17\x4f\x28\x25\xab\x0b\x34\xab\x35\x79\x2d\x2e\x20\x6c\x01\x3b\xa9\x4d\x2d\x35\x22\x35\xdc\x13\x97\x00\x8b\xe5\x1a\xd5\x76\x57\xca\x17\x73\x95\x9d\x20\x67\x3c\x7b\xc1\x14\x72\x19\x94\x0f\x21\x0f\x4a\x65\x66\xf5\xcb\x8d\xc8\x44\x26\x49\xc8\x72\xba\xc4\x41\x20\xa2\x34\x9b\xc9\x95\x28\xc5\xb6\x5a\x29\x5f\xa4\xb5\x44\x24\x99\xca\x5c\x72\x11\x54\xc2\x41\xa9\x3e\xe9\x75\x30\x28\x47\xbc\x3d\x1f\x81\x9f\x8e\x28\x14\xf7\x23\xd5\xc4\x04\x69\x51\x0b\xa9\xa4\xd9\x09\xa6\x81\x84\x67\xf2\xa8\xaa\x2b\x1b\x3f\xc2\xe5\x07\xc2\x74\xae\x17\x3a\xd5\xd6\x52\x04\xd7\xca\xad\xd5\xfb\xa7\x3d\xb8\xc3\x7b\x1b\x4e\x82\x8d\xe6\x5f\x6f\xe4\xa4\x11\x67\xc2\x38\xe7\x4c\xb9\x8c\x7a\xa7\xa7\xcc\x37\xcf\x2f\xcf\x6f\x56\x6f\xbe\x1d\xdc\xfd\x7b\x4e\x71\x50\xa0\x9a\x4f\x3f\x9f\x1e\x77\x75\x0b\xc5\x08\x28\x0c\xa7\x47\xa0\xf8\xb7\xd2\x2f\x9d\xfd\x41\x55\x38\xa9\xe8\xdc\xcb\x23\xcc\x39\xd5\x66\xdf\xbe\xe0\x28\x2c\x51\xf3\x20\x22\xf6\xad\x06\x39\x2a\x17\xe4\x1b\x03\xe3\xd6\x6c\x62\xfb\xcb\x4a\x70\x4f\x95\x77\xd5\xa2\xea\x8e\xde\x40\x8b\xb9\xd7\x85\xbf\xc7\x1a\x7f\x69\x66\x92\x6c\x80\xdf\x20\x22\xe2\xca\xcb\x33\xc3\x72\xa8\xd3\xb9\x11\x9e\xa3\xbb\xb0\xa8\x19\x28\xeb\xab\x25\xf5\xcf\x87\x91\x63\x86\x56\x75\x02\xb6\xae\x23\x30\x08\xa6\x72\x22\xa0\x15\x6b\xe9\x32\x4c\x15\xd2\x8c\x3d\xa1\xb5\x5c\x09\x3e\xa9\x14\x4d\xb7\x07\x0a\x86\xe3\x30\xc9\x6e\xe1\x6a\x69\xf0\x86\xdc\x39\x23\xb1\x39\xb8\xc5\x0e\xe2\x0b\xf3\x90\x48\xdb\x10\x36\xfe\xb4\xf2\x44\xc9\x84\x95\x27\xf2\x21\xb7\xe9\x74\x5a\x51\xc7\x3c\xc7\x81\x60\x5f\x5a\x62\xa0\x19\xc4\x66\x83\x69\xbf\x24\x4d\x80\x34\x69\xbb\xd7\xa8\x3a\xc4\x46\x1c\xea\x54\x8b\x51\xa0\x3d\x63\x3f\xfb\x6c\x41\xd1\xcc\x9b\x78\xff\xae\xfe\xae\x28\x34\x9f\xc4\x6b\x8e\x98\xdf\xac\xd2\x1a\xc5\xe9\x94\xc4\x6b\xd1\x2b\xa0\x9c\xed\x6f\xa8\xad\xf3\x2c\xf9\xe3\x85\x46\x73\xa9\x29\xb1\x3e\xf3\x86\xdc\xa1\xb6\x67\xae\xab\xa0\x93\x3d\x9a\xea\xb4\x30\xb1\x5b\xe1\x96\x31\xf3\xb9\x87\x9a\x1f\x4d\x38\x78\xd3\x80\xc8\x87\x22\x96\x11\x60\x81\x45\xa0\xc2\x59\x66\xd4\x29\x15\x41\x76\xd3\x3d\x87\x4a\x61\xed\xb8\xf2\x65\x03\xf4\xe2\x1b\x6a\x04\x7a\x65\xea\x28\x5b\xd1\xa0\x7a\x1a\x37\xc2\xc9\x5d\xb3\x63\xc2\x2d\xc9\x1d\x1a\x8b\x70\xd9\x8a\x6a\x84\x13\xcb\x1c\x93\x70\x35\x55\xb2\x33\xe2\xc5\xa2\xe0\x7b\x2c\xfa\x35\xd5\x8f\xcb\xcf\xc7\xa5\x62\xf7\xb2\xad\xc1\x7a\xb8\x9d\x27\xa6\x1e\x74\x5a\x1d\x57\xf6\x79\x89\x2d\x47\x46\xb6\xc8\x54\x0d\x77\xae\x64\xe3\x0a\xec\x3e\x32\x9f\x87\xa8\x74\xab\x9a\xc3\xfa\x41\x3a\x47\x49\xed\x5d\xff\xae\xbf\x4c\x5c\xb1\x38\xbe\xeb\x06\xfa\xb7\x01\x25\xb1\x27\x1c\x77\x5c\x4e\x04\xee\x56\x7c\x56\x3a\xe4\x39\x90\x5a\xd3\x29\xcf\x64\xd1\xb6\x90\x42\x78\x13\x4a\x4c\xac\x5d\x9c\xca\xa6\xa6\xcb\x6a\x7e\x98\x63\xde\x9d\x61\x96\x4d\xb1\x77\x0f\xbe\x51\x77\x7b\x42\xfc\xa9\x98\xd6\xa0\xbd\x9e\x3d\x2c\x10\xfd\xf4\x3d\xae\x3e\xe9\xc0\xf1\x06\xca\x91\x34\xd9\x4b\xd2\xc9\x79\x0d\xa6\xdd\x3b\x31\x8e\x4e\xbc\xfc\xa3\xe1\xd4\x4b\xe3\xbd\x23\x5c\x1a\x0f\xa6\xd9\x87\xb8\x7a\x24\x03\x91\x34\x30\x94\x5c\x01\x59\x45\x7b\x47\xb0\x6c\x52\x83\x49\x26\x2f\x74\xca\x44\x0b\xa4\xb3\x3a\x42\x71\xaf\x89\x0a\xbd\x3d\x7b\x6b\xf8\xb1\x77\x90\x64\x94\x08\x89\xc2\x7e\x9c\x78\xaa\xbb\x6e\x45\x94\x74\xb0\x4d\xf9\x87\x4b\x77\x5d\x0d\x56\xb2\x25\x83\x66\x78\x3c\x2b\x33\xce\x0e\x16\x38\xe8\x18\xc4\xea\x90\xbe\xd1\xe9\x7e\xbe\x43\x59\xa9\x8b\x77\x66\x12\x13\xb3\x61\x55\x78\x59\xae\x96\xce\x58\x59\x6a\xdd\x12\xd5\x80\xf8\xe3\xf9\x61\x75\x70\x4b\xc6\xda\x38\x49\x6b\xbd\xf3\xd6\x78\x04\xe7\x0c\xb1\x04\x47\x2d\x7d\x60\x9d\xc6\xb7\x67\xb0\x59\x52\x67\x79\x0b\x8d\x3c\x70\x1b\x05\xbc\xc6\x21\x42\x2c\x41\x41\x5e\xd8\x90\xa7\x3c\xf9\x24\xc6\x28\x00\x09\x01\xc9\x02\x01\x55\x92\x90\x67\xd6\x3e\x69\x0d\xe1\xb6\xa2\xa3\x1f\x55\xfb\x67\x74\x31\x3d\x07\xe6\xc7\xe5\xcd\x7b\xdb\x12\xb8\x4c\x19\x15\x82\x18\x7a\x36\x91\x84\x89\x92\xad\xc6\xbf\x83\x61\x8a\x2e\x61\xb2\xc8\x3f\xe1\x29\x41\xf2\x13\x56\xf4\x0d\x57\xca\x2f\x4f\x43\xd0\x00\x84\x45\x86\x9d\x9e\x30\x27\xbc\x14\x39\x65\x7b\x26\x05\x7f\x45\x4b\x3e\x85\xf5\x8c\xda\x05\x33\x5a\x72\xca\x77\xc1\x0f\x41\xf2\x33\x91\xed\xd0\xc8\x92\x33\xe2\x3b\x31\x84\x3f\x37\x98\x1d\x03\xb5\x47\x5b\x92\xe0\x43\xcc\x13\x1c\x90\x2a\xb8\x37\xd9\x82\x45\x30\xde\x19\x3f\xbb\x0b\x4a\xf2\x30\x0b\x65\x2c\x24\x0c\x97\xb8\xa8\xbb\xc9\x52\xc4\x37\x1f\x4d\x96\x91\x4d\x16\xee\x11\x3d\x34\x93\x25\x93\x87\x47\x8b\xe5\xd1\x62\x79\xb4\x58\x1e\x2d\x96\x47\x8b\x65\xe3\x16\x4b\x91\x1a\xe0\xdc\xc5\xe3\xe1\x59\x2c\x6e\x57\x69\xee\x36\x4b\x9f\x2b\xa5\xdd\x58\x2d\x0f\xc7\x58\x91\x35\xc9\x57\x79\x61\xf9\x4e\x4c\x15\xa7\xc2\x64\x69\xb3\x34\xd5\x25\x6f\xe6\xec\xb2\x0e\xc4\xe1\x27\xda\x06\xb2\x96\x02\x56\xaa\xff\xf8\x80\xbc\xb0\x04\xf3\x8b\x5d\xaf\x00\xb8\xd0\xde\x38\x95\x83\xc8\x3a\x00\x4e\xa2\xd3\x05\x0e\x03\x8a\xa2\x5c\xa9\x98\xb7\x8d\xf8\xbd\x6d\xdb\x38\x54\x08\xda\x0a\x27\xeb\xf4\x29\x7a\x6d\x66\xdb\x9a\x17\x56\x0e\x9a\x60\x2b\xb5\x7f\xfa\x29\x39\x09\x59\x2e\x3b\x7e\x46\x99\xdc\xe0\xb5\x2d\xa8\xcd\x0c\x19\xaf\x52\xf1\xf1\xf8\xde\xcf\xe3\x7b\xcc\xc2\xf9\x5a\x63\xad\x87\x77\x80\xbb\x66\x14\xb9\x1f\xe1\xa5\xcc\xa0\xc7\x33\x7c\x9c\x33\x5c\xe6\x41\x81\xf7\x28\xe5\x37\xce\x40\x95\x60\xab\x26\x6d\xdb\x38\xd3\x37\x55\x8c\x5f\x9c\x19\x2f\x55\x53\x40\x51\x1a\xd2\x5a\xf5\x30\x42\x91\xbe\xa5\x38\x5f\x55\xf0\x7f\x94\xd9\x45\x85\x8c\xb7\xce\x51\x6e\x46\x0e\x50\x68\x2b\xd9\xe7\x7d\x9a\x80\xee\x81\xf2\xa1\xaf\x65\xf1\xcb\x36\x8a\xf9\x2f\x29\xb9\xc3\x01\x02\x10\xb0\x05\xa1\x09\xe0\xab\x92\x58\x83\x08\x50\x25\x70\x0a\xec\xeb\xc6\x2e\x70\xbb\x0d\x3c\x18\x45\x29\x40\xcc\x6f\x95\xa4\x51\xf1\x27\x39\xde\x64\x3f\x99\x6a\x9e\xac\x12\xa9\xa7\xed\xf2\xa4\xc3\x57\xea\x62\x75\x7e\xef\x23\x1a\x27\x5b\x12\xac\x2b\x2e\x4e\xda\x5c\x32\x6b\x7f\x81\xc2\x18\x90\x64\x81\x28\x03\x69\x14\x20\x9a\x1d\xbd\xc1\xf8\xa2\xf6\x68\x95\x3d\x28\xab\xcc\x19\x48\x4d\xe5\x03\xf7\xe9\x61\xba\x7b\xeb\x6c\xd4\x92\x5f\xbd\x3c\x77\x9c\x82\x5f\x53\x13\xcf\x9d\x96\xfd\xbe\xfb\xe6\xf8\x6f\xe9\xd3\xe8\xc4\x0c\x2e\x31\xc3\xbc\x02\xd3\xda\x86\xc8\xb5\xa5\xb8\xd3\x05\xc7\x71\xed\x82\xc3\x7d\x57\x48\x01\xc6\x81\xdb\xbe\x17\x4f\xe8\x9d\x53\x2b\x1f\xbe\x0e\x8c\x6a\xdc\xcd\x33\x68\x06\x38\xa8\x8b\x00\xf3\x5a\xf1\x0e\x44\xd7\x56\x4e\x99\x1f\xbd\x5b\xc4\x8d\x49\x59\xf9\xef\xd2\xe1\xb2\x40\xd3\x7c\x5d\xed\x3b\x5d\x75\x16\x5a\x73\x2c\x3d\x6b\x83\x15\x29\x31\x76\xd3\x1c\x96\xcc\x09\x91\x78\xc9\xed\x89\x5a\x2f\xce\x28\x88\x89\x04\x76\xf4\x0e\x44\x8b\xbb\x83\x82\x70\x07\xea\xec\x2d\x7e\x41\xe8\x5c\x2c\xd1\xe3\x5f\x96\x21\x12\x8e\x45\x4e\x69\xc6\xdc\xbf\xa6\x88\xae\xdb\x6a\x56\x95\xec\x89\x51\xb2\xa5\x95\x31\x13\xda\x95\x5c\xdd\x49\xec\xd0\x81\xdf\xf9\x40\x6d\x82\xcc\xd8\x4d\x7f\x55\xe7\xde\x11\x36\xf0\x13\x3d\x3c\x60\x0f\x34\x6c\xb3\x4b\x0c\x62\x3e\x8c\xd1\x2d\x5a\x4f\x06\xf5\x35\xed\x68\xae\x3b\x04\x47\xab\xc3\xf5\x0b\x0e\x67\x12\x6e\x8f\x0c\x1b\xde\x36\xf0\xd2\xba\xab\x11\x54\x35\x7e\x94\xfa\xd7\x8c\xa0\x26\x90\x20\x53\xe8\xa9\x25\x88\xd5\x1a\x9b\xca\x95\x4c\xd7\xe0\xaf\x59\x5b\x8c\xdc\x21\xa6\xd7\xbb\x26\x35\x75\xdf\x67\x86\x1a\x0a\x8c\x29\xb9\x58\x30\x57\x06\x89\x8a\x48\x3e\xf7\xca\xb9\xcf\x36\xc3\x74\x79\x0a\xa5\x87\xe5\x09\x29\x50\xcc\xc9\xf6\xac\xe8\x56\x9e\x5f\xb8\xa8\x3b\x98\x13\xcd\xb0\xf2\x0a\x16\xb5\xb2\x59\xb5\x26\x3a\x93\x61\x2b\x17\xd6\x37\x83\xec\x94\x22\x7a\xfd\xf6\x62\x71\xca\xfd\x65\x27\xb6\x6f\xdd\x4c\x19\xcb\x02\x16\x85\xfe\x53\x5f\xb4\xf4\x59\xef\xd8\x00\xfe\xeb\x1f\x5f\xbc\x9f\xfd\xf1\xe7\x73\x37\xdc\x1b\xa9\x9a\x42\xb8\x26\x69\x72\x10\x92\x39\x29\xe0\x7b\xaa\x42\x2c\xba\x5f\xe4\x38\x5f\x5e\xd1\xc3\xc8\x9b\x78\x27\x8c\xe1\x79\x04\x48\x84\x00\xa1\x60\x49\x28\x02\x7e\xfe\x7d\xe1\xc6\xd3\x39\x8c\xf0\xaf\x85\xc3\x5e\x07\x7f\x6c\xae\x8e\x38\x55\x04\x36\x07\x23\x8c\x40\x24\xf9\x0c\x1d\x8c\xf9\x92\x9a\x0e\x31\x4b\xa6\x31\xf6\x6f\xf5\xc3\x16\x27\x68\xc9\x64\xfe\xc7\x97\x18\x85\x99\x91\xc1\x70\x34\x0f\x91\xc8\xee\xd0\x2c\x00\xfd\xcd\x13\xaf\x90\x0d\x79\xa8\x1a\xa6\xef\x7a\xfc\x3c\xad\x1e\x3f\x9d\xbc\x8a\x0a\x1e\x9d\x3a\x7d\xba\xb9\xdc\x2e\x2c\x72\xe8\x35\x21\x3d\x77\xab\x53\x6e\x83\xaf\x73\xe8\x30\xdb\xa0\xb8\x74\x8b\x84\x53\x66\x3a\xcf\xd6\x36\x7d\x71\x78\xe8\x55\x73\xe5\x32\x36\x80\x05\x64\x20\x22\xba\x48\xaf\x91\xc3\x51\x32\xb6\x0a\xab\xa8\x9a\x91\x35\xd8\x1c\x45\x88\xc2\x70\xc7\x0a\xec\xf6\x6f\xb7\x7f\x83\xcb\x37\xf7\x5b\x50\x60\x52\x09\xe5\x58\x2d\x1c\xb6\x05\x88\x0e\x6d\x7a\x14\x12\x46\x01\xc8\x1b\xb5\x03\x96\x70\x3f\xd3\x15\xfa\xc5\xa8\xa7\x6a\x90\xc8\x9a\x40\xde\x61\xb4\x9a\x36\xde\x2c\x0d\x0a\x87\x37\xde\xd0\x4b\x68\x63\x05\x3e\xea\x88\x6c\xac\x69\x9d\x19\xf1\x53\x36\xb5\x5c\x97\x54\x3b\x2c\x95\x43\xdc\x30\x4d\x48\x26\x9b\xaa\x92\xbb\x32\x15\x75\x2d\x92\x83\x1c\xbe\xd5\xd1\x2f\x35\x8d\xbf\x80\x2c\xfb\xea\x9c\xd2\xcc\x1f\xfb\xd8\x14\xf7\x06\x38\x9b\xeb\x1d\x0c\xf9\x0c\x1b\x62\xe3\x79\xfc\xfc\x5a\xca\x0f\x99\xcd\xcc\x60\xc9\x55\xda\x6c\x8d\x4f\x48\x85\xe7\x5d\x6f\x25\x9c\x6f\x22\xfa\xb2\x4b\xcd\x68\xe2\x3d\xd3\xd8\x55\x5c\x23\xd8\x6e\x22\xf2\x9f\x36\x12\x7a\x84\x3b\x86\x77\x9c\x36\x30\x2c\x6d\x70\x24\x1a\x67\xe1\x68\x0e\xb4\xeb\x58\x2b\x28\xdc\x1e\x9d\xba\xf6\x26\x94\x63\x9f\xba\x1b\x04\x3f\xae\x9e\x44\x23\x9f\x6f\x09\xdc\x35\x28\xe5\xf5\xab\xf3\xaf\xef\x4f\x5e\xff\xd1\x1c\x9d\xce\xe6\x37\xea\x01\x77\x0d\xe7\xac\x96\x6d\x71\x15\x23\x1f\xcf\xd6\x20\x8d\x33\xb3\xbc\x1e\x71\x5c\xc2\x7b\xfe\x3b\x5e\x85\x9c\xc0\x39\x03\xff\xfd\x9f\xff\x05\x42\xb2\x12\x98\xc6\x13\xe0\x2f\x20\x85\x7e\x66\xe3\x4c\x80\xc0\x77\x64\x13\xb0\x58\xc7\x0b\x14\x31\x40\xa2\x70\x9d\x6b\xce\xa1\xa6\x7c\x29\x64\x9c\xc0\xf9\xaf\x7d\x72\x4e\x74\x78\x94\xec\x78\x6a\xd5\xba\x0e\xbf\x9e\xc6\x14\xc5\x28\x0a\xec\x79\x1f\x8d\x50\x96\xfa\x48\xfc\x60\x6b\x0b\x30\x0f\x41\xa2\xbb\x86\x73\xfd\xe6\xba\xef\x85\x95\x4b\xc6\x22\x3f\x40\x5a\xee\xb0\xf3\x93\xbc\x24\x94\x30\x08\xb2\xed\x39\x9d\x65\x5e\xd5\xb4\x88\x74\x2b\x70\xd1\xe2\x32\xbb\xe1\x40\xcf\x7e\x2c\x27\x95\xad\x38\x4f\x90\x10\xc3\xc8\xb7\x9b\x63\x59\x46\x55\xdf\xf5\x66\xa7\x6e\xfd\x57\x61\x83\xa3\x9e\xde\xdd\x9e\x1c\x32\x42\x8c\xb6\xe3\xd5\x6d\xe0\x44\x49\xe0\x58\x37\x9e\x38\x40\x37\x90\xee\xcf\x8d\xe7\xf1\x97\xf8\xf0\xeb\xe3\xbf\x7f\xd5\xef\xc6\xb3\x8c\x73\xb8\x80\xec\x44\xbf\xc6\xcb\xf9\x5d\x81\xfa\xdb\xd8\xcd\xa8\x45\xfd\x96\xa0\x7f\x0f\xd5\x8d\x48\x7e\xdf\xd8\x05\xb0\x37\xb7\x56\x0d\xcc\x6c\x3e\x17\x1a\xee\x3f\xe5\x55\xe6\x96\x6f\x3c\x3d\xaf\x2b\x06\xd5\x90\x7b\xce\x07\x79\xdb\xd9\xff\xce\xd3\xed\xe6\xb3\x37\xfe\x65\xe7\xeb\xcf\x96\xcb\xb1\x21\xd6\xc1\x29\x25\x6c\xdb\x20\xb5\x1b\xb8\x75\x1c\xff\xe2\x71\xeb\x77\x8f\x1b\xb9\x7e\xfc\xed\xdd\x40\xf6\xbe\x18\xb4\x0e\x32\xfa\x7b\x46\xb8\x86\x1c\xa6\x8d\xcc\xc7\x01\x16\xfd\x6b\x32\x1d\x9b\x87\x20\xa7\x86\x13\x6e\x7c\x45\xa4\x23\xb6\xdb\x51\xb6\x3a\x92\xbc\x25\x92\xd3\x43\xaf\xd7\x11\xde\x6a\x76\x93\x63\xde\x51\xd7\xcd\x3e\x6a\x8b\x91\x11\xad\xec\x9a\x19\x35\xae\xad\x9d\x10\x7f\xc7\x46\xf6\x4b\x76\x7c\xf0\xfd\xc1\xaf\x91\xd9\xc8\x96\xb0\x7b\xee\x3d\x45\x44\xc6\xbc\x8f\xa2\x72\xca\x70\xc2\x93\x99\xc9\x4c\x05\x21\xd9\x48\x26\x48\x57\x73\x38\x21\xbe\x6b\x7c\xa4\xba\xcf\xa5\x67\xce\x14\x7e\x9d\x36\xd9\x46\x34\xd5\x89\xe7\xa7\x94\xf2\x56\xee\x95\xca\xa8\xb6\xa2\x1a\x1d\x6a\x4f\x5c\x36\xe8\x10\x90\x9e\x09\x84\x0f\x52\x4a\x56\x96\xd9\x95\x30\x2d\x79\xea\xb5\xfc\xa3\x1d\x65\xaf\x0e\x1e\x39\x7e\x34\xa7\x68\xa2\xc5\xdf\xd4\x35\xac\xe3\x42\x3f\x0d\x11\xb2\x17\x05\x2b\x30\x97\xdd\x69\x58\x45\x93\xdc\x24\x15\xf3\x56\x64\xe3\xd3\xb1\x8c\xe1\xda\x8b\x94\x75\x78\xda\xee\xd4\x34\x40\xc0\x6e\x92\xa0\xb2\x5b\xdd\x26\x08\x5a\xc2\x13\xee\x45\xcf\x1a\x50\x72\x77\x72\xd6\xd1\x88\x37\x49\xcd\xf7\xdc\x36\x1f\x21\x7c\xeb\x60\x38\x0d\x08\xe6\x38\x98\x29\xd5\x6c\xf2\x41\x87\x91\x3d\x22\xc3\x4b\x40\x45\xa7\xcb\xd6\xb0\x4c\xc6\x52\xc7\xb0\x8c\x7b\xd2\xb8\x82\xe1\x6d\x4b\x1a\xaf\x4a\xb9\x10\x0f\x31\xfd\x22\xfe\x51\x2b\x40\xab\x89\x7d\x88\xa3\x5b\xa0\x76\xc8\xfd\x94\xa3\xc0\xd7\x7e\x9f\x10\x5f\xc8\xee\x29\x63\x25\x88\x59\x4b\xac\x49\xbd\xb6\x82\x87\x9e\x87\xa1\xf2\xa8\xbc\x02\x87\x2a\xed\xa2\x6c\x9e\xf2\x6a\xaa\x3a\x17\x55\xad\x68\x41\xac\xfd\x8a\x24\xe4\x52\x66\x5a\x98\x08\xd1\xee\x8e\x34\xde\xbf\x68\x5d\xc9\x8a\x4e\x62\xa5\x77\xb4\xf4\x2d\xf3\x1a\x7a\xc5\x88\x31\x52\x86\xe8\xd7\x90\x9d\x2e\x60\x34\x47\x97\x28\x0a\xe4\x38\xb2\x18\x43\x7c\xfb\x16\xad\xb2\xd5\x15\x5f\xf7\xc0\x94\x6f\x5b\xa7\x48\x6d\xa2\x28\x98\x7e\x56\x4a\x6c\xfa\xf1\xff\xfa\xf8\xaf\x7f\xb6\x39\xb8\xde\x28\x68\xc0\x72\x7d\xc0\xe7\xc4\x60\x2e\xc5\x26\x8e\xc8\xfd\x5a\xd8\xda\x5c\xa8\x7e\x12\xc7\xb4\xd4\x6c\x87\x92\x10\x99\x1f\xb0\xd3\xbe\x78\xad\xe0\xaf\x58\xcb\xc9\x0a\xe2\x04\x47\xf3\xf7\xe8\x0e\xa3\x55\xef\x28\x60\x0b\xf3\x4c\x79\x69\x4e\xec\x1b\x8d\x83\x6a\x9d\x00\x72\x72\x89\x6e\x1b\x63\xf5\xd6\x6c\x0b\x91\xd4\x36\x66\xad\xc9\x5f\x5b\x8c\xc0\x39\x74\x50\x6b\xf3\x59\x77\xbe\x36\x97\xf8\x50\x9c\x75\xe3\x78\xce\x3c\x87\x2c\x07\x41\xdb\xa9\xeb\x7c\xf8\xe6\xfe\xfa\xdd\x87\xeb\x65\x17\xd7\xf9\x59\x35\xa9\xeb\x32\x3f\xa6\x9b\x76\xe8\xe0\x53\xdd\x6c\xe8\x34\x76\xb3\x81\x73\x24\x9f\x6a\x3a\xaa\xf3\x6c\xfa\xf6\xf0\xad\x16\xa3\xad\x77\x02\x17\x83\xaa\x5d\x2b\x40\xdf\xaf\xe4\x49\xac\x54\x9a\x58\xf0\x44\xa2\x07\xe6\xff\xe0\xb1\x06\xc2\x43\x04\x13\x51\xd0\xad\x1e\xe6\xf7\x0c\xfc\xce\x25\xcf\x34\x9c\x78\xb1\x3c\x8c\x26\x15\x8d\xaa\x5f\xb5\xe5\xce\xfa\xa5\x30\x02\x26\x1e\x45\x33\x8a\x18\x47\xd6\x53\x30\xf3\xbc\x96\x21\xff\xd1\x07\x1e\x4f\xac\x7c\xa8\x82\xbd\x5a\xf1\xad\x57\xc2\x64\x2d\xc1\x9d\x55\xc0\x53\x4c\x25\xbb\xd9\x67\xd9\xdf\x17\xe8\x0e\x85\xe2\xec\xcd\x3f\xbb\x42\xbf\xa4\x28\xf2\x91\xf6\x71\xbd\xf9\xe3\xc7\x32\xc8\xbe\x20\x71\xe5\xf0\x28\xd5\x1a\x6a\x7f\x4a\xba\x57\xfe\xd6\x1e\x90\x5c\xc8\xff\x96\xcc\xd0\x3a\x1d\xcb\xa6\x93\xf9\xdf\x9c\x3d\x7a\x63\x67\x99\x0f\xaa\xfd\xa2\x6a\x5a\xe8\x5c\xcb\x3f\x84\xc6\x0b\xdd\x12\x0f\x2d\x61\x79\xb9\x78\xc9\xe2\xc2\xe2\xb3\x3f\xaf\xf5\x1b\x70\xfd\x41\x4d\x5c\xfa\xfc\xb4\x02\x2e\xe7\x54\xf2\xed\x39\x3c\x5b\x05\x0a\xee\x02\xd1\xd7\x0d\x0f\xa8\x47\x91\x7a\x2b\x7d\xaa\xbb\xc2\x9d\xb2\x86\xbd\xe3\x46\x5b\xc3\xe6\x72\x4e\xe3\x3f\x72\x34\x16\x36\x16\x0f\x65\x09\xa4\x89\xea\x35\x6b\x09\x84\x0e\xea\xf5\xd1\xb3\x43\xad\x25\x28\x3a\x7a\x2b\xda\x05\xa2\xce\x4d\x3c\xfa\x04\x1c\x5a\x98\x99\x4d\xfa\x02\xdf\xba\x15\xef\x58\xd8\x79\x47\x12\x34\xbd\x21\xf7\xa5\xc6\xc9\xb6\xfe\xc5\xd9\x0f\xae\x17\x30\xba\xed\x70\x93\x63\x0b\xf6\xcb\xa1\xb4\xba\x92\xec\x83\x1c\x30\x67\x86\x50\x70\x03\xfd\xdb\x7f\xeb\x1d\xa3\x71\x9a\x46\x4c\xc9\xb2\x48\x15\x3f\x2a\x1f\x5c\x13\x2f\x94\x94\x6e\xeb\x9e\xdd\x23\xb1\xc7\x69\x7a\x22\xaa\x67\xb9\x66\x74\xce\x83\xeb\x05\x27\xf2\x03\x0a\x43\xb2\xca\xf3\xd7\xbc\x1f\x10\x9b\x00\xc1\xb9\x7f\xf3\x6c\xaa\xee\x3b\x92\x59\x31\x47\xce\x80\x21\x7d\xc0\x54\xb6\xbb\xf4\xb7\x24\x01\x14\xc1\x30\x5c\x3b\x2c\xfc\xb8\x7d\xe1\xed\x62\xdd\xe8\x72\x6d\xf4\x04\xa8\x1a\xdc\x5a\x83\xf1\x82\xb2\xca\xb0\xce\x8d\xe7\x7c\xc3\xe4\x76\x75\x61\x6a\x2b\x3c\xc9\xaa\x55\xad\xdb\xd2\xb2\xd6\xf7\x06\xcd\x08\x2d\x8c\x59\xa1\x79\x35\xc0\x55\xa3\x95\xa9\x1b\x8d\x26\xab\xb3\x6a\x64\xd6\xac\xd0\x7c\x82\x0d\x76\x65\xa3\x11\x99\xcd\xba\x34\xc7\xa2\xef\x26\xff\x3e\x42\xea\x9c\xba\x20\xbe\x04\xb8\x6f\x37\x2f\x2a\xab\x6e\xce\xf7\xd8\x52\x8d\xb0\xee\x35\x8f\xe8\x87\x53\x74\x87\x99\xa0\xc1\x2e\x1d\xf1\x6f\x3f\x0b\xe2\x5f\xee\x83\x77\x6e\x85\x75\xf5\x24\x07\xb5\x0c\xd7\xf3\xb8\x96\x37\xf5\x96\x80\x7c\x0c\xb0\x84\x41\x87\x9e\x9d\x4e\x57\x07\x65\x62\xb7\x1c\xf2\x0b\xc8\xce\xb0\xac\x33\xb2\x9f\xf0\xf2\xad\x8b\xa3\xd2\x7a\x8e\x26\x65\xaa\x98\x62\x53\xa6\x5b\x99\x6c\xa4\xe3\x2a\x65\x84\x6d\x1d\x80\x9b\x35\xf0\xcc\x63\xcf\x30\x65\x89\x21\x73\xb1\xe9\xf9\x10\xd6\x1f\x37\x4d\xa7\xdf\x71\xde\x76\x87\x83\x67\xb3\xe9\xaf\x24\x42\x60\xb5\x66\x78\xb5\x36\xa2\x6e\x96\xcf\xc3\x80\xf3\x42\x0d\xd6\x6c\x59\xda\x84\xa4\xa5\xe9\x9b\x0f\xa3\xf7\x24\x0c\x33\x53\x6b\x14\x6c\xa7\x67\xfd\xb1\x9d\x54\xaa\xfe\x00\x38\xda\xe6\x44\x7d\xbc\x44\xaf\xc4\x1a\xdb\xb0\xd1\xde\x23\x96\x10\xda\xda\x4a\x82\x77\xab\x16\x28\xab\x9d\xf5\x73\xcb\xd6\xe5\x77\xbb\x79\xa4\x8b\x4a\xf6\x4c\x4b\xa0\xae\x63\x21\xbd\xb6\x08\x6d\x4f\x98\x57\xa7\x51\xed\x18\xaf\x4e\x43\xd4\x00\x5e\x25\xf3\x5a\x50\xda\x9d\xc6\xb6\xc3\xb9\x36\xa9\xf3\xc6\x34\x58\x2a\x67\xc6\xf3\x60\x95\x4e\x6a\xca\x85\x1d\x32\xef\x36\xcc\xc5\xde\x76\xf3\xae\x00\x17\x37\x6b\xe8\xbb\x01\x59\xbb\x29\x85\x42\x93\x76\xb4\xff\x9d\x93\x32\x37\x76\xd9\x52\x32\x13\x06\x99\x79\x22\xc1\x5d\xe4\xb5\xcb\x9e\xe7\x38\x9a\x4f\x63\x48\x2b\xd7\x2e\x13\x4f\x7f\xb4\xcf\x60\xba\xbd\x38\x49\x7a\x58\x8c\x8d\x3f\x90\xcb\xf6\x26\xff\x81\xa2\x74\x89\x28\xbc\x09\xb3\x9f\x4c\xe6\x28\xf9\x22\x7f\xe7\x1f\xfe\x83\xa2\x24\xa5\x11\x48\x14\x99\xfe\xf1\x8f\x3f\xf4\xa2\xd3\x10\xb2\x3c\x6c\x2a\x08\x6f\xac\xb8\xd7\xd1\x30\x62\x76\xeb\x18\x2c\xff\xf6\xf2\xea\xef\xe8\x66\x65\xbe\xa1\xf3\x61\xd2\x76\x41\xe7\x82\xb3\x53\xbd\xa2\x73\xfc\x8d\x7e\xf1\x3e\x46\x30\x2e\x47\xe2\xd9\x64\xfe\x56\xa5\xbc\xb9\xbd\x6b\x74\xd3\x6c\x75\x1c\x8e\xa3\xa2\x2e\xa2\x2d\x46\x37\xa8\xb0\x60\x93\x9e\x76\xf3\x16\x18\xa4\x87\xab\xc3\x26\xa2\xee\x7d\x97\x7b\xea\x8f\x57\x07\x87\x0c\xbe\x7a\xd6\x50\xe9\x6f\x28\xf4\xef\x56\xef\xfe\x6c\xc2\xb3\xbe\xa6\x09\xa9\x57\x65\xfd\xc2\xab\xe3\x32\xeb\x35\x95\xf0\x1c\x0b\xc8\x16\x02\xfd\x20\x3b\xd1\xb3\xbf\x8a\x5f\xcd\x70\x98\xf0\x80\xd6\x12\x26\xfe\xe2\x3a\x7b\x4a\xfc\xf3\x34\xef\xa1\xc6\xff\xfc\x12\x73\x5b\x98\xff\x5b\xb4\x31\x2b\xf6\xa5\xb0\x29\x0c\x78\x9a\x3c\x35\x0c\x52\x7f\xd1\x7a\xf5\xbe\xd9\x2a\xf7\xd1\xf6\x59\xbf\x0d\x35\xfa\xc6\xc9\x24\x7c\xcc\x2d\xc3\x44\xba\xe4\x8e\x2b\x99\xef\x5f\x1d\xbe\x5f\x1e\x35\x54\x32\x6b\x11\x55\x55\x52\xd8\xa9\xe6\x82\x9b\x7d\x4c\x75\x7b\xd4\x75\xbf\x4b\xf1\x31\xba\x4f\xa6\x54\x24\xe3\xee\x07\x30\x6d\xf5\xcc\x2b\xb9\x0d\x0e\x60\xb5\x13\x2f\xbf\x25\x2c\xb2\x37\x5b\x1c\x09\xb9\xd7\x5e\x55\xc2\xd0\x36\xe7\xc8\x3b\x55\x30\x41\x13\x3d\xc5\x94\x5f\xb3\x61\xb4\x3a\x43\x11\xc3\x89\x78\xf2\xc8\xe9\x0e\x7c\x85\x13\x7f\xf1\x1d\x46\x2b\x4f\xfb\x45\x13\xa0\xde\x4e\xc8\x73\x12\x86\xee\xb4\x99\x11\x9a\xb4\x93\xe6\xb8\x33\x69\x8e\x07\x92\x46\x3a\x96\x79\x8d\x68\xa5\x36\xb4\x8d\x38\xde\x7f\xff\xe7\x7f\xd9\x70\x4a\x4b\xe2\x01\x7d\x07\x12\x3c\xed\x4c\x82\xa7\x56\x12\x98\x76\xae\x9b\x40\xd8\x78\x7f\x95\xb1\xd3\x8d\xf9\xea\xd1\x51\xc1\x9e\x25\xec\x8a\x0a\x56\x35\x96\x60\xcb\x62\xeb\x52\xd1\x75\xa6\x8f\x92\x84\x2c\xa7\x1c\xd8\xc6\xa5\x02\x7b\x8c\x3c\x08\x55\x80\x3e\xf1\x80\x1f\x12\x26\xc1\x5e\x1a\x52\x22\xb2\x7f\x1d\x67\xf6\x0c\x16\x80\xe3\x56\xdb\xda\xc1\x19\x20\x51\x02\x71\xd4\xd2\xb6\xa3\x77\x61\x76\x33\x84\x82\xf5\x98\xa9\x95\x05\xda\xf2\x7b\x9b\xab\x20\x52\x3c\x15\x9d\x6e\x25\x8c\x29\xa8\x7e\x30\x5d\x10\x8a\x7f\x75\x78\x4f\xb9\xde\xa1\x91\xd5\x62\x70\x53\xf5\x0d\xa1\xc9\xab\x75\x6e\x66\x35\x95\x0b\x34\x67\xc1\xa0\x84\x6f\x96\x62\x00\xb7\x2a\x7e\x07\x62\x7b\xdd\x3a\x43\x59\x43\x96\x1b\x21\x99\x4f\x11\x4c\x64\xa9\x52\x5f\xaa\x69\x63\x6c\x82\x70\xa7\x62\x78\x10\xc0\x64\x0f\x09\x98\xc6\xc1\x60\x02\x6a\x63\x6c\x82\x80\x17\x90\x25\x20\x7f\xc7\x48\x04\x6c\x7b\xa4\xfa\xfd\xa3\xd6\xdb\x94\x04\x42\xe6\x0f\x92\x3e\xf9\xfb\x4d\x48\xde\x09\xf3\x55\x0e\xf1\xbe\xed\x5b\x8e\x65\x38\x84\x6c\x6a\x80\x4d\xd0\xed\x0c\x8d\x4e\xb8\x6d\xed\x57\x23\x7c\xb8\x61\x20\x27\xc8\x98\x6a\xaf\x22\xcd\x03\x68\xb8\x65\xaa\x27\x9d\x59\x10\xe5\x72\x63\xba\xd9\xe0\x97\xe2\x22\x0d\x43\x77\xc8\x98\xb6\x30\xe9\xf1\xd0\x4e\x15\x26\x7e\xf5\x4b\xb8\x68\x2f\x78\xcd\xa3\x38\xc6\xe0\x44\x29\xaa\xa8\x3d\x3a\x42\xcd\x6b\x2d\x4c\x27\x47\xaf\x6c\x6c\x51\xae\x50\x6c\xe4\xc6\x82\xd1\x23\xbd\x0e\x36\x0f\x76\x55\xa0\xc0\xcc\x50\x55\x8d\xd1\x50\x11\x05\xe5\x57\xc6\x28\x64\x62\xad\xd1\x8c\x68\x64\x7b\x22\x33\x09\x84\x9c\xd1\xcc\x41\xcb\xd5\x91\xe8\x49\x50\xae\x82\x95\x9f\xb1\x30\x9d\xeb\xe5\x18\xea\x19\xb9\x5a\xf1\x6d\x5b\x4f\x8d\x0e\x3a\xa8\x02\xca\xfd\xd3\x4f\x11\x68\xf8\x3f\xaf\x54\x39\x67\xc6\x3b\x2b\xe7\xc7\xc8\x15\x30\x95\xec\x1f\x58\x33\x64\x9a\xde\xab\xde\x6d\xcb\x42\xc6\x51\x84\x02\xb7\x65\x54\x86\x1c\x14\x1e\xc6\xfe\xed\x19\x49\x6f\xf2\x1e\xa9\x1d\x5e\xaf\xa6\xe0\x9a\x5f\x7f\xfc\xbc\xa9\x16\x56\xae\xbd\x2d\x57\xc6\x65\x32\x2f\x9d\x9e\x76\xcf\x9d\x6a\xe0\x6a\xfd\x5a\xbe\x54\x83\x1b\x91\x64\xea\x12\xb3\xe9\x51\xd4\xdc\x98\x5b\xc6\x8f\xf5\x6a\xd9\x36\x2a\x00\xc6\xbb\xc4\xec\x27\x46\xac\x45\x6b\x70\x72\xc4\xa5\x88\x0a\x2f\x57\x51\x6c\x19\x2c\xef\x4f\xd0\xc9\xb4\xb5\x61\xf9\xd8\xc0\x01\xb4\xb7\x19\x4f\xf0\xfc\xeb\x89\x77\x46\xe1\x2c\xd1\xb1\x02\x02\xf1\x81\xfa\xd3\x36\x49\x2b\x40\x41\x87\x39\x5c\x60\xbd\xcc\x3b\x23\x56\x81\x41\xbb\x9d\x19\x9c\x50\x7f\x81\xef\x50\x09\x34\x01\xe6\x9f\xd9\x11\x8f\x9a\x0d\xb4\xca\x34\xf2\xb6\x8f\x6e\x68\x79\x23\x58\xa5\x65\x63\xd1\x96\xe1\x90\x1f\xcb\xda\xbd\xbf\x56\x52\x6f\x07\x04\xef\xf6\x5a\x71\xfd\x9b\x5f\xc2\xa8\xbe\xf5\x1c\xd4\xbc\x78\x65\x02\x1b\x5b\x74\xd8\xa9\xd0\xbb\xba\xbd\x21\x0b\x59\xa1\x11\xe4\xa9\xf9\x63\xf5\x51\x64\xf2\x30\x37\x5a\x85\xdd\x0f\xfe\x7a\x75\x16\x8e\xe6\x27\x61\x78\x46\x7c\xfb\xac\x5d\xce\xb3\xa1\x61\x64\x13\x2e\x56\xa3\x93\x78\x89\x23\xb5\xde\x2a\xcc\xac\x97\x7a\x3b\xb2\x0e\xde\x90\x3b\x04\xd2\x78\x9b\xe6\xc1\xf8\xc4\xd7\xe1\xb4\x7a\x91\xbf\x1a\x64\xdb\x2e\xf9\x03\x89\x3c\x36\x26\x03\x9c\x40\x2a\xcd\x1b\x7b\x94\x8b\x15\x3b\x2f\x3e\x44\x31\x8e\x6a\x0e\x96\xab\x05\x31\x98\xea\xe2\xf5\x8e\x35\xa6\xdd\xb5\x72\x47\x2c\x96\xad\x6a\xa0\xdd\x11\xfd\x72\x83\x24\x37\x0a\xb5\xd5\x8a\xf0\x1a\x60\xdf\xf2\x4b\xba\x05\xf2\x6f\x6f\xc8\xbd\xd7\x4c\x4f\x11\x4c\x38\xcb\x13\x44\x2c\x84\x35\x9d\x7e\x5a\x60\xa2\x1f\x86\xcf\xa0\x5c\x41\xb9\x3c\xfe\xbf\x28\x30\x27\x31\x8d\x24\xdc\x83\x27\xe9\x3e\x3b\x07\x39\x18\x91\x15\x2d\x86\x10\x54\xa6\xd5\x26\x53\x77\x78\xc0\x53\xcb\x83\x13\xd9\xfe\x5d\x70\xcc\x87\xe6\xa9\xb8\x24\xa7\x9c\xf3\xf4\x2e\xc7\x14\x05\xf1\x30\x28\x70\x84\x9a\x03\xb1\x6a\xdc\xe6\x0a\xa1\xaa\xe9\x6b\x06\xed\x7a\xa3\x03\x72\xf5\x68\x3d\xbd\x1d\xfa\x1d\x3b\x12\x90\x1b\x15\x09\x01\x30\x22\xc9\x02\xd1\xa2\xc5\x69\x4b\xb1\xd5\x1d\x3a\xd3\x42\xba\x3d\x8a\xae\x5c\x48\x5d\x01\x4b\xd9\x43\x62\x77\x80\x95\xd7\x7a\x23\x5b\x69\x2b\x1e\x1b\x44\xdd\x8e\xe6\xdc\x58\xce\xa3\xf3\x80\x9d\x80\xcc\x36\xdf\xc1\xba\xa0\x75\xbf\x06\xd6\x82\x61\xee\x6d\xac\x0d\xbc\x1d\xb9\x9f\xb5\xa7\x95\xdc\xaa\x03\x4b\x5f\x65\x88\xa2\x79\xb2\x68\x2a\xd4\x3d\x2e\x2e\x3f\x14\x35\x4b\x0f\x3a\xb7\xc7\x36\x1e\x64\x23\xf2\x8f\x2b\x2f\x7d\x5d\x5c\x37\x5b\xd5\x5e\xa9\x89\x14\x53\xaa\xcc\x85\x77\x0d\x3a\xaf\x23\xe7\x44\x1b\x66\xd9\xb3\x77\x46\xe8\x26\x59\x55\x2b\x5f\x1b\xb3\x7f\xf4\x92\xdc\x21\xd1\xa9\x52\xe4\xc6\x89\x76\x66\xe6\x02\xc2\xbe\xd8\x3a\x27\x41\xab\x99\x55\x5e\x16\x5a\xc6\xc9\x7a\x2a\x41\x60\x2b\x0a\x7e\x89\x18\x13\x30\x56\x96\xc4\xd8\xcc\x43\x12\x00\xe9\xde\x49\x10\x80\xfc\x2e\x12\xdc\x61\x08\xfe\x08\x4e\xdf\xbd\xbd\x3e\x7f\x7b\x6d\x68\xfd\xd9\x1b\x3e\x88\x88\xee\x32\x5b\x5d\xe6\x25\x55\x88\xa0\x13\xef\x8a\x4b\xa2\x76\xfe\x02\x48\x11\x88\x29\xba\x43\x11\x07\xd5\xcc\xd4\xcb\x8c\x92\x25\xc8\x7e\xc2\x51\x36\xa3\x00\xf0\x84\xad\xec\x8f\xf2\x6d\xed\x36\x31\x31\x8c\xf5\x01\x63\x54\x1c\xe4\x1d\xd9\x14\xa2\xca\x6e\xfb\x3a\xcc\xd7\x4f\x6f\x2f\x13\x73\xb7\x7c\x81\xb7\x32\x6e\x4b\x4e\xd5\x73\xfa\x95\xc2\x93\x51\x1f\x08\x72\x80\x98\x92\x3b\x1c\x20\x40\xd1\x34\xe5\xc0\xe4\x79\xab\xfc\x64\x01\x13\xe0\xc3\x08\xdc\x20\x80\x39\x70\x0a\x0a\x00\x8e\xb8\x75\xb9\x06\x81\xe6\xfc\xb6\xa5\xed\x37\xe6\x43\xdb\x62\xc9\x99\x20\x4f\x61\xb0\xc4\x75\x44\xb4\x96\x9f\x2a\xd4\x9a\xb6\xd4\x84\x1c\xdd\x66\x78\x95\x9f\x62\x9c\xbd\xc4\xaf\x53\x35\x50\x3b\xba\x87\xd3\xd8\xbd\xae\x2f\xf7\xc4\x51\xdd\x8a\x7f\x55\x02\x30\xb2\x7b\xa7\x01\x96\xdb\xc6\xee\x99\x72\x94\xa6\x72\x48\xa8\x43\x92\xd0\xfe\xf9\x38\x0e\x6b\xbe\xaa\x1a\xce\x8e\xeb\x77\x8d\x55\x6f\xc8\x05\xd1\x4e\x6f\xcc\xf8\xd1\x79\x22\x14\x8e\x45\x25\xfc\xeb\x9f\xe2\xff\x6d\xd8\x8b\x29\xe9\xed\x2d\x79\x32\x25\x94\x4f\xf3\x0e\x55\xab\xd7\xa9\xd0\xbb\x65\x5d\xfd\xcc\xe1\x92\x56\x71\x48\x8a\x57\xed\xa2\xe7\x94\xd9\x8a\x18\xd5\x30\xc9\xef\xa2\x77\x8c\x9b\xfd\x6c\x71\x77\xf8\x2b\x0b\xcd\xa6\x49\x61\x52\x8a\xa2\xf6\x91\xad\x14\xed\xe2\xde\x3b\x61\x0c\xcf\x23\x50\x5c\xdc\x73\xb9\xc9\x6d\xf7\xcc\x60\x0d\x90\x9f\x19\x2d\xab\x05\xe1\x16\x4a\x66\xcb\x82\x64\x81\x96\xee\x35\xf2\x5b\xb4\x47\xca\x19\x08\x0d\x78\x3e\xbc\x5d\xa4\xad\x8f\xe4\xd1\x51\xb6\x51\x59\x7a\xb3\xc4\xf6\xc8\x28\x77\xb3\xd4\x06\xe8\x01\xff\xc3\x1b\x5e\x37\xf6\x2c\xaf\x1d\x54\x33\xe2\xa7\x6c\x5a\xe9\xcf\x2d\x5a\xe8\x88\x26\xdd\x6d\xfd\xb9\x23\xb4\xca\xb7\xc0\x54\xf8\x9d\xb2\x67\x77\x43\xef\x6d\x8d\x99\x79\xdb\x6d\x89\x09\xd8\xc2\x64\xfb\xf5\x50\xed\xf4\x75\x05\xc3\x91\xe7\x71\xb7\xc6\xd7\x2d\xa8\x38\xc2\x59\x76\x12\x67\x57\x61\x68\x20\x48\x8d\x1a\x0e\x67\x67\x77\xac\xb2\x1d\xec\x2f\x93\xcd\xaf\xe7\xfd\x6c\x0f\xdb\xa3\xb9\xc3\xff\x8c\x58\xd3\xe7\x3a\x3b\x0e\xc7\xe5\x35\xb6\xf8\x0e\xdd\xdc\x87\xa6\x7b\x5a\xa1\xaf\x51\x90\xa9\x69\xaf\x34\x13\x3d\x9c\x60\x0c\x78\x99\x53\xdd\x6a\x3f\x3d\x2a\x72\xf9\x8a\xa2\xfc\xa0\x1a\xbd\x6b\x4d\xab\xca\x4e\x8e\xec\xa8\xe0\x26\x87\x06\x7d\x28\xde\x98\x32\x09\x5d\xaa\x4f\x94\x7f\x78\xc0\xb5\x21\x6b\x4f\xea\x9f\x54\x50\x2c\xc5\xc0\xd0\xf7\x11\xeb\x94\x67\x65\x8a\x38\x36\xf6\xd9\x01\x37\x24\x0c\xa6\xcf\x4b\x1d\x5b\x7e\x20\x29\x58\xc0\x3b\x04\x22\x22\x0e\xc7\xe2\xf8\x96\x30\xd0\x98\x01\x5d\x7c\xbb\x26\xaf\x8a\x95\x61\x76\x26\x61\x8c\x46\x5f\xdc\x9a\xd7\x6b\x34\xad\x4f\xbe\x36\x5f\x02\x5f\x54\x84\x56\x40\x03\xbe\xeb\x95\x11\xd3\x9c\x39\xf0\xd0\xaf\x7c\xb7\xe1\x5b\x5e\x10\x99\x52\xe0\x54\x8f\x8e\x92\xaa\x6c\xb2\x56\x27\xf3\x84\xef\xa5\x4b\x19\xe7\xce\xe5\xb0\x8b\x93\xbd\xa7\x81\x05\xcd\x0b\xb0\x93\xa0\x88\x2f\xec\xeb\xd2\x7b\x84\x18\x9c\x57\xaf\xf7\xec\x6e\x5f\xff\xf0\x9d\xdf\xa6\x49\x8e\x7b\x44\x1e\x9a\x70\x49\x73\x2b\x18\x05\x38\x79\xc4\x24\x75\xc0\x24\xe5\x3b\xe7\xd4\x78\x8e\x75\x1b\xd9\x09\x91\x74\x88\xc7\x34\xb2\xd3\xc4\x25\x64\x14\xaf\x29\x1b\x49\x40\x11\x38\x34\x13\xe8\x75\x34\x76\x20\xcf\x8b\xdc\xa9\x2a\x87\x93\x72\x33\xa3\xc5\x92\x95\xe4\xbd\x9f\x26\x64\x3e\x0f\xb5\xeb\x34\x41\xb9\x89\xc7\x1d\x94\x89\x97\x2c\xd0\x52\x00\xe1\x5f\x8b\x07\x8b\x5e\x4c\x01\x4e\x0a\xa3\x66\xe2\x2d\x51\x80\xd3\x65\x71\x4c\x37\x43\xcc\x7f\x3e\xf1\x96\x19\x3b\x8d\x03\x95\x8a\x79\xdc\x02\xc1\x2f\x26\x1e\x5b\xc2\xd0\x5c\x81\xc9\x69\x9a\xf1\x1b\xf0\x62\xf6\x65\x9a\x94\x8a\xdc\x4e\xd2\x84\x2c\x61\x82\x7d\x18\x86\x6b\x00\xe3\x38\x94\x61\x94\x08\xad\xc2\x35\xf0\x15\x82\x82\x5e\xc7\xe9\xd2\x00\xdf\xe5\xe3\x4f\x04\x45\x37\x24\x0c\x75\x03\xd1\xdd\xaf\x2e\x1b\xae\x81\x86\x2b\x78\xd7\x0a\xc8\x0d\xef\xd0\x36\x70\x77\x5d\x8f\x47\x11\x43\x7e\x3c\x20\x1d\x0e\x48\x75\x9b\xb0\xad\x23\xb2\xdf\x45\x80\xe2\xec\x6f\x17\xb3\xfb\xa1\x6b\x1b\x37\xa8\x6f\xdd\x31\x68\xb9\x8b\xda\xa2\xbe\xd9\xc4\x2d\x5e\xe6\xdc\xe6\xe6\x96\x70\x5a\x95\xae\xed\x96\xd0\xa6\x06\x39\x51\x41\x24\x1b\xe9\xbe\xa2\x30\x4a\xd4\x93\xc3\x52\xda\x4a\x57\x2b\xc5\xe5\xcb\x0a\x27\x0b\x1c\x35\x84\x8e\xda\xb7\xe4\x0a\x07\x73\x94\x94\x92\xd5\x9a\xb5\x65\x03\xf8\x04\x89\x9b\x23\x2d\xc6\x58\xef\x65\xa9\xc1\x90\x5b\x9c\xca\xeb\x8b\x29\xe3\x0a\x3d\xd1\x58\xa9\x23\x0d\xd2\x02\x14\xb6\xb5\xf3\x78\x37\xe4\x85\x6a\x4d\xf1\x6a\x41\x5e\xeb\x17\xc7\x48\x5d\xf2\xa5\x8c\xfb\x1c\x25\x07\xbb\x7b\x8c\xaf\x9b\x09\x0b\x82\x29\x8e\x42\x1c\xa1\x69\x35\xa3\xe6\xf7\x6b\x92\xfe\xa1\x5f\xa4\x72\x78\x9d\xc7\x50\x24\x88\x0e\x45\x36\x2e\xc1\x09\x87\xfc\x07\x17\x55\xb8\xcd\x6b\x73\xb5\x17\x47\xbd\x38\x0f\x54\x2c\x68\x97\xd7\xe6\xef\x67\x27\xbf\xac\xbf\x8d\x9f\xbb\x75\xb9\x1a\x72\x49\x2e\x6d\xb9\x2b\x09\x07\x73\x49\x89\x8f\x50\xc0\x55\x32\xf0\x61\xca\x95\x11\x64\x20\x59\x20\x8a\x00\x66\x20\x22\x20\x8d\x02\x62\x91\xcd\xa2\x22\xc3\x72\x23\x5e\xba\x99\xee\x62\x2b\xdb\xfd\x7e\x9b\xbb\x7f\x19\x22\xc8\x10\x48\xd6\x31\x92\xb9\xd5\x99\x66\xcb\xac\x46\x79\x14\x37\x1d\xfd\xae\xe1\x15\x15\x0e\x30\x87\x59\x60\x9a\x10\x5f\xc1\x08\x67\x94\x97\x0e\x87\xb8\xa3\x2c\x05\x5b\x24\xc8\x11\xff\x9e\x33\xe6\xad\x82\x9c\x6c\x8c\xc2\x5c\xe5\x0b\xca\x0e\x33\xd9\x11\xac\xe9\x62\x76\x48\x10\xe0\x3a\x33\xad\x57\x38\x0c\x95\xad\x0d\xb3\x7f\x96\xf2\x28\xf2\x6d\xa6\x0e\x76\x6e\x8e\xf3\x75\xfe\x5b\x1f\x53\xaa\x53\x33\x2a\x69\x14\x2a\x7b\x73\x94\x66\x54\xb6\xd0\x73\xdd\x0a\x95\xe6\x6a\x6f\x53\xd4\xdb\x88\xae\x14\xdc\x1a\x55\x53\xce\x51\x84\x28\x0c\x77\xac\x2a\x83\x6f\x5e\x5e\x7f\x9f\xbe\x49\xcd\x19\x46\xa5\x6c\x8a\x51\x15\xa7\xd8\x71\x6f\x44\xfb\xf9\xcc\x32\x17\x3a\xe5\x0e\x33\x7c\x83\x43\x9c\xac\x27\x80\x9f\xe2\xd9\x8e\x90\xb3\x68\x06\x5c\x96\x24\xdd\x3f\xa5\xd9\x84\x27\xbb\x41\xbd\xd8\xa8\x10\x99\xae\x0a\xab\x90\x8b\x0b\xc8\xb2\xaf\xce\x29\x25\xb4\xae\x2a\x71\x36\xc1\x3b\x18\xf2\x69\xe9\xdf\x14\xf8\x39\x6e\x1a\xb4\xa6\xa0\x36\x49\xfc\x33\xc4\x7c\x8a\xe3\xa6\xc6\x68\xb6\xb0\x96\x20\xa2\x4a\xb4\x28\x79\x4b\xa2\x99\xa1\x6a\x6a\xc8\xaf\x85\x48\x53\x28\x43\x8b\x0b\xf0\x11\xcf\xc4\x80\xad\x0d\x0e\xb7\x4d\xa9\xef\xf2\x5d\xd7\x22\xac\x32\xc1\x48\x14\x2a\x95\xa5\x35\x2f\x10\x96\x3e\xd8\x77\x99\xd8\x5e\xc2\x64\x91\x7f\xc2\x75\xbd\xfc\x44\x0c\x21\x9c\x1a\x58\xb8\xe8\x9c\x4a\x99\xdc\xb3\x69\x40\x49\xcc\xa1\x38\x74\xf1\xbd\x5e\xc7\xa5\x92\x28\x1c\x14\x87\x56\xe5\xb1\xb6\xf8\x29\x4a\xae\x8a\x47\x2d\x71\x8d\xad\x32\xe2\xb5\xdf\x49\x56\x35\xc0\xdb\x4c\x59\x5a\xdc\xf7\x56\x0f\x9e\xb7\xfe\x68\x75\xdf\xb3\xb7\x5c\xf0\x27\x3b\x03\x14\x59\xdd\x76\x9c\xa0\x25\x68\xc2\xd9\xca\xd9\x2a\xa8\xf3\xb1\x06\xf4\xd9\x03\x1f\x56\x9c\x1c\xc5\x40\x0e\xd8\xef\xa5\x2d\xc0\xc9\xcd\xb1\xdb\xca\xd7\xf3\x1f\xf3\x44\x1c\x07\x54\xa9\x36\xe7\xaf\x76\x8f\xdd\x3b\xc6\xb6\x61\xb1\x95\x98\x63\x8d\x72\xdb\x20\x73\x42\xcb\xf2\x11\x9d\x44\xd7\x2a\x42\x7c\x18\x10\x91\x08\xb5\x0b\x52\x8e\x91\xe6\x79\xfd\x45\x48\x99\xae\x3a\x58\xd1\x5b\x12\xd5\x1a\x1a\xd7\x77\x11\x9f\xea\xb8\x71\x2f\xb1\x7a\xf7\x85\x9b\x4a\x41\x9a\x00\x59\xb3\xd3\x2b\x59\x6b\xf1\x2f\xef\x66\x2e\x6c\xff\xfc\x7b\x69\xe5\x55\x62\x5e\x6e\x04\x74\x47\xc0\x71\x09\xac\x6d\x38\x42\xb3\xe1\x8d\x74\x1e\xf1\x3c\xc8\x2f\x11\x0a\x64\x63\x4d\xdb\x69\x3c\xe0\x4a\x1d\x86\x21\x59\x5d\xe0\x5b\xd1\x59\xbe\xff\x8d\x7a\x69\x1c\x87\x0b\xf5\xa6\x60\xbf\x66\x8a\x1a\x86\x6c\xed\x1a\xd6\x3b\xcd\xc1\xc6\x0c\xc5\x05\x70\x49\xc9\x32\x6e\xc9\xb5\x50\x99\xb3\x65\x3b\x5e\x9a\xf0\xc2\x40\x6a\x49\x1f\x91\x99\x22\x52\x29\x66\xeb\x9f\xc6\xe2\xc5\x15\x9b\x3b\x13\x93\x04\x51\x20\xbe\x05\x90\xdd\xe2\x68\xce\xb3\x2d\x53\x86\x28\x98\x29\xe1\x91\x16\x51\xa8\x48\xd9\xba\x57\x86\x04\x36\xae\x62\xe4\xe3\xd9\x1a\x24\x0b\x24\x27\x36\x01\xe8\xc9\xfc\x09\x38\xc3\x81\x88\x60\x2c\x50\x18\x83\x35\x49\xff\x02\xbe\xe7\x11\x31\xf9\xd1\x2c\x0d\xff\xc2\x1f\xe2\x55\xd0\x38\x0a\xc0\x6a\x01\x13\xfe\x57\x84\x50\x80\x02\xe3\x05\xa4\x7b\xd4\x79\xfb\xf1\x90\xca\x8d\x91\xdd\x61\x75\xc8\x02\x68\x8b\x88\xd8\x53\x01\x36\x13\x0f\x91\xc1\x8b\x51\x03\x22\xe5\x9c\xd3\x9d\x36\x6e\x3c\xbb\xfb\xea\xbb\xa7\x27\xcc\x1c\x14\x91\x97\x30\x5a\xf5\xd5\x06\x22\x23\x97\x25\xb8\x1e\x59\x7e\xa5\x63\x08\x24\x44\x24\xc2\x03\x42\x81\xc8\x85\xe7\xb1\x12\x1c\xdd\xe1\x04\xf1\xbc\x6b\xf1\x75\x42\xb4\x00\xa2\x25\x88\x92\xe7\x09\xf7\xa9\xc4\xe2\x7d\xf5\xfc\x94\x25\x64\x29\xab\x4d\xba\xc4\x57\xd0\x7d\x1c\x42\x1c\x4d\xb3\x09\x73\x29\xb0\x15\x65\x35\x62\xc4\xc9\xda\xec\x46\x9b\x43\x9c\x95\x9c\xba\x97\xe2\x1d\xe6\x23\xa1\x46\x7f\x70\x2e\xe6\x87\x82\x46\x8c\x89\x7c\x54\xf9\x68\x27\x28\xd4\x11\x2e\xb4\x4c\xb8\x83\xc3\xd1\xe3\x46\x9d\x98\x8e\x0a\xda\x0d\x3a\xae\x87\x43\xcc\x85\x48\x88\x7c\xb3\x40\xb9\x0d\x33\xad\x40\xee\xf3\xc6\x72\xbd\x72\x5f\xf8\x68\x95\xe2\x9d\x2b\x54\x14\xda\xd6\xc2\xfd\x03\x5e\x53\x99\xf4\x1b\x18\x49\xc4\x92\x71\xa6\x2d\xc6\xe3\x97\x17\x90\xc5\xc8\x4f\x18\x20\x33\x19\xc2\x45\xf7\x3e\x8a\x13\x71\xbf\xd1\x10\x7a\xeb\xb7\x88\x77\x2b\xd9\xa5\x6d\xdc\x35\xf0\xd2\x55\x7e\x17\xd3\x48\x74\x93\x0f\x20\x3f\xee\xd7\xca\x63\x34\x75\xa6\x70\x8c\xac\x1a\x4d\x3d\xd4\x51\xa9\xe9\x63\xbb\xe8\xb5\x8d\xa9\x8e\x47\x9d\x56\xe8\xb4\x1c\xe0\x7c\x64\xb5\x26\x1a\xb8\x8d\xb7\xbb\x4e\x61\x24\x53\x9a\xb9\x2d\x52\x5c\x71\xe2\x68\x6c\xe5\x26\xaa\x7a\x46\x9d\xf8\x02\x46\x73\x94\x4f\x5a\x69\xe8\xa6\x94\xec\x1e\x73\xce\x6f\x31\x47\x9c\x35\x45\x4b\x81\x5f\xad\x48\xcd\x31\xa5\xc6\x3e\x49\x38\x36\xe7\x98\xd3\x36\x4d\xba\x38\x03\xeb\xc8\x99\xa3\x2d\xe5\x94\xc4\x3d\x93\x6f\x9b\x96\x12\xa4\x71\x88\xfd\x4c\xe6\xdb\xb2\xf8\x7b\x4c\xf7\x5a\xf9\x50\x1b\xd9\xa4\xd9\x31\x18\xa7\x37\x21\x66\x8b\x42\xee\x93\x11\x5e\x59\x59\xc5\x49\x1c\x53\x72\x07\x8d\xd1\xe2\xfe\x8b\xf8\xfd\xd1\x1f\x00\xe4\x23\xa3\xcc\x1f\xa2\x28\x73\x12\xb5\xfd\xcb\xf7\x33\xfb\x13\xf8\xfd\xf1\x1f\x8c\xf2\xc6\xdb\x91\x64\xa2\x26\x9b\x82\x8c\xb5\xcb\xb3\x61\x47\xe6\x17\x4f\xfe\xcc\xb8\xb5\x22\xf4\x16\x90\x48\x5b\xca\x12\xd2\x5b\x14\x00\xc8\x80\x6a\xaf\x32\xd2\x3a\xbe\x43\x94\xa9\xfc\xce\xd1\x25\x2f\xe7\xd2\x9d\x78\x8b\xb8\xf2\xc7\xd1\x2d\x47\x0f\x01\x09\x99\xa3\x64\x61\x36\xfc\x5a\x82\xb5\xc6\x60\x63\x8f\xe6\x78\x2d\xeb\xb3\xb5\xae\x74\x0e\x38\xa9\x08\x53\x25\xf0\xe4\x18\x70\xb2\x26\xb4\x2b\x48\x42\x44\x99\xb8\x3f\xe3\xc0\x8b\xe7\xf7\x98\x71\x7c\xc1\x0f\x4c\x94\xed\xda\x6b\x7c\x83\xe0\x8d\xac\xe2\x70\x06\x77\xc6\xec\x24\x4d\x16\x97\x02\xcc\x8e\x9e\xc9\x58\x90\x93\x6b\xec\x75\x48\xa8\xaf\xfe\x66\x1f\x48\x1d\xa6\x22\xae\xfe\x5a\x44\x63\xde\xa2\x95\x1b\x99\xc5\xf3\xad\x94\xee\x10\xed\x1c\x5f\xdc\x35\x54\x10\x90\xc0\x9b\x10\x4d\x29\x62\x31\x89\x98\x54\x9d\xa6\xc8\x0f\x7f\xce\xbc\x79\xf8\x85\x87\x18\x67\x41\xee\x10\xd5\x82\x5c\x53\xf1\xb3\xe6\x58\x50\xb2\x40\x30\x30\xa7\xf4\x94\x9f\xa3\xb6\x87\xf4\xf1\x4a\xcf\x59\x2b\x2b\xb5\x67\xf9\x7a\x48\xc8\x62\x18\xc9\x96\xf3\x75\xfd\xb0\x82\x34\x92\xad\x42\xf3\x88\x39\xf4\x1b\x4f\x56\x87\xf7\xbc\x34\xbe\xa7\x02\x5f\x72\xe6\x60\x87\x34\x6b\xf4\x6d\xd0\xcd\x4e\x24\x4b\xb4\xa5\xef\x90\xd6\x58\x48\xdf\x41\x6d\xb1\x09\xb7\x31\x2b\x8c\xb3\xfa\x63\xbd\x46\xb4\xb8\x49\xbd\xc6\xb3\xba\x30\xbd\x46\xb4\xf8\x16\xfd\x68\xd8\x6c\xe0\xf7\x1a\xaf\xcd\x02\xef\x35\x68\x8b\x41\xdc\x8f\x35\x36\xbb\xb3\xd7\x88\x0e\x16\x60\xab\x71\xa6\xbd\x98\xd7\x2d\xd6\x55\x8b\x67\x48\x96\x60\x2a\xb4\xde\xb3\x5c\xa8\x55\x87\x69\x8f\x06\x66\x44\x27\x32\x5d\x51\x18\x83\xec\x7f\x71\x90\x2c\x4c\x07\xd2\xc8\x21\xa6\x6b\x8a\x21\x87\x04\xd7\xa2\x4c\x13\x0f\xf8\x29\x65\x84\x4e\x63\x82\x85\xb1\x69\x8a\x3b\xe9\xbd\x81\x62\x12\x67\x47\x6a\xbd\x1f\xee\x02\x07\xe8\x5d\x24\xeb\xe4\xf8\x3f\x30\xcb\xec\x0f\x71\x03\x85\x96\x37\x88\x4e\xc5\x18\x28\x7b\x5d\x1c\xf3\x1b\x2f\x3f\xb3\x8f\x00\xff\x2f\x49\x13\xf5\x81\x0a\x5f\xba\xb7\x39\x69\x31\x30\x96\x28\x4a\xdb\x68\x5c\x1a\x08\x9a\x23\xa8\x38\x41\x02\xa5\xef\x78\xe2\x2d\x28\x9a\x79\x13\xef\xdf\x3d\x5b\x4e\xca\xab\x34\xbc\xbd\xd4\x30\x15\xf3\x4c\x2e\x05\xea\xa3\xa6\xc4\x6b\xfa\x00\x0c\x2d\x9b\x76\x27\xd3\x54\x8c\x50\xf3\x7c\x8f\xee\xc8\x2d\x72\x9c\x68\xd5\x77\xea\xd6\x2f\x55\x20\xbf\xac\x16\x84\xff\x90\x97\x5f\xf7\x28\x50\x1b\x67\xf7\x5c\x22\x12\x97\x9b\xfc\x3a\x2c\xfd\x05\xb7\x6c\x23\x0b\xfc\xd5\x9c\xc2\xf5\xf4\x45\x09\xf3\x4a\x80\xad\x16\x78\x65\x86\x9c\x24\xf0\xfb\xf2\x23\x4b\xbe\xbb\xaa\xa0\x66\x2e\x65\x74\xcd\xbd\x18\x0d\x6c\x78\xdd\x50\x93\x71\x7e\x87\xe8\x9a\x44\x28\x73\x47\x5e\xf7\x2c\x23\x1c\x8d\x51\xdf\x13\x1a\x36\x74\xbb\x6a\x79\x6b\x2b\xab\x10\x8a\x3a\xf2\x6a\xd8\xbd\xc2\xe8\x22\x2c\x9d\xf5\x81\xa4\x71\x97\x53\x6b\x51\xaa\x41\xa8\x46\x2b\x4a\xd5\xff\xff\xbf\xfe\xc9\x6b\x4a\x7b\x76\x4c\x74\x52\x62\x63\xf6\xab\x4b\xca\xce\x67\x6b\x5a\x5e\x39\x0f\x4f\x90\x95\xdb\x37\xdf\xc9\x5e\x11\x4e\x79\x77\xf5\xdf\x35\x27\xde\x6d\x6d\x05\xca\xab\xea\xbe\x86\xfc\x97\x3b\x58\x05\x47\x8c\x80\x37\xa1\x48\x65\x2b\x4d\x4b\x7a\x74\xdd\xd7\xa3\x7e\x58\x5e\xce\x44\xc5\xc4\xde\x12\x91\x61\x92\x3f\xb6\x65\x6e\xa9\x70\x6b\x0e\x66\xeb\xbc\xba\xf2\x2f\x77\x2b\x73\x6a\x2e\x05\xa2\x5f\xe7\x65\xc8\x9f\xee\xc7\x3a\xda\x51\x38\x2c\x2b\xa9\x34\x71\xdb\xf5\x5a\x64\xfb\xbe\x3e\x2b\x29\x75\xfe\xdb\xf5\x3a\x44\xf8\xa0\xd7\x3a\xe4\x4f\xf7\x63\x1d\x2a\x6c\xd1\x73\x2d\xda\xcf\xf7\x63\x3d\x22\x62\xd2\x77\x39\xc5\xaf\xf7\x63\x35\x17\xaa\x71\x7f\xcf\xf5\xe8\xbf\xdf\x8f\x15\xc9\x58\x51\xcf\xf5\x14\xbf\xee\xba\x9a\x36\xdb\xcf\x54\x4e\x55\xb3\xf2\xaa\x83\xf4\xb9\x52\xa9\xa7\x7c\x6d\xe9\x6e\xca\x8e\x2e\xe7\x00\x08\x3c\x22\x00\x9d\x15\x36\x4e\xdd\x21\x05\x22\xe7\x77\xd7\xa8\x71\x40\xfc\x11\x3e\x08\xf8\xb8\x93\x20\x30\xa6\x76\x6f\x14\x46\xce\x5c\xde\xe2\x8a\x8e\x3a\xf1\x6e\xd1\x7a\x2a\x8a\x70\xb8\xbb\x38\x65\x08\x52\x7f\xe1\x80\x8f\x7a\xc5\x1f\xcc\xab\x5b\x18\xb8\x59\x83\x19\xa6\x2c\xc9\x5c\xd8\x09\x08\xa1\xfa\x17\x5a\x42\x5c\x54\x01\xf3\x5f\x5d\x67\x63\xb7\x95\x01\xf3\x79\x38\x61\x80\xf6\xdb\xfb\x35\x55\xdb\xa7\xdb\x42\x87\x61\xd4\xa6\x72\x00\xe3\x9a\xe1\x30\x41\x14\x05\x1f\x24\xca\x7e\xbf\x48\x5d\x63\x23\x05\x19\xd7\xac\xcd\x61\x2f\xa0\xd7\x4d\xd2\xbd\x31\xf0\xed\x93\x80\xd3\xb8\x0d\x7a\x5c\xaa\x6f\xef\xbd\x48\xe4\x13\x91\xc2\xd6\xbe\x32\x1a\x2a\x99\x3b\xe4\x78\xfb\xf2\xe5\xd1\x53\x3b\xa0\xfa\x64\x4b\xa8\x92\xcd\x59\x1a\x86\x91\x8e\x40\x31\x68\x55\x7d\x42\x44\x6d\x36\x82\xa9\x24\xd4\x21\x24\xd4\xe1\x5a\xcc\x55\x27\x37\x60\x64\x82\x66\xce\xed\x33\x48\xa6\xd3\x05\xa1\x83\xed\x65\x37\x28\x44\xf1\xd3\xa3\x4d\xd1\xd9\xa6\x90\x79\x4a\x5b\x37\x2b\x4c\x60\x97\xe7\xd9\x41\xae\xea\xd8\x42\x04\x03\x3e\x23\x08\xd8\x92\x90\x64\x01\x48\x74\x43\x20\x0d\x70\x34\x07\x31\x25\x12\x56\xd3\x7e\xcf\x5d\xee\xe3\xe5\xda\xb3\x8b\x47\xe9\x04\x61\xec\xbd\xbb\x9c\x28\xe2\x08\xb8\xde\x54\x92\x9c\x0d\x35\x13\xc8\xa6\xba\xa4\x0b\xa3\xa7\x42\xbb\xb6\xbb\xbe\xe1\xf6\x5c\x81\x33\x54\x9a\xc7\xc4\x53\xff\xdb\x68\xce\x89\xca\xe5\x92\xad\x26\x86\x90\x33\x77\xee\x97\x31\xa4\x56\xf9\x94\x2c\x97\x10\x30\x94\x69\xfe\x04\x81\x65\x9a\x1d\xe5\x21\x12\xd3\x02\x30\x08\x28\x62\xcc\x96\xe5\xe1\x78\x3d\xb0\x5d\x59\x58\xb2\x52\x96\x53\xd1\xa4\xda\x51\x16\x32\x52\x41\x8a\x60\x45\x1c\xaa\xf0\x53\x94\xac\x58\x5d\x00\xb2\x97\x97\xf8\x99\xbf\xff\x63\xad\x7a\xfd\x79\x23\xba\xde\x5e\x9d\xb4\x0f\xf3\xa0\xd5\xe6\xbb\x5f\x68\xd4\xae\xd8\xf7\x4a\xe3\xda\xdd\x36\x83\x6e\xde\xa0\xf1\xb1\x99\x1a\x7a\xad\x9a\x7b\x94\x3a\x7a\xbe\x1f\x19\x0e\x10\x77\xab\x76\x5a\x40\xff\xf6\x8f\x67\x41\xf8\xf2\xc3\xb1\xb9\x80\xde\xd8\xaa\xd4\xe6\x19\x8b\x35\x35\x5a\x3e\x6d\x8e\x35\xca\x01\xc6\x3a\x1a\x5c\x79\x0d\xa6\xfc\x9d\x70\x98\x9b\xc4\xc9\x32\x50\x1d\x5d\xcb\xa8\xa2\x06\xe0\x63\x49\xe4\x9e\x2f\xe5\x0c\x3f\xca\xc3\xa1\x2f\xbe\x91\xca\x1b\x96\xe3\xa9\xd1\x74\x90\xb5\xfc\xca\xbf\xcd\xc2\x6b\xc8\x83\xf8\x9c\x63\xc6\x65\xb2\xe0\x92\x10\x91\x2f\xac\x6c\x8a\x59\xed\x3e\x97\x16\x8d\x87\x13\xef\x24\x0c\x8b\x24\x9d\x67\xa5\x3e\x87\x13\x2f\x44\xd1\x3c\x59\xd8\xb3\x75\x1a\xbd\xcb\x6a\x45\xc4\x02\x32\xad\xab\x6e\x63\xc0\xa5\x94\x83\x31\x2f\xc0\x76\x28\x21\xc9\x19\xf1\x4f\x49\x1a\xf1\xb8\xd6\x61\xd7\x6c\x8b\x8d\xc9\x5a\x1a\xa9\x86\x9f\xbf\x16\x12\x36\x58\xe6\xca\xa3\x76\x93\xbd\x1d\x4b\x60\x1f\x39\xfc\xa0\x2f\xb7\x90\xc8\xe3\x49\x85\xf1\x2e\x92\xe8\x16\xed\x68\x6b\xd6\x5d\x95\xdf\x12\x42\x4b\xf3\x05\xa1\x63\x66\xee\xf8\x62\x98\xe4\x33\x19\x49\x02\xf3\x01\x3b\x0b\xdf\x2e\x25\xaf\x9b\xd8\xe5\x59\xed\x65\x25\x58\xd4\x7e\x76\x54\x82\x3d\x53\x49\x9b\xe5\xab\x7e\xc3\xb9\x33\x01\x53\x75\x95\xe3\x48\x97\x18\xed\x13\x16\x2d\x51\x87\xd0\x70\xb8\x9e\x89\xd5\x0f\x14\xae\xad\xb0\x5d\x56\x05\x8f\xc3\x75\x3e\xd8\x27\xcc\xf4\x0b\x7c\x87\x1a\x58\x7e\xc1\x97\xbe\x41\x75\xa2\xeb\x81\x8d\x49\x03\x0c\xc6\x33\x71\x60\xd0\xd5\xb0\x79\x28\x46\x75\x10\xa0\x00\x50\xe4\xa3\x28\x09\xd7\x65\x79\x10\x9f\xf2\x5b\x9e\x21\xf6\xf5\x16\xcc\xda\x38\x18\xd3\x9a\x90\xc3\x7d\x92\xfc\xfe\xc0\xd7\x66\xe7\xf8\x07\xb9\xfe\xe1\x4c\x6f\x89\xde\x14\x9f\xf5\x83\x67\xda\x5a\x40\xa1\xb1\x67\x57\x9f\x90\x42\xdd\xdf\xf4\xdd\x9c\x4d\x53\x87\x2e\xeb\x6f\xc6\xf3\x2c\x07\xb7\xe6\xaa\x6d\x32\xbd\x6b\xb5\x2b\xb0\xf0\xc8\xdb\xac\xe8\xec\xb8\x19\x5f\xb1\xc0\x40\x2e\xe4\xa7\xb1\xe6\xe8\x48\x1c\xc0\x79\xd0\x60\x34\xe7\xf1\xc8\xe2\x3d\x56\x04\xa6\x23\x16\xd6\xf6\x42\xb1\x7a\xc8\x74\xbc\x18\x6c\x9e\xda\xb2\xd3\x18\xec\xf3\xf8\xdb\xf8\xed\xcb\xf3\xcf\x9b\x63\xb0\x22\x04\x9b\x6a\xc9\x3a\x75\xdd\x30\x5a\xb2\x4e\xc3\x7f\x0d\xf9\x3a\xa5\xf0\x17\xa1\x7a\xf4\x4c\x83\x33\x50\xa9\x34\x31\x8e\xae\x12\x71\xac\x60\x76\x89\xa3\x08\x19\x8b\x94\x60\x9a\x2c\x50\x94\x70\x74\xa6\xf6\x42\xa5\xea\xc2\xb5\x6e\x14\x8a\x02\xea\xf2\x03\x52\x4a\x38\x44\x81\x77\xaa\x3a\x60\x34\xe4\x21\xed\x6b\x5d\x6e\xdb\x25\x59\xad\x1c\xb7\x7e\xd0\x98\x99\xd0\xa3\xab\x5f\x03\xc8\x7d\x9e\x4c\xd6\x78\x0e\x7c\x88\x62\x1c\x79\xa5\xda\x57\x9e\x44\x75\x43\xc8\xed\x32\x13\xd6\x21\xf5\x95\x2e\xa2\xb4\x9d\x65\x5e\x96\x17\xf9\xca\xb8\xba\xda\x3b\xdd\xe3\x7e\xa6\x90\xb5\xbe\xe9\xb6\xb9\xd6\x4c\xf0\xcf\xb9\xfe\xd4\x97\x7c\x46\x56\x51\x48\x60\xd0\xcf\x29\x1c\x21\x28\xda\xf2\x22\xd3\xee\x30\x86\xb5\xf4\x32\xaa\x71\x14\xd0\x5b\xb4\xfa\xf4\x95\xcf\x26\x84\x6c\x19\x27\xeb\x33\xe2\x4b\xdc\x25\x6d\x7b\x85\x30\xba\x05\x3e\x8c\xee\x20\x73\xb8\xdb\xd1\xf0\x41\xb6\xbe\x51\xd4\xbb\x4d\xcb\xf8\x92\x43\x2a\x16\xb1\xf1\x7e\xfb\x66\xa4\x89\xbe\x5e\x66\x3b\xda\x34\x4d\xf1\x0d\x98\xe1\xb0\x0d\x61\x65\x7b\xdb\xb7\x6c\x81\x94\x37\x72\xb5\x4c\xb4\xe1\x09\x73\x7d\xab\xbd\xa5\xc5\x90\x84\xe4\x10\x47\xb7\xd7\xc4\x9c\x8c\xe1\xd4\x7f\xa0\x9e\x90\x2c\x20\xd1\x55\xe2\x02\xcf\x60\xca\xcc\xdd\x27\x4c\x6b\xbc\xe7\x9c\x9c\xeb\xc2\x80\xa6\x34\x4f\x94\xed\xd4\x69\x40\xfc\x9d\xa7\x77\x56\x07\xdc\xc7\xac\x4e\xa1\xbe\x4e\x0d\xea\xab\xdb\xc0\x4e\x79\x9c\xfd\x92\x2c\x4f\x82\x40\x69\xdf\x7d\x4a\xb2\x2c\xe4\xac\x7a\xa3\xa1\xc0\x2a\x9b\x3a\x3b\x56\x5f\xd2\x9e\x68\xa9\x12\xec\xca\x89\x96\x79\x39\x47\xb5\xbf\x63\x65\x6a\xe5\x1e\x8f\x48\xd2\x32\xef\x78\x2b\xf2\x2d\xc5\x93\xd5\x9e\x8f\xfa\xc3\x0d\x8d\x1f\xf3\xd4\xcd\xe6\x16\x90\x5a\x7a\x67\x1e\x27\xb5\x75\xd0\x75\xbc\xc7\xf9\x4d\xe6\xf8\xc1\xc8\x17\xed\xb9\x3e\xf5\x24\xbf\x16\xf0\x81\x06\xc5\xb0\xd1\x0c\xbf\xe6\x43\x47\x59\x4e\x8f\xe7\x8e\xe3\xb9\xc3\xed\xcd\x6b\xa3\xbd\xb9\x4f\x07\x8f\x66\x32\xef\xd3\xd9\x53\x12\xb7\xbd\x3b\x7e\xea\xb3\x2b\x9f\x40\x49\x41\x54\xa7\x43\xa8\xf2\xfc\x5e\x9d\x43\xed\x4c\x5f\xe1\x60\x8e\x92\x69\x88\x59\x62\xef\x60\x59\x1d\xb0\xa1\x23\x26\x51\xbd\x6d\xdb\x4a\x37\x93\x9e\xae\xa6\x8b\x1f\x27\x2e\x6b\xc4\x54\x6a\xd7\x35\x4f\x87\x5d\xd7\x5c\xf1\xa7\xaf\xb5\xb4\x2a\x3e\x64\xfb\xfd\x8c\x2b\x47\x8a\xaa\x8f\x84\x8a\xfc\xc1\x36\x8e\x98\xb6\x8c\x58\x67\x15\x25\xeb\xc5\xc4\xbb\xa1\x35\xa4\xdb\xe2\x79\x74\xef\x23\x1a\x57\x6f\x59\xda\x97\xd3\x14\x56\xa8\x51\xbb\x2f\xac\x96\xfd\x72\xcb\x0d\x91\x92\x9f\xfd\xce\x5d\x58\x5a\xca\x30\x1d\xfc\xf8\xa7\x2d\xa3\x74\xb8\xbb\x7a\xb4\x2d\x1f\x6d\x4b\x87\xb3\x7f\x47\xe6\x25\xe6\x61\xaf\x47\xe3\xd2\xb5\x54\x55\x44\x09\xbf\xb4\x44\x09\xc7\xb3\x2d\x1b\xb1\x0d\x04\xcf\x7e\x95\xed\x9e\xdb\x6c\x46\xb5\x0f\x9a\x59\x2f\x7a\x3a\xc9\xe7\x2a\x2f\x0b\x96\xbf\xaa\x1d\xb8\x46\x61\x48\x56\x53\xbe\x7f\x40\xa5\xef\x04\x17\x0f\x61\xd3\x15\xe3\x38\x98\x22\x86\x23\xad\xe9\x17\x7c\x97\x82\x84\x00\x71\x26\x89\x50\x2d\x20\x14\x04\x14\xce\xf9\x15\x85\xf8\xa8\xe3\xeb\xba\x4d\xe2\x49\x40\xfc\x09\xc8\xfe\x7b\x3f\x01\x4f\x96\x41\xf6\x1f\x48\x6f\x03\xb2\x8a\x36\xf7\xde\x21\x46\xa2\xe4\xb2\xbc\x6b\x6f\x35\xed\xc4\xe3\x57\xf2\xe9\x9e\xa0\x1c\x71\x0d\xce\xa9\x8c\x11\xdc\x1d\x29\xe9\xf1\x6c\x1d\x7e\xb6\x0e\x3e\x47\x9c\x50\x10\x44\xce\xc9\xe3\x61\xe2\x70\x98\x88\xeb\x65\x00\x19\xf8\xfa\xfa\xcd\xc5\xb8\xc7\x89\xd7\xb7\xfc\xab\xf1\xde\xad\x0e\x95\x20\xa7\x1f\x86\xb2\x59\x9a\x6a\x25\x2a\x17\x94\xa9\x66\xa9\xaa\x8b\xb4\xbe\x27\x46\x97\x63\x84\x1c\x40\x39\xd1\xfc\xea\xda\x5f\x20\xff\xf6\x86\xdc\x17\x9b\x51\xf3\x15\xf3\xdc\x3f\x21\xad\x57\x9a\x93\x53\xbf\x33\xb6\x25\xbc\xb5\x5f\x27\x0d\x48\x5c\xeb\xc0\x8b\x93\x1a\x13\x56\x38\x0c\xc1\x0d\x02\x62\x85\xa2\x31\x17\x04\x0c\x47\xf3\x10\x65\x6c\x99\x4d\x51\xe4\x87\x84\xa1\x40\x30\x2b\x3b\x3a\x6b\xcc\x69\x45\x2b\x7e\xd4\xae\x9f\x8c\xe7\xa2\x25\xbb\x34\x3b\x2f\xea\xa1\x87\x56\xf5\xae\x67\x46\x0e\x4a\xb5\x94\x4d\xd5\xb3\x5d\x06\x71\x84\x76\x9d\x66\x79\xf8\xfc\xfe\xef\xef\x7f\xbe\x5e\x98\xd3\x2c\x7f\x27\x07\x34\xb4\x88\x7f\x36\x39\x2a\x9f\xeb\x63\x50\xbb\x4a\x9c\x31\x28\x3d\xa7\x38\xd8\x1b\x72\xa3\x93\x17\x7f\x5d\x7f\x15\xc5\x7b\x45\xee\x32\x85\x46\xa5\x39\x4f\x28\xdd\x29\xc5\x3f\x7b\x4d\xbe\xbe\x7a\x77\x15\x0c\xa2\xf8\x66\xc8\x8d\xa2\x64\x34\x62\xe7\x20\x13\x29\x4b\xc8\x72\x9a\x2b\xdf\x5d\x92\xfe\xf5\xab\x5f\x0f\xfe\x7e\xba\x3e\xd9\x33\xd2\x1b\x49\x35\x3a\x23\xe6\x64\x9a\x90\x78\xc7\x1c\xb8\xb8\x3e\x7b\x39\x9f\xfb\xdf\x1a\x39\x60\xc2\x30\xb1\x5d\xa9\xb4\x06\xd9\xbf\x22\xd7\x24\xef\x75\xde\x78\x87\x22\x2d\x8e\x92\xd5\xa6\x1a\x60\x16\x69\x9e\x79\x42\x58\x6e\x7c\x2f\xc8\xea\x0c\x85\x90\xbb\x29\x2f\x9e\x1f\x9a\x73\x33\xbf\x22\x20\xe1\x73\x70\xc8\xd2\x1a\xdb\x54\x68\x96\x82\xb1\x85\x6b\xd7\x87\xd8\xb7\x2f\x7e\x60\xdf\xcf\xa3\xfd\xdc\xd7\x63\x10\x3b\x24\x73\xc2\xdd\x6d\x1c\xcd\x77\x4c\xec\xeb\xeb\xc5\xcd\xd3\xf7\xbf\x9a\x89\xdd\x05\x86\xa8\xb4\xa6\x16\x57\x9f\x67\x67\xb6\xfb\xce\x6d\x91\x43\xbf\x31\x8a\xdb\xe5\x4a\xef\x78\x92\xcf\xa7\x21\xce\xd9\xee\x75\xb6\x54\x47\x64\x62\x37\x7c\xbd\xd9\x28\xd3\x96\x45\x97\xdc\xb4\xec\xd9\x29\x7f\x77\x39\x2f\xf6\x63\x75\x5e\x0d\x6e\xd2\xe0\x75\x67\x32\x31\xd2\xba\xc5\x50\x56\x66\x2f\xe7\x25\x76\x33\xea\x4b\x66\x8b\xc9\xc0\x38\x7e\xc3\x69\xe1\xa1\x28\xe0\x4d\x02\xf9\x8a\x0e\x78\x5f\x77\x9f\xef\xc9\xbf\xf8\x37\x7f\x96\x22\xe1\x43\x7f\x81\x5e\xa5\x4c\x56\x04\xcb\x29\xb1\x64\xcd\xc3\x75\x4b\x78\x2f\xba\x1d\x7e\x01\x8e\x0f\x0f\xe3\xfb\x3f\x81\xec\x93\x05\xca\xfc\xdf\x2f\xc0\x11\xff\xc8\x73\x92\xa6\xae\x15\x28\x96\x88\x87\xc3\xdd\x7f\x53\x78\x51\x8a\x8d\x54\x4f\x31\x9c\xa3\x42\x3d\x29\xd1\xc9\xab\x73\x65\x8e\x85\xf8\xd3\x2a\x3c\x86\x61\x79\xa7\xf3\xa2\x50\x4e\xf6\x3d\x97\x48\x08\xfc\x2f\xf3\x88\x6d\xf7\x87\x5d\x4b\x99\x47\x3d\x1f\x74\xdd\x67\x3e\x1f\xfe\x47\xa7\xf3\x61\x09\x33\xb9\x9b\x46\xf0\x0e\xcf\xe1\x1e\x58\xda\x87\x27\xc1\xe5\xf3\x5f\x7f\x3e\x37\x9f\xc8\x31\xce\xac\x33\x5e\x60\xd6\xe1\xbc\x88\xe0\x5d\x66\x6a\x74\x0c\xa1\x17\x8e\xb6\x11\x3b\x3d\x0a\x11\x57\xf1\x32\xa2\x8c\x03\xf4\xb6\xa0\xa1\x53\xb0\xb6\xe5\xfd\xb6\x14\xa4\x10\x47\xb7\xd3\x84\xd4\x4b\x87\x28\x49\x13\xb9\x73\xda\xe0\x15\x5e\xf3\x22\x11\x85\x4f\xc7\xb4\x64\x2d\x91\x70\x94\xc7\x88\xd5\x27\xc5\x13\x22\x94\xc4\xab\x16\x9c\xe3\xb4\xa3\x14\x74\x7f\x45\xcb\xcd\xed\x5a\xaf\x55\x5d\xcd\xf0\xa3\xc3\xc3\x06\x3b\x5c\x75\x07\x6f\xb3\xc3\xad\x97\x73\x5d\x9b\x78\x56\x0e\x91\x00\x27\x79\x1f\x97\x2a\x65\x2e\x29\x09\x52\x3f\x51\x90\xbe\x31\xc5\x0c\x9d\xe7\x3f\x68\xad\xae\x35\x16\x56\xde\x61\xb4\x3a\x83\x6c\xc1\x01\x9e\xad\xb5\x71\xa3\x0a\xa2\xf0\xb2\x3a\x49\xa2\x74\xcc\xba\xf7\xbc\x1d\x45\x1c\x2f\x30\x4b\x5e\xa5\x61\x88\x12\x67\xa1\x1c\x53\x34\x4f\x14\xbd\x3a\xca\x66\x0f\x09\x1d\x9d\xcf\x77\x38\x59\x77\x65\xb4\xf8\xcd\x6e\x58\x7d\x99\x86\x0c\xed\x8c\xcb\x6a\xe5\x1b\x64\xb3\x2b\x34\x5c\x59\x4b\x9c\x44\x30\x5c\x27\xd8\xb7\xe3\x9a\x8c\x2b\x3d\xc5\x2b\x3b\x88\x8f\x36\xcf\x9d\xc8\xcf\x2b\x48\x4f\x17\x90\xee\x46\x51\xbc\x47\xd2\x9e\xdb\x89\x04\x6d\x4f\xb1\xb0\x52\x13\x21\x17\xb9\x50\xbf\xd8\xb6\x21\xa3\xda\x1d\x6d\xd7\x94\xc9\x17\xbb\x21\x53\xc6\x76\x1d\xee\x7c\x23\x6e\xb3\x7b\x8d\x7a\x08\xb3\x13\xd1\xab\xc9\x56\xc3\x5f\x36\xd7\x0b\xdb\x4a\x54\x30\xf4\x2a\x13\x6f\xc2\x58\x52\x62\x27\xcb\x23\xa6\x71\x08\xf9\xfc\x9b\xfb\xc8\xe3\x30\xe4\xa1\xac\x76\x95\x30\xa6\x0c\x9e\x44\x11\x49\x23\xbf\x7e\xaa\xd9\x92\xfe\x5a\x84\xb1\x89\x88\x6f\x30\x63\x38\x9a\x03\x7e\x8c\x73\x1f\x09\xdc\xa2\x5e\x47\x5a\x27\xb3\xa5\x91\xed\x3e\x89\x66\x78\x9e\xd2\xbe\xb8\x21\xa3\xf1\xfe\x54\x9f\xc8\x27\xcf\x7e\xde\xd7\x83\x21\x7a\x87\x28\xd0\x6a\xd6\x37\x26\x04\xdd\x8d\x1a\x47\x4c\x99\x5a\x3e\xd9\x25\x8e\x7a\xa2\x4d\xd8\xf5\xa0\xa7\xa7\x15\xf2\x7e\x4a\x31\x8e\xd8\xd4\x2d\xb1\x78\x6c\x1b\x46\x82\xdc\x5c\x91\xd0\xe0\x86\xd7\x32\xd9\x36\x08\x73\x42\xd2\x04\x48\x78\x93\x8e\x30\x27\x1d\x18\xe0\x82\xb7\xb4\x80\x8c\x07\x08\x7a\xb0\xdf\x30\x93\x10\x37\x36\xf0\x03\xb5\x94\x49\x15\x98\x68\xcb\x21\x64\x23\xcc\xaf\x98\x22\xb4\x23\x8e\x64\x9f\x2d\x28\x9a\x79\x13\xef\xdf\xd5\xdf\x01\x4c\xe0\x14\xcb\x4e\x72\xc7\x39\x0e\xa0\xf8\x52\x7c\xfe\x52\x40\x57\x4d\xab\xcf\x58\xae\x5f\x7f\x4e\x97\xf1\x35\xb9\xc4\x91\x57\xe4\x54\x7f\xac\xa6\x59\x7b\x12\x8b\xaa\x53\xae\xb5\xab\xd2\xd0\x10\x99\x76\xc0\xfe\xd3\x22\x0b\xd7\xce\xff\x60\x9c\x39\x8e\x27\x02\x47\x0e\x22\x70\xd4\x43\x04\x8e\xea\x22\x70\xd4\x4d\x04\x6c\x09\xa9\xc3\x0b\xe9\x3a\xd5\xd1\xf5\xc2\x03\x6a\xd2\x64\xfc\xdc\x98\x53\x78\x07\x13\xd9\xbd\xc5\x10\xd8\xee\xac\x1f\x4b\xa3\x96\xce\xa9\x98\x92\x19\x0e\x51\xb7\x53\xea\xa8\x06\x15\x98\xbd\x20\x13\xac\x08\x27\x18\x86\xac\x5e\xce\x69\xd4\xc7\xdf\x2f\x60\xc2\xde\xa2\xd5\x90\x82\xdc\xc6\x32\xe3\x6c\xec\x69\x84\x56\xd3\x80\x24\xf5\x5b\x37\x77\x80\x7d\xdd\x7b\xf9\x2a\x24\x37\x30\x6c\xf7\x61\xb4\x9f\x17\x86\xac\x80\x32\x3e\xb9\x83\x38\x84\x37\x1d\x90\xf9\x3b\xb2\x9a\xbf\x65\x0a\xd5\x6b\xba\x2e\xdf\x4a\x96\x4f\xcf\x4e\x68\x21\xb4\x53\xd8\x43\xe8\xd3\x7c\x2f\x35\x84\x28\x2e\x8b\x6f\xbb\x82\xe1\x75\x70\xa0\x5d\x0f\xb0\x26\x0a\x05\xf8\x0e\x6b\xa7\x57\x8b\x83\xd1\x9f\x56\x22\x0f\x0e\xff\x8a\x9e\xcc\x51\x84\xa8\x40\x35\x33\x06\x42\x5c\x5d\x0f\xf3\x6d\xdf\xb0\xf0\xc1\xa0\x55\x82\x1b\x12\x06\x80\xf2\x60\x56\xb1\xdc\x9b\x22\x82\x60\x98\x82\x80\xfb\x06\x5a\x98\xa1\x6b\xa5\x46\x7f\x7f\x6a\x3f\xd4\x5b\x7f\x4a\x8b\x42\xcf\x12\xb1\x63\x79\xe3\x66\x25\x36\xd4\xa6\xbc\x01\x72\x0f\xd2\xe6\x7d\xb6\xa3\xd5\xf6\xab\x62\x89\x94\x4f\xe1\x49\x4d\x70\xa5\xa9\xa8\xbc\xc7\xaa\xc5\xd8\x18\x2c\x91\xe3\x29\x4d\x9b\xbd\xe3\xa7\xff\x93\x01\xfe\x71\xe7\x75\x68\x84\x91\x2f\x5f\x24\x49\xcc\xbe\x38\x38\x08\x88\xcf\x9e\xa8\xec\x89\x27\x3e\x59\x7a\x79\x9d\x1e\x9d\xa3\xc4\x9b\x78\xff\xeb\x26\x84\xd1\xad\x67\x30\xd4\xb5\x83\xe0\x6b\x14\xc6\x46\xf3\x5c\x87\xfe\x8a\x32\x19\xb9\x20\x73\x92\x26\x0f\x5f\xff\xc2\x34\x59\x3c\x09\xd5\x62\x4c\xcb\xc8\x57\xda\x7b\x4f\x6c\xcf\x04\xef\x3e\x76\xaf\xab\x2f\x15\xe8\x29\xc8\x87\xdd\x2f\xb4\x75\xc3\xd9\x54\xc9\x74\xa1\x46\xeb\x0f\x0a\x69\x8d\xeb\xb7\x93\xd8\x96\x4d\x35\x76\x72\x54\x2d\x99\x69\x8c\x0c\x5a\x39\xe8\x7e\x60\xc9\xdf\xff\x31\xfc\x79\xb6\x3a\x4d\xba\x26\x2c\xdb\x92\xf5\xe4\xc2\xc6\x49\x8f\xd2\xc4\xb2\x5c\xe8\xb3\x85\x0a\x37\x23\xc3\xc6\x10\x01\x2d\x9d\x70\xa7\xdc\xff\xfe\xf5\x72\xf6\xd9\x15\xfb\xca\x2d\x83\x5a\xd6\x5f\xca\xc4\x47\xc9\xc2\x0d\xd0\x3b\xa7\xce\x68\xa4\xde\x8f\x7c\xf5\x17\xbf\xd0\x67\x4f\x7d\xb6\xec\x44\x6d\x95\xba\x6a\xd0\xb7\xa3\xd2\xdb\x9a\x02\xea\x48\x72\xd9\xc1\xff\x80\x2d\x20\x45\xd3\x99\x84\x9c\xdb\x29\xcd\x17\xdf\xe3\x93\xe0\x97\xb7\x97\x83\x6b\x04\xe4\xda\x70\x34\xb7\xc4\xbb\x5a\x54\x1c\x4b\x32\x4a\x1f\x35\x29\xb8\x21\x18\x84\x5e\x4b\x3f\x79\xf1\xe6\xe9\x0c\x53\x96\x54\xa0\x07\xbf\xcc\x3e\x03\x51\x33\xee\xa0\xba\xf2\x11\x50\x83\x35\x68\x0a\xd3\xd0\xd9\xb7\x0a\x7f\xb0\x6a\xd5\x96\xb0\xfd\xf4\x3f\xa6\x61\x0e\x2d\x21\xe1\x6e\xf4\xbc\xef\xd6\x5c\xf4\xed\x51\x31\x84\x35\x22\x5e\xc0\x31\x68\xa8\x0f\xbc\x43\x12\xb6\x26\xa4\x3f\xad\xf6\xd6\x4a\x5c\x4a\xed\xf9\x52\xab\xf5\xf6\x12\xed\x5c\x90\x3c\x1b\x5b\xd1\x22\xd2\xb0\x27\xfb\xd4\xde\xab\x5b\x69\x4a\xc9\xea\x3d\x7f\x99\x31\xdd\x55\x19\xb6\x6f\x39\x9d\x5c\x12\xf8\x3b\x6c\xf5\xe3\x9d\x6d\xf5\xe3\x69\x0c\x19\x5b\x11\x1a\xe8\x57\x3c\x0b\x42\x18\x02\x97\xda\x37\x3d\x45\xb5\x3c\xfc\x48\xa2\x5a\x9d\x71\xf3\xdc\xd8\x12\x86\x66\x9c\x4d\xfe\x86\x02\x2a\x72\x99\x4a\x50\x12\x05\x9c\x8e\x92\x15\x42\x11\xf8\x0c\xc0\x28\x00\xcf\x0f\x81\xbf\x80\x14\xfa\xdc\xd5\x30\xe7\x17\xed\x4c\xcd\x14\x24\x9e\xf2\xe4\x12\xba\x2c\x5f\xd6\x65\x9f\x8c\xcb\x4a\xfd\x3d\x0f\x87\xa5\xef\xd1\x34\x7b\x19\x58\x93\x94\x02\x7f\x41\x18\x8a\x40\x6c\x21\xcb\x1e\x2b\xbd\xe3\x6d\x2b\xbd\x2b\x3c\x8f\x5e\x47\xa3\xab\xbd\xa7\x16\xb5\x17\x9b\xef\xc1\x20\xd6\x0b\xbc\x2e\x43\x04\x19\x02\xd9\xa7\x4f\x9e\x3c\xa9\x71\x6c\x2b\x21\x00\x93\x31\x3b\xc8\x3a\x16\xa9\xa1\xf2\x7f\xa6\x14\xb1\x34\xcc\x98\xb1\x53\xf3\xf8\xf3\xf4\xfd\xed\x0b\x0c\xff\x66\x76\xff\xc5\x1c\x3d\x75\xa3\xc6\x0d\x5e\x77\x8b\xf9\x0e\xa3\xd5\x34\xcf\xa0\x2d\xc9\x83\x21\x70\x19\x74\xe8\x45\xd5\x22\x84\x5c\x4d\x50\x21\xfd\xa6\x4a\xab\x9d\x34\xbe\xeb\xd1\xf1\xc5\xda\xe8\x25\xc7\x13\x6a\x03\x61\xca\x1f\x1d\xb5\x71\x94\x84\x15\x57\xb8\x6f\xf6\x5b\xd3\xca\x65\x69\x46\xcb\x24\x21\xcb\x29\x8a\x82\x4e\x81\xc9\xa1\x28\x0c\xa7\x94\x30\x71\x47\x07\x38\x3c\x97\x68\x98\xdb\x70\x3d\xa0\x32\x7e\x32\x1a\x58\x0a\xac\x3b\x44\xcd\x9d\xf3\x24\x5c\x4f\xa4\x23\x53\x8b\xdb\xce\xd3\xaa\xa0\x8d\xba\xd5\x10\x34\x23\x9d\xa7\x78\x2a\x02\xd0\x12\x37\x1d\x54\x3f\x98\x2e\x08\xc5\xbf\xba\xbd\xaa\x9c\xcb\xd4\x0d\xd2\x9c\xdf\x1b\x12\x9a\xbc\x5a\xe7\x5d\x56\x7b\xa0\x9a\x27\x7c\xfb\x14\x03\x74\x42\x1c\x77\x2f\x69\x76\x81\xfd\x77\xbb\x56\x18\x9f\x76\x3e\x45\xb0\x2f\x28\xbc\x22\x9f\x36\xc6\x86\x28\x78\x2a\xde\x00\x82\xe6\xd6\x14\x3b\xa7\xa4\xb8\x7d\x1e\x46\x49\x6d\x8c\x0d\x51\x92\xc7\x32\xf2\xd7\x8c\x4a\x49\x87\xa7\x1a\xfc\xb0\x47\xfd\xb8\x51\xc9\x84\x1c\xbe\xa0\xbf\x54\xca\xdf\x6f\x48\x22\x4f\x98\x8f\x22\x85\xce\xb2\x8f\x1b\x5b\xc2\x3f\xf4\xa7\x9f\x1a\x60\x43\x04\x3c\x43\x1b\xa2\xe0\x76\x37\x74\xcd\x05\xb7\x67\x7f\x36\x3a\xe5\xca\xc8\xcf\xfd\xf2\x3a\xe8\x67\x83\x83\xad\xac\xeb\x1f\x44\x1a\x8f\xdd\xbb\x6e\xc7\xfc\xbc\x92\x02\x54\x64\x9c\xb7\xa2\x7f\x36\xd0\xb5\x47\xfe\xb9\x43\x32\x83\x25\x28\xd6\x0b\xb5\xa4\xad\x2c\xa7\x45\xaa\x85\x43\x3a\x65\xe9\x72\x09\x69\x8e\xca\x2c\x6f\xca\xc4\x97\x97\x0b\x0a\x99\x7e\x61\x56\x8b\x1c\x34\xab\x66\xcd\x07\x6d\xc3\x72\x2f\xbb\xab\x3f\xfe\xe8\xf1\xea\x33\x95\x64\xee\x02\xd3\xd1\x90\x9c\x6f\x46\xd3\xf6\x5a\x32\x67\x7e\x49\x11\x5d\xe7\x49\x20\x1c\x05\x18\x85\x7c\x19\xfc\x37\x52\x73\x2d\x20\x5b\x68\xbf\x4d\x29\x45\x51\x72\x09\xe7\xe8\x35\x0f\x07\x92\x94\xfa\xb2\x42\x56\x26\xcc\x27\x68\xf9\xba\xd4\x74\x3d\x73\xe6\xff\xca\xdf\x25\x62\x46\xf9\x74\x9f\x48\xbc\x71\x21\xeb\x34\xf3\x3d\x8b\x71\xb8\x84\xa8\x81\xb4\x8f\xae\xc2\x74\xae\x7f\xa8\x06\x2b\x3f\xaa\x3e\x95\x4f\xe7\x3b\xc4\xbd\xc2\xb6\x51\x49\x2a\x58\xa0\xb6\xa4\xf5\xa3\xda\x64\xda\x72\xc7\x3f\x9f\x78\xf3\x44\x23\xc1\x1d\xa2\x0c\x93\x88\x13\x3a\x44\xd1\x3c\xe1\x65\xb3\x87\x8e\x9d\x63\xcd\xcb\x62\x31\x8c\xcc\x91\x17\xf1\x32\x6d\x65\xff\xfa\xe7\xbf\xfe\x59\x5e\x48\x31\x21\xc7\x5a\x86\x7e\x9d\x03\x1c\x42\x86\x99\x24\x78\xb5\x2a\x0b\xf9\x71\xc3\x3e\xee\x32\x7e\x84\xe3\x18\x25\xf5\x37\x18\x9a\x3a\x35\xf7\x6b\x3a\xd2\x5a\x73\x8d\x5b\x96\xa7\xb7\x6f\x96\xdc\x32\x77\xd8\xeb\xce\x12\x79\x06\x4a\xa0\xe6\xbc\x19\x49\x02\xe7\x4c\x8b\x7b\xc9\x8f\xaf\xb3\x4f\xb5\xcd\xcf\x9f\x32\x45\x86\xfb\x15\x6c\x5b\x8a\x63\xcc\x99\x5d\x1b\xca\xe9\x31\x46\x61\x47\x8c\xeb\xde\x61\xb4\xda\x75\xce\xc3\xcb\xc3\xf3\xe7\x8b\x3f\xbe\x1d\x9c\xf3\x60\x89\xe0\x2a\xa9\xee\xd7\xa3\xf1\xaa\x84\xab\x60\xba\xef\xc1\x51\x88\xcd\x2d\x78\xc6\xb8\x7c\xcb\x37\x86\x9f\xb2\x69\xa5\x85\x62\xa5\x7b\xa2\x1a\x57\xef\xa2\x28\xda\x25\x16\x37\x35\xb7\x68\xbd\x22\x34\x10\xa1\xc5\x72\xeb\x42\x3a\x7d\x0a\xa4\x64\xf0\x86\x09\xf9\xb3\x13\xa0\x36\x98\x03\x7e\xe1\xe8\x2b\xdf\x21\x16\x7e\x01\x1a\xe1\x2e\x20\xae\x44\xaa\x5f\x0c\x95\x2f\x19\x78\x75\x45\x05\x2a\xc3\xa9\x5f\x7b\xc3\xdd\x8d\x22\x5c\xfe\x81\x26\x0a\xea\x9d\xea\xbb\xdc\x8a\xd2\xa4\xc5\x51\xb9\x5a\x67\xd8\xff\xde\xb2\xf1\x36\x8e\xcb\xc1\x94\xa2\x60\xfa\x22\xfb\x6d\x2e\x4c\x3f\x90\x94\x4a\x69\x06\xdc\xe2\x04\x98\x81\x84\x10\xc0\x16\xa2\x73\x41\x7b\x83\x8b\xcd\xaa\xf3\x4c\x61\x0d\xd4\xe5\x5c\x1c\x0f\x20\xa6\x09\xbc\x09\xd1\x41\xa6\x0d\xa6\x28\xc0\x09\xd9\x75\x26\xdb\xf5\x3d\xfb\x7e\xf9\x22\xfa\xd9\x3d\x7b\xb0\x80\xaf\x2c\x83\xf6\x46\x25\x54\x4c\x19\x7b\x28\x30\x69\xbd\x13\xb9\x78\x6f\xe2\x5d\x42\x9a\x00\x16\x53\x04\x03\xb6\x40\x28\x99\x80\x38\xfb\x24\x80\x09\xbc\x81\x0c\x4d\x78\x1a\x05\x8a\x12\x4c\x51\xb8\x06\xb3\x10\xdd\xe3\x9b\x10\x81\xdf\xab\xca\x07\x45\xc7\x27\x3e\x59\xfe\xc1\x72\x33\xf3\x3a\x4a\xd0\x9c\x42\x05\x3f\x66\xda\xf0\x6a\x3b\x2b\x16\x65\xef\xcf\x39\x53\x35\x66\x3c\x65\xf5\xf0\x1c\x04\x7e\x7f\x87\xd9\x19\xa6\xc9\x5a\xa8\x33\xd1\x79\x84\xb7\x0c\xf4\x15\x2a\x42\xd9\xb1\x2b\xf6\xab\x1c\x28\xff\x9b\x8f\x67\x53\x5f\xea\x4d\x0a\x14\xc8\xa2\xe7\x54\x0b\x94\xf6\x27\xf3\x79\xda\xbd\x9f\x41\x67\x84\x67\xcf\x4b\x51\xcc\x9c\xa2\xe5\x0d\x0a\xa6\x3e\x09\xf4\x03\x5a\x49\x0d\xe0\xdf\x02\xf5\xad\xe9\x10\x93\xc2\x99\x1d\xa1\x90\x22\x0d\xe2\x57\x1d\xba\x94\xac\x78\xfd\x4b\xd0\x70\x00\x57\xda\x17\xab\x3f\x29\x45\x1c\xb8\x90\xff\x05\x63\x9c\xc0\x30\x53\x82\x99\x8f\x81\xc2\x90\x77\x2d\xd2\x18\x0d\x39\x80\xf0\xc4\x7b\xda\xb0\xb4\xc6\x2e\xc4\xaa\xef\xb1\x7c\x8a\xcc\x66\x95\xff\x72\xd1\xb5\x1e\xed\x43\x12\x5e\x2e\x21\x4b\x10\x48\x16\x08\x18\x48\x0e\x34\x77\xc7\x7a\x34\x5a\x82\x42\x23\x28\xe5\x66\x2d\xba\x01\xf5\x4c\x51\x14\x20\xba\xf3\x54\xe3\xbf\x2f\xef\xae\xc8\xd5\xe5\xcb\xc1\x66\x77\x44\xa2\x69\x4c\x71\x24\x94\xb0\xc9\xf0\x3e\xd2\x55\xd1\xc4\x13\x2d\xca\x6a\x29\xf9\x9b\x38\x6d\x6d\xf4\x1f\x85\xb5\x9a\x5a\x57\x4e\xc0\x6e\xd9\x7a\x74\xf7\xfe\xf5\xdf\x82\xaf\xbf\x1e\x5a\x21\x73\xa4\x03\x53\xc8\xd5\xaa\x85\x4a\xe0\xee\x58\x84\xe2\x0c\x3d\xb3\x5b\xd4\xfa\x9c\xe2\xa0\x48\x4b\x9f\x7e\xde\x2b\xf1\x54\x0c\x82\xc2\x70\x7a\x04\x8a\x7f\x73\xa8\xf0\xe9\x51\xc9\x0e\xec\x00\xbe\x56\x5e\x68\x73\xac\xcd\xe4\x4e\xda\x70\x72\x38\x2f\xde\x90\x60\xe4\x60\x8c\x7b\xaf\x7f\x07\x4f\x92\x1f\x5f\xb6\x2e\xfc\x1f\xe5\x16\x9e\xe2\x60\xfa\x1f\xff\x21\xb8\xff\x8f\x7f\x78\xda\xe6\xbe\x96\x48\xe5\xf6\x56\xfb\x0b\xc8\x9c\x5a\xec\x57\x72\x35\x2d\x2d\xf7\xab\x4f\xd6\x5a\xf0\x77\xbf\xa0\xd8\x1a\x2f\xea\x66\x45\x89\x11\xd2\xb6\x68\xf2\xeb\x39\x3f\x64\x68\xb0\x81\x29\xde\x44\x8f\x1d\x7a\xc7\x46\x86\x9c\x21\xe6\x6f\x93\x21\x4a\x42\x32\x63\x9e\xe2\x38\x87\x6b\x1e\x7a\x8b\xe4\xd4\x3a\x71\xcb\x1b\x4b\x86\x68\x4a\x6c\x75\x89\xd3\xe4\xfa\xd5\xb4\xc3\xf6\x60\x53\x95\x76\xf9\x38\xcc\xab\xc7\x86\x1b\x76\x65\x93\xad\xde\x31\x08\x55\x1c\x1c\xc7\xda\x21\xd2\x9c\x8c\xa9\xab\xf4\x94\xad\x9d\xb5\xb9\x67\x68\x9c\x71\x28\x1b\x67\x78\x07\x90\x31\x94\xb0\x03\xbc\x9c\x1f\x64\xa3\x4e\xe7\x14\xae\x9f\xcc\xf1\xcc\xab\xcc\x96\x7f\x89\xa3\x00\xfb\x50\x3b\x9d\xdc\xd1\x20\xc7\xca\x24\xe5\x21\xb3\xf2\x7f\xcc\x09\x9b\x1a\xb9\x64\x9b\xb4\x0b\x1c\xdd\x22\xfa\x4a\x02\x23\x75\xeb\x3c\x5b\x0a\x06\x76\x4a\x4d\x6d\x89\x09\xe6\x70\xe6\xd1\xad\x63\x92\xea\xeb\x88\x21\x9a\x80\x8b\xe2\xb2\xb2\x21\x30\xb8\x20\xab\xec\xa1\x37\xb2\xdd\x71\xc3\x61\xe4\x0e\x9c\x14\x53\x74\x87\xd1\x6a\x3f\x09\x78\x29\x26\xe7\x48\x43\xf9\x34\xf0\x17\x30\x9a\x23\x66\xa5\x63\x3e\x72\x1f\x0a\x1a\xf6\xe2\xa6\x29\x71\xad\x3a\xa3\xb5\xc7\x9f\xbd\x2b\x78\x87\x9c\x88\x50\x8d\xa9\x74\x6a\x24\xbb\x81\x45\xe6\xf9\xc9\xcd\xab\x7c\x2f\xb3\x07\x45\xe0\x08\xf0\x4e\x0e\xbc\xb0\xd9\x35\xc6\xd4\x93\xd3\x2d\xf1\x84\x31\x1c\x81\x96\x01\x7c\x18\xdd\x41\x66\xbb\xda\xa8\xe0\x03\xb8\x5d\x10\xb4\xb6\x60\xcf\xfd\xb6\x0a\xb6\x29\xf3\x21\x0d\x44\x2f\xf6\x69\xc5\x3a\xac\x80\x99\x3e\xb6\x69\x6f\x6c\xd3\x7e\x26\xc8\x08\x4e\xe5\x6e\x1d\xb5\x4f\xbb\xc1\x5e\xa8\x35\xf7\xfe\x81\xa4\x60\x91\xe9\x8b\x25\x0c\x72\xa5\x01\x12\xc2\xe3\x6b\x52\x66\xc1\x94\x77\xfe\xc6\x51\x8a\xd4\x86\x03\x84\x02\x29\x02\xea\x47\x7f\xe9\x60\x58\xb9\xae\x69\x8f\xda\x78\x73\x7c\x50\x9d\x04\x5e\x87\xae\xdd\x9b\xb9\x71\x94\xba\x50\x4c\xef\xac\xcc\x0d\xab\x46\x94\xcf\x6e\xa3\xd5\xb6\xfc\x40\x12\x41\xed\x41\xd5\xe3\x76\x1a\x72\xeb\xcd\xe9\xfe\x82\x2d\xc8\x4a\x58\x3d\xd9\x12\x84\xbd\x24\x0c\xac\x3e\x57\x17\x3c\x9d\xab\x6c\x4b\x59\xaf\x1f\x4a\xef\xb3\x1d\x24\xa3\xc5\x18\xeb\x81\xc0\xb1\xe3\x8b\xbb\xee\x4c\x16\x1d\x91\x77\xd1\x0f\x83\x03\x8b\xcd\x71\xc0\xcf\xa6\xcf\xba\x1e\x20\x3d\x82\x80\x63\x44\x00\x47\x88\x1e\x8c\x1f\x34\x10\xb1\x20\x79\x4b\x5a\x3a\xe0\x93\x07\x18\x34\x68\xcb\x8d\xc8\x36\x6e\x1e\xd5\x6a\xf6\x82\x40\xe5\xff\x7a\x72\xae\x3a\x8c\x1a\x6a\xf4\x18\xde\x27\x12\xb8\x33\xd1\xca\x39\x35\xd0\xfc\xa3\xfa\x27\x7b\x12\xde\xd9\x7d\x6c\xc7\x94\x02\xb4\x91\x94\x29\xcd\xc0\x92\x8f\x71\x67\x4d\xe4\x4a\xd9\x4f\xe4\x36\xb7\xae\xbc\x80\xe3\xf2\x02\xa6\x73\x2e\x80\x2d\xcd\x4f\xb7\x94\x25\x26\xd6\xe7\xb2\x66\x07\x87\xbd\x87\x87\xe7\x7e\x58\xf5\x76\x51\x4d\xfe\xe9\x66\x7c\xd1\x86\xa4\xca\x47\xbf\xf3\x21\xf8\x9d\x8f\x8e\xe6\xa3\xa3\xd9\xd1\xd1\xdc\x90\xcb\x35\x9e\xaf\xb5\x27\xd9\x39\x97\xaf\x6f\x4f\x0e\x9f\xbf\xbd\xee\x97\x9d\x53\x4a\xde\x10\xf8\x94\x30\x81\xe6\xb8\x5f\x55\xf5\xae\xd6\x0c\xaf\xd6\x66\x95\x7a\xa4\x74\xb9\xa4\x9d\xaa\x1d\x2a\x94\xbb\xa2\x65\xe5\x55\x52\x29\x5e\x67\x4e\x4d\x26\x03\x95\x4c\xa8\xe2\x10\x50\x4e\x7f\x7e\xdf\x21\x42\x00\x26\xef\x7d\x73\xf9\x42\x25\x41\x18\x45\xb4\x7c\x12\xec\x53\x72\xee\xdf\xbf\xf9\xfa\xed\xcb\x5b\xfc\xce\x4d\xba\xcc\x59\xac\x79\xba\x93\x43\x30\x48\xdc\x29\x8c\x9e\xd2\x9a\xe9\x5e\x1f\x33\xc4\x9d\x49\x90\x2c\x60\x22\xdd\x92\x1b\xc4\xca\xe9\x85\x0f\x32\xfb\x55\x59\x77\xd9\x4a\xfa\x5f\x44\xb0\x75\x94\xc0\xfb\xa9\xa8\xf4\xb6\x46\x34\x4a\x27\x92\x78\xbe\x06\x0c\x26\x6c\x9b\x62\xdd\xb2\xd8\xfc\xbb\x4c\x1e\x2f\x61\xb2\xc8\x3f\xe1\xf6\xb1\xfc\x44\x8c\x55\x62\xb2\x98\x55\xa9\x5a\x93\x7f\xf2\x2e\xce\x7b\x3a\xdb\xae\x55\xf9\xb3\xc2\x1a\x2a\x1c\xd3\xa5\x48\x70\x55\x49\x47\xe2\x78\x0c\x90\x78\xb8\x09\x35\xcc\x9e\x37\xc0\x92\x75\xb6\xdf\x6a\x19\x5e\x39\xdd\x9e\x9c\x92\x00\xbd\xc1\x99\x03\x0e\xfe\xa3\x72\xca\x2f\x50\x76\x7a\x7f\x01\x60\x9a\x10\xf0\x6f\x78\x99\x6d\x77\x18\x25\x7f\xaa\x3c\x36\x23\x51\x32\x65\xf8\x57\xf4\x05\x38\x7a\x11\xdf\x97\xbe\xfe\x47\xeb\x24\x4b\x31\xa4\xe6\x14\x65\x2d\x37\xb9\xa4\x5b\x5f\xc9\x5c\x4c\x09\xc7\xcf\x85\x4c\x70\xc5\xd3\x5c\x7f\x17\xcf\x65\x1b\x19\xba\x55\x35\x3a\xb2\x6e\xde\x93\xb3\x1f\x3f\x3b\x5f\xa4\x87\x5f\x3f\x77\x3e\xfb\x9b\xa4\xb4\x24\x9c\xa0\x49\x1c\xc1\x12\xd2\x39\x8e\xa6\x02\xe5\xea\x0b\x70\x7c\x18\xdf\xff\x09\xfc\xc3\x70\xc6\xf2\x2d\x51\xc8\x58\xb3\xb5\x61\x32\x34\x26\x9e\x4c\xc1\xff\x28\x7f\x23\x45\x93\x3b\xfb\xd9\x37\xb9\x28\x6a\x81\x8f\x71\xcf\xf5\x3a\xa7\x47\x11\xa0\x59\x48\x56\xfe\x02\xd2\x64\x8f\x4e\xf8\x5f\xce\xc3\x83\xf3\xf3\xb7\x7f\xdf\x7c\xf9\xcd\x19\x85\xab\x27\x98\x78\x13\xef\x4b\x42\xc1\x12\xde\x66\x6e\x60\x4e\x12\x36\x01\x31\x25\x3e\x62\x0c\x04\x18\xce\x29\x5c\xb2\x09\x20\x74\x0e\xd4\xb7\x1f\xde\x5c\x4c\xc0\xf9\x7b\xed\xdb\x08\x25\x2b\x42\x6f\xf3\x4f\x78\xd1\xce\x32\xf5\x17\x60\x49\xa8\x5e\xac\x73\x43\xd2\xe4\x49\x20\x5e\xbf\xe3\x6a\x1d\x1e\x2d\xdc\x48\xd1\x4e\xf6\xd7\x0a\x0a\xcf\xf2\x81\x56\xf1\x28\x3b\x26\x17\x8a\xa9\x64\xad\xc5\x9a\xc1\x33\xca\x8f\xf1\x9a\x8e\x39\x9e\x94\x4e\x29\x2d\xd4\xaa\xe4\x62\xb5\x5a\x29\xa9\x38\xf8\x0b\x2f\x35\xf9\xf3\xd1\xef\x52\xfc\xe7\x6f\x51\x14\xa1\x60\xfd\x3b\x16\xe3\xe8\xcf\x87\xbf\x8b\x29\x49\xc8\x9f\x7f\x66\x24\xfa\x1d\x8b\x43\xc8\x16\x7f\x3e\x54\xa1\x20\xa9\x4f\x3d\x3e\x07\x91\xfe\xf6\xc5\xe1\x9f\x80\xfc\x17\x38\xfc\x13\xe0\x37\x4c\x5f\x80\xa3\xc3\xc3\xff\xe3\x4f\xb9\x62\x3d\x3a\x3c\xcc\x54\x67\xd3\xaa\x76\x5e\xdf\x62\xd4\x53\x9b\xd0\x80\x7b\x72\x8e\xa6\xe9\xf1\xcb\x2b\x78\xe5\xd8\xc0\xa0\x27\xa4\x96\x29\xfa\x7f\x24\x45\xd2\x54\xf5\x62\xec\x16\xbc\x29\x47\xb6\x81\x2f\xe3\xf0\x3c\x93\xd6\x3d\x3a\xf1\xae\x3f\x24\x2f\xbe\xbd\xfd\xee\x7e\xf3\x27\xde\xeb\x2f\x85\x6e\xf2\xce\x79\x1d\x1b\x8c\x80\xfa\xe4\xb1\x60\xf4\x21\x17\x8c\x8a\x33\xc7\x5c\x2e\x2a\x38\xfc\xe0\x8a\x45\x8f\x0e\x8d\xeb\xda\xff\x5a\x51\x31\xe7\xfd\xab\x11\xad\x69\xbd\xb1\x75\xe9\x9e\x9c\x9d\xd7\xef\xfe\xf8\xc7\xef\xd8\x87\xd7\xbf\x81\xea\x50\x03\xf1\x47\x61\xea\x1c\x2d\x71\x84\xf7\xe8\x84\x44\xe7\x5f\x7d\xf3\xed\x65\x68\x06\xda\xf1\xe4\xcd\xcf\x88\xe7\xe4\x57\x9c\x00\xde\x44\xfe\x03\x70\x03\x2a\xa6\x98\x21\x80\x19\x4b\x11\x77\xec\x12\xec\xdf\x22\x7e\x75\xc8\xc8\x2c\x59\x41\xdd\xc3\xcb\x2c\x79\x9f\xa4\xd9\xcf\xb2\x2f\xf7\x00\x95\xe1\xd1\xcf\x73\x4f\xe7\x7b\x3e\x7d\xde\x23\x5c\xad\x65\xf4\x6d\x36\xf9\xce\x62\x08\x88\x9d\x3b\x4d\x69\xa8\x0d\x21\x85\xf8\xc3\xfb\x8b\x86\x9b\x6b\xd7\x12\x5b\x23\x62\x53\xb6\x5f\xb4\xd7\x4e\x4a\x85\x80\xbc\xd1\xc9\xdc\x9b\x78\x7c\x46\x95\x34\xaf\x96\xca\xbb\xa1\x47\x32\x7a\x32\x7f\x02\xb2\x0d\xf9\xc5\xc1\xc1\x02\x85\x71\x80\xd8\x6d\x75\x53\x8e\x7a\xc3\xdf\x9b\x7f\xf2\xd1\x0f\x0c\x51\x4b\x67\xab\x32\x97\x7a\xf1\x47\xbd\xa0\x89\x49\xf9\x04\xb6\xcb\x29\x25\xa0\xf6\xf5\x6f\x99\x29\xb5\x4d\x05\x63\x2c\xb1\x47\x15\x10\xcb\xe5\x6b\xf0\xad\xf8\x64\x23\xec\x92\x2f\xd4\x9a\xfb\x54\x19\x76\x72\xf9\x9a\x4f\x60\x27\xec\xca\xa4\x05\x64\x34\xb8\x45\x6b\xf0\xfb\x19\x25\x4b\xf1\x91\xec\x7b\xff\x87\xee\x6c\xdc\x3d\x66\xda\x49\x9a\x2c\x50\x94\x60\x5f\xa0\x4f\x36\x9f\x3c\x30\x4d\xba\xa3\xa6\x75\x4a\xfb\xf4\x5a\xd2\x3c\xa1\x36\x55\xf7\x46\xf6\x23\xec\x96\x16\x2d\x76\xc5\xaf\x4c\x81\x14\x92\x15\xa1\xb7\x39\xf0\x68\x1b\xb2\x68\x03\x5a\xb0\x8a\xc2\xca\x6d\x91\x0f\xe9\x80\x1e\xac\x3f\xdb\x13\xfc\xb5\x01\x3e\xb8\x69\x52\x5e\xed\x5e\xa9\xfa\xc4\xd4\xcb\x91\x51\x5f\xe7\x79\x2c\x6e\x60\xf7\x45\x27\x99\xbc\xde\x51\x6d\x0f\xb6\x20\xab\x33\x14\xc2\xb5\x08\x05\x1f\x1e\x1a\x6c\xa1\x02\x92\x35\x2f\xc6\x57\x8d\x74\x5a\x01\xa3\x6d\x24\xe2\xd2\x64\x00\x75\xaf\x12\x49\x1a\xea\xfc\x11\x19\xa9\x16\x24\xba\x81\xfe\x6d\x26\x75\x51\x66\x85\x85\x84\x7e\x51\x90\x48\xec\xe0\x6c\x86\x7f\xb2\x35\x91\xf1\x48\xf4\xbd\x22\xb0\xbc\x5d\xaf\x52\xb9\x0a\x4b\x2b\x35\xa7\x1b\x24\x6d\x01\x37\xdf\xaf\xd5\xbb\xe3\x45\x83\x24\x94\x7a\x5b\x4e\x31\x29\x1e\xff\xfd\xff\xfd\xbf\xae\xa1\x83\x89\x55\xae\x3b\xc1\xc5\x36\xff\xb8\xcb\xb0\xdd\x6b\x5d\xb7\x13\x17\xa9\x3b\xbb\xa3\xfb\xd0\x7b\x12\x19\x09\x82\xb3\xe3\xe4\xed\xfd\x99\x7b\x9c\xb9\x29\xb8\xb1\x29\xfa\x8f\x1b\xc5\xc0\xc9\x22\xbd\xd9\xa3\x28\xc6\xdb\xef\x3e\x7c\xff\xe6\xd7\x60\x31\x24\x77\xad\x8b\xaf\xbf\xa1\xdc\xb5\x52\x95\xc9\xc4\xfb\x0a\x27\x5f\xa7\x37\x00\x33\xb0\x20\x2b\x10\x23\x12\x87\x08\xdc\xa4\x38\x0c\xf2\xb8\xc8\x93\x22\x30\x22\x98\x92\xc7\x43\x1e\x5e\xa8\x20\xd7\xd4\x7c\x21\xc6\xe4\xb6\x51\x6c\xb5\x0d\xfb\x9a\xd2\x4a\x7b\x47\xe7\x30\xc2\xbf\x42\x25\x0b\xad\x7e\xcc\x86\x53\xec\x3c\xb2\x8a\x10\x65\xd3\x80\x92\x38\xe0\xed\xef\x04\x01\xc5\xc7\x2d\xb9\x75\xef\xb2\x87\xaa\xa9\x75\x7c\x6a\xe5\xc4\x3a\xe9\x3c\xf1\x31\x2d\xc9\x75\xe3\x38\x4b\x92\xd0\x44\x23\x34\x20\x54\x78\x4a\xab\x05\x61\x08\x50\x14\x13\x96\x49\xd1\x1a\xac\x49\x0a\x56\x30\x4a\x40\xc2\xa1\x7e\x57\xfb\xe1\x09\xab\x95\x64\xfb\x1b\x27\x68\xc9\x00\xc3\x91\xcd\xa2\x6f\xf1\x7b\x95\xc3\x2b\xfd\xdf\xc2\xef\xbd\xa1\x30\xf2\x17\x53\x31\x7a\x95\x5d\xe2\xcb\x2b\xf1\xe6\x8f\x2a\x82\xb1\x4d\xbf\x57\x6a\xfc\x4c\xd5\xbd\x00\x01\x5c\x33\x00\xe7\x64\xaf\x58\x24\x75\xf1\x77\x18\xad\x9a\x4a\x6d\x1c\x7c\x50\xa1\xd9\x24\x6a\x8d\xdd\x09\xb4\x70\x99\x5f\xec\xa1\x3c\xce\xf1\x51\xd6\xc1\x4f\x97\x38\x44\x2c\x21\x51\x9d\xc3\xbc\xf0\x5e\x7d\x2b\x30\xde\xf9\x20\x37\xe4\xbe\x1d\xa4\xab\x55\x72\xf5\x91\xdb\x5d\xd1\x1b\x5a\x1a\xc4\xfa\x78\x0f\x22\xf0\x5b\x04\x66\xa4\xc0\x6b\xf1\xd5\xc8\xab\x57\xa3\xee\x7c\xe5\x3e\x59\x2e\x71\x62\x5e\xfa\xa9\xfc\x6e\xe4\xb5\xe7\xc3\xba\xb9\x2e\x1b\xd0\xfe\xc9\x02\x81\x6c\x3f\xb1\xcd\x6a\x78\xce\x87\x29\x87\xf6\x6c\x53\x1f\x9b\x0f\x00\xbd\xcf\x8f\xb5\x56\xa9\x2b\xd9\x16\x21\x66\x89\x6c\xd0\xa7\x89\x54\x76\xec\xc8\x83\xfc\x4b\x8c\x42\xde\x46\x09\x47\xf3\x10\x89\xb7\x95\xa2\x7f\x42\xa0\xb2\x71\x84\x28\x65\x07\xac\x6b\x6d\x5b\x2b\x2f\x3a\x03\x37\xb6\xc5\x48\xbc\xe6\x98\x86\x08\x32\x6a\x01\xe7\x52\x74\xd2\x19\x91\x70\x27\x5e\x75\xcd\xf9\x1a\xdd\xa7\xdb\x13\xaf\x7a\xf9\xf3\xc1\xbb\xf3\xaf\xd3\x57\xc3\xbd\xea\xcd\x24\x09\x98\x48\x36\x0a\x2f\x7e\xc6\x14\xee\x91\x77\xfd\x2a\xb8\x5d\x7d\xf8\xf5\xef\x78\xf3\x59\x74\xdf\x60\x0a\xc1\x95\xf4\x6d\xbd\x89\xf8\x3b\xa6\xe4\x0e\x07\x88\xc9\x04\x81\x84\x42\x9f\xe7\x93\xc3\x28\x00\x70\x8e\x43\x94\x7b\xc3\x8f\x79\x00\xbb\x70\xee\xcb\x0e\x39\x43\xec\xff\x67\xef\xcb\xd7\xdb\xc6\x91\x07\xff\xf7\x53\xc0\x9c\x5d\x37\x39\xa2\x4e\x3b\x8e\x63\x87\xc9\x38\x76\x92\x76\x4f\x0e\x8f\x8f\x74\xa7\x6d\x4f\x3e\x58\x84\x24\x26\x14\xa0\x10\xa0\x65\x27\xd2\xf7\xed\x43\xec\x13\xee\x93\xec\x87\x83\x14\x4f\x89\xba\x2c\x6d\x6f\xcf\xee\xaf\x63\x91\x20\x8e\xaa\x42\xa1\xaa\x50\x07\x95\x2a\xaa\x43\x0f\xed\xae\x33\x26\x21\x65\x56\x35\x40\x59\xfd\x8f\xd3\x42\xd3\xa7\x8c\xf0\xbd\x52\x71\xe2\xb8\x9b\x78\x26\xcc\x70\xd9\x35\xc5\x15\x97\x76\x24\xce\x41\xdf\x43\x40\x90\xe7\x11\xc1\x58\x45\xd1\xcd\x9e\x97\x70\xda\x0a\x38\x85\xce\xca\x1d\x53\xf3\xb1\x8b\x44\x11\xd8\x79\xad\x25\xe3\xaa\xec\xb4\x39\x7c\xca\xbb\xe9\x3a\x3b\xc7\x8a\xdb\x01\xc8\x09\xc1\xa1\xcc\x83\x8c\x78\x00\x23\x64\x8b\x04\x75\x6a\x67\x4b\x38\x36\x25\x1c\xb9\x16\x6f\x23\x06\x1d\x97\x82\x5b\xd4\x22\x1e\x02\x3e\x85\x6d\x54\x99\xe2\xac\x4d\x1f\xd7\xf3\x19\x8d\xb4\x68\x66\xf7\x00\xc3\xb9\xb7\x25\xd1\x8c\xa7\x2b\x71\x55\xe1\xc7\x47\xf9\xeb\xf7\xa8\xa3\x8a\x80\xb0\xa8\x7a\x09\xde\x41\xdc\xf6\x55\x3c\xf5\xa2\x3d\x56\xd2\x79\x8c\xc2\xb9\xe4\x38\x46\x88\x69\x26\x2f\xd9\x95\x87\x89\xce\xd1\xe1\x53\x60\x01\x0f\x51\xe2\xde\x21\x1b\x1c\x7e\x38\xe6\x54\xc3\x0f\x3d\x60\x81\xf3\x07\xc9\x62\x0c\xf0\xf1\x0c\x40\x4a\x9d\x36\x46\x08\x58\xe0\x96\xdc\xd2\xae\xc3\x3a\xc5\x73\x49\xcd\xcb\x3f\x4c\x2d\x28\x19\x57\xec\xd6\x7c\x54\x7b\x77\xc2\xb5\x79\x84\x98\x54\xcb\xd9\xf3\xe1\x66\x2f\x1c\xcf\xc8\x85\x5e\x64\x25\xe8\x91\xda\xf7\x5b\xcf\xe1\xaa\x5a\x5a\xf4\x5a\x8f\xaa\x60\x6d\x0f\x3e\x24\xca\x82\x45\x39\x10\xe7\x50\x84\x81\x04\x93\x98\xa8\x13\x3c\x86\xec\x9f\x14\x0c\x17\x2c\x6d\xae\x89\xdc\x8f\x6d\xf7\xe4\xe3\x8f\x67\xfe\x7a\xdd\xa6\xa5\xc1\xb4\x10\xe8\x77\xa1\xf7\xcd\x26\x7d\xbc\x46\xf2\xfe\xc3\x9d\xbb\xf3\xa3\x5a\x7d\x78\xac\x4c\x10\xa3\x42\x28\x66\x66\x4a\xf8\x44\xf2\x4e\x33\x91\xf0\x3c\xca\xfb\x96\x77\x29\x17\x29\xd6\x32\x91\x13\xa7\x33\x8d\x4e\xcb\xbc\xd7\x4d\xc6\x4f\x86\xb6\x8d\xcf\x81\x90\x9b\x00\xa1\x48\xf6\x03\x91\xfa\xa0\x05\xbb\x8e\xfb\xb0\x0f\x7e\x45\xee\x1d\xe2\x3c\x38\xdd\x24\x2b\x3b\xc2\x30\x7a\xa2\x45\x67\xd1\xf3\x50\x7c\x26\x3d\x68\x73\x95\x74\x1f\xd4\x92\x5f\x67\x1e\x90\x05\xaf\x2e\x83\xcd\x5c\xf0\xf2\x92\xb7\x2a\x5e\x00\x48\x9b\x98\x5b\x32\x2c\x7a\x2b\x84\xb2\x9b\xe8\x30\x19\x19\x1c\xcc\x54\xc6\x87\x79\x6b\x79\x16\x49\xd5\x15\xa4\x9f\x54\x29\x85\x40\x0a\x74\xbd\x70\x27\x4c\x48\xe4\xa5\xaa\x4d\x8d\x76\x4e\x4c\xde\x98\xc2\xc8\xb8\x52\x73\x5e\x16\xff\x5f\xc2\xc1\xb2\x26\x47\xfb\xa7\xd3\xe3\x9e\xb7\x77\x7a\xb7\xae\x26\xbd\x6c\xa0\x2d\x04\x1f\x3d\xc8\x21\xea\x41\xc7\x5d\xa3\xa3\xde\xfd\xbe\x73\xf8\x84\x5e\xee\x2d\xdf\xb4\x77\x1a\x2e\x5f\x13\x09\xe8\x7a\x2e\x14\xb7\xf2\x1e\x68\xba\xc4\xb7\xcb\x5c\x76\xb0\x81\x4b\xda\x74\xe4\xd2\x32\x02\x19\xec\xf5\xfe\x8e\xf4\x59\x9b\xd3\x7f\x3d\x82\x7d\x0a\x99\x63\x94\x37\xf9\xd5\x95\xa6\xe8\x50\xe9\xe9\x63\x5c\x83\x97\x7f\x8f\x37\xda\x0b\x60\x62\xa4\xc3\xdc\x11\x44\xa3\x4d\x54\x86\x3d\x87\x91\x6f\x08\x4f\x08\x7c\xb8\x10\x6d\xa6\x0c\x7d\x58\xc0\x95\x2e\x87\x85\x18\x5b\xc5\x3c\x08\xee\x30\x21\xe6\x61\xe2\x1d\xf3\x5f\x2c\xf2\xa1\x68\x9e\xcd\xf5\x09\x88\x28\x68\x35\x8d\x70\xcf\xe2\x5b\x75\x61\xbb\x75\xb2\x51\x35\xb2\x8d\x44\xdd\xf8\x98\x2b\xc2\xa8\x9c\xfc\xd8\x8d\x5c\x38\x70\x29\x25\xc8\xa7\x87\xcf\x74\xd3\x02\x29\xe9\x3e\xdc\xd7\x6a\x76\x85\xab\x5e\xce\xb3\x91\x8f\xb9\xc0\xdc\x75\x30\x02\xfd\x8e\xd3\xec\xf0\x53\x1d\x20\xcc\x3c\x07\xc5\xdd\x34\x6c\x25\x06\x08\x6b\xef\x2d\xb9\x05\x1f\xcf\x80\x7e\x7d\xad\x51\xd2\x45\xa0\xd7\xf1\x20\x45\xd7\xd7\x9a\x30\xfa\x52\xe8\xba\x0f\x63\x98\xc0\x58\x3e\xb0\x1a\x32\xe9\xc2\xfb\x48\x67\xef\xe1\xbd\xd3\xf5\xbb\xc0\x43\xd4\x77\xc7\xb9\xcc\x2c\x8c\x4e\xf8\xf8\xa6\x86\x7d\x2e\xff\x15\xa7\x93\xee\xd8\xb4\x88\x8b\xa4\x92\x5f\x49\x1f\x74\x21\x7e\x88\x91\x87\x4d\x42\x0a\xc9\x4b\x12\xbd\x46\xd8\x16\x7d\x8c\x5c\x6a\x23\xee\x82\x41\xe7\x05\x71\x3c\xc6\xf9\xb7\xe7\x91\x6e\x8f\x2d\xca\x0b\x38\x31\x63\x53\x7b\x2e\x9e\xbc\x08\xdd\x81\x55\xae\x4d\xb5\xb6\x49\x8e\xc1\x62\x9d\xb4\xb8\x67\xb0\x02\xfa\xa3\xd0\x97\x4c\x1b\x0a\x5d\x10\x11\xb7\xda\x13\xf1\x52\x54\xce\x58\x4c\xc9\xb9\x47\x32\x32\x64\xeb\x9e\x4b\x51\x6b\xd7\xc4\xd0\xf0\xf5\xdd\xf9\x9f\x27\x5f\xf7\xfa\xeb\x75\x87\x90\x07\xac\xc5\x60\xc2\x6e\xad\x91\x65\xe1\xe3\x57\x48\xef\xab\x6f\x0a\x5a\x16\xd6\x37\x9d\xb4\xf2\xb9\x3c\x3d\x7e\xc3\x25\x16\x89\xb0\xf5\x8c\xaf\xc1\x0b\xa8\x65\x34\xe1\xbc\xc3\xa8\x2f\x6f\x63\xcb\x41\x36\x81\x40\xa3\x3d\x7e\xa3\xa5\x2a\xf3\x24\x0a\x22\x65\x17\xb3\xca\x4e\x77\x15\x26\xc6\x42\xd0\x26\xd8\x15\x62\xf5\x24\x81\x57\x6b\x72\x9d\x0d\xf8\x3d\x97\x40\x1b\x48\x55\x0f\xdc\x22\x97\xf4\x43\x53\xb7\xdd\xfa\xa0\x92\x30\x64\xfb\xac\x26\xc0\x30\xf3\xd1\xf3\xc6\xf1\xa8\xa4\x19\x39\x1b\x64\x83\xbe\xe3\xba\xe0\x16\x01\x9f\x26\x6f\x93\xb3\x8a\x18\xad\x14\x97\xaa\x06\xef\xaf\x28\xa8\x89\xb4\x60\xb4\x72\x5c\x4e\x14\x4b\xa5\x0b\xc8\xd3\x5a\x2d\x82\x3c\x79\xa2\x6b\xa6\xd6\x51\x53\xcb\x90\x23\x16\x85\x42\x2e\x9d\x32\xe8\xba\xc0\xa1\xc2\xc9\x9c\x23\x53\x5d\x4d\xbc\x5c\x6f\xfc\x9d\x33\xe8\x31\x70\x9a\x72\xf1\x79\x6c\xdc\xd5\xb3\x30\x47\xf9\xe4\x4e\xf3\x0a\x38\x2c\x0a\x79\x17\x1d\x04\x5a\x62\x0f\x72\x3e\x1e\x51\x35\xd7\x1c\x73\x8e\x8d\x6e\xa1\x97\x8f\xb6\xa7\x81\x38\x1f\xcb\x2b\x4a\x70\x33\x8c\xcb\xcf\x4f\x8f\x8f\x58\xa4\xfb\xab\x08\x3a\x19\xf4\xda\x88\x55\xd4\x83\x54\xed\x8f\xb8\x0d\x30\xaf\x00\x9e\x9a\x1d\x51\x78\x8e\xac\x39\x60\xe5\x98\xe0\x30\x85\x43\x18\xf3\xaf\xc8\x90\x96\xd1\x77\x1f\xba\xa3\x8a\xe6\x51\x8a\x09\x66\x7d\x13\xf6\x11\x14\x06\xc9\xaf\xc5\xf7\x81\x60\x94\x31\xc3\x34\x54\x8b\xcd\xfd\x96\x90\x6f\x5d\xe8\x7d\xa3\xf3\x2e\x20\xda\xd1\xe4\x55\xbc\x0a\x5a\x2f\x70\x29\xac\xe3\x77\x6f\xe7\x5e\x47\xd8\xcb\xe4\x45\x5c\xf0\xa6\x18\x3a\x6e\xb1\x55\x8c\x27\xfe\x79\x75\x41\xf7\xc1\x04\x14\x31\xa0\xd6\x02\x22\x85\xb9\x26\xb0\x85\x47\x52\xd4\xe2\x32\xfc\x62\xf5\x82\x35\x51\xcd\x7e\xbc\xb5\x2f\xf7\x2e\x2f\xb3\x8b\xc6\x2e\x28\x8d\x64\x84\x66\x92\x59\xc3\x6b\xb1\x1c\xde\x9a\xa9\x85\x29\xbe\x09\x16\x67\x58\xbf\x83\x84\xda\x10\x3c\x16\x79\xbd\x35\x53\xab\xd7\x6a\xff\x33\xd8\x37\x4a\x00\x19\x2b\x9a\xc4\x92\x3e\x3f\x33\xaf\x34\x8e\x89\xaf\xb4\xda\x47\xb7\x55\x2e\x46\x70\xb5\x8f\x75\xdd\x97\x2d\xc7\x45\x96\x4a\x63\xde\xb3\x5b\x97\x22\xc3\x9c\xf6\x8f\x1f\x84\x74\x2d\x51\x39\x41\x4c\x60\x8b\xff\x69\x4d\x3a\x52\x4d\x4d\xb4\xeb\x12\x3b\xa7\x6d\xb8\x87\x6f\xd2\xbb\x36\x69\xe0\x58\x5e\x7a\xcd\x14\x49\x66\x13\xfa\xc6\x94\x84\xee\x42\xcc\xfc\xee\x3a\xdd\xaf\x3f\x7b\xf3\xb1\xda\x42\xbf\xf7\x1e\xe1\x7e\x9d\x2f\xfe\xf2\xfd\x3b\xcd\xd4\x8e\x3c\x04\x19\x02\x97\xef\xdf\x8d\xea\x25\x88\x0b\x35\x08\x7a\x2e\x74\xb0\x60\x91\xc0\x55\x7e\xe0\xf2\xba\x7d\xbf\x1a\x82\xef\xef\x8b\xf6\xb5\xbf\x68\x0f\x9c\xa6\x02\x94\x15\x28\x9e\x30\xb3\x2d\x3c\xf7\x22\xfb\xa9\xa9\xc1\x58\x97\x1d\x0f\xb5\x54\xcd\x85\x04\x39\x55\x03\x5e\x2a\x65\x4d\xcd\xd4\xbe\xdc\xba\x50\x16\x7e\x0f\xb4\x4e\x45\xbf\xe0\x78\xb4\x94\x67\xf9\x3e\xfa\x13\x9d\xc3\x1b\x59\xce\xe1\x59\x97\xe9\xd3\x64\xe5\x1e\x91\x9c\x9c\xe4\x05\xba\x17\x54\xb7\x5d\xcb\x2a\x96\xa4\x1a\x29\xc2\x07\x39\xda\x52\x76\x19\xbb\x84\xa3\x60\xb7\xc7\x1e\x42\xc0\xcc\x9e\x90\x6e\xec\x2d\xea\x44\x90\xd6\x73\x40\x1a\x1b\x2e\x55\x26\x54\x3a\xc3\x02\x0a\xbb\x3d\x17\x85\x0c\x69\xbf\xc8\xfd\x4d\xaa\xaf\x62\xd7\x28\xcb\x2b\x70\xac\x9d\xa3\xef\x3e\x52\x39\x34\x26\xb8\xff\x86\x4d\x27\xdf\xe8\xaf\x64\x29\x97\x14\x81\x23\x48\x8b\x2c\xe5\x92\x22\xd1\x72\x4d\x57\x72\x24\x59\xd9\xc4\x65\x1c\xa9\x3d\xbc\x96\x8b\xe0\x67\xc3\x9d\xc3\x0f\xbb\x89\xeb\x08\x9b\xae\xf9\x52\x80\x8e\x51\x1f\xc8\x1a\x7e\xe3\x72\x52\x25\xd7\xf5\x61\x72\x10\xd3\xca\x48\x2d\x52\xe5\x74\x22\xb9\x85\x6d\xd7\x74\x31\xe7\xfc\xf4\x28\xc2\xc9\x98\xcc\x8a\x50\x6c\x11\x8f\x7c\x81\xba\x74\x98\x65\x86\xea\xc5\x22\x50\x8e\xa0\x54\xaf\xc6\x5f\x95\x17\x08\xcf\xc3\x33\x0b\x37\x79\x32\x63\xb4\x44\x96\x9a\x73\xa4\x46\x56\x91\x5a\x46\xa3\x8e\x73\xca\x19\x35\x42\x41\x27\x19\xf8\x5a\x08\x71\x33\xac\xf5\x91\x4c\x31\x19\xda\xe4\x62\xec\x31\xb1\x8e\xd7\xc4\x28\xf3\xaa\x74\xe8\xec\xec\xd4\x2f\x97\x57\x17\x2b\x6a\x92\x59\xcb\xc2\x58\xd9\x78\x59\x08\xca\x85\x85\x6a\x8d\xcc\x12\xbf\x91\xa7\x7b\x1d\x62\x17\xf4\x8e\x98\xff\x72\xfe\xef\x3a\x54\x7c\x67\x70\x22\x08\x80\xd7\xf7\x60\xaf\x87\x3c\x90\x57\x59\x7d\x52\xbc\xd7\x5f\xab\x86\x6f\x6a\x7f\x2c\x7a\xd7\xad\x09\x97\x7d\x7f\xfc\xe6\xee\xf6\xc9\xab\x82\x35\xd6\x1f\x3f\xfc\x29\x03\x62\x8b\xc2\x84\xef\x42\x6f\x8d\x38\xe0\xf1\xeb\x76\xf5\xfb\x9f\x77\xef\xd7\x36\xc6\x79\x4d\xe3\x98\xd7\x91\xf1\x16\x30\x98\x0a\xa9\xc4\x0b\xfc\x59\xc6\x70\xda\xe5\x2b\x10\xda\xc9\xfb\xd3\x8f\x67\x17\xe0\xe8\xfc\xd3\xf8\x0b\xfb\x0e\xe9\x9f\x88\x08\xe9\xf7\xc4\x86\xee\x58\xfd\x6b\x66\xe1\x3a\x95\x42\xa3\x88\x22\x91\xaa\xb5\x9b\x1f\xdd\xab\xfe\xcd\x8c\x87\x8e\xc3\x5e\x45\xf3\xca\x73\x2b\x15\xca\x9b\xb7\xc0\x71\xd3\xec\x72\xb0\x65\xce\x52\x82\x53\x19\xa4\x6f\x1d\x6c\xa3\x7b\xcd\xd4\x64\xbc\x19\x7f\xe8\x11\x79\xc5\xe2\x40\x97\xe4\x1e\xcd\x63\xa3\x9c\x6d\x28\x6c\xf2\xea\xf3\x68\x9f\xe1\x7e\x9d\x25\x39\x90\xec\x38\x72\x69\x3d\x53\x04\x9b\xec\xa5\x83\xa0\x1d\x93\xd1\x8f\xce\x3f\x81\x0b\x02\x2e\x82\xdb\xd4\x99\x52\xdc\xca\xbe\xe5\x51\x35\x39\x6a\x67\x5c\x96\x96\x07\xb1\x6d\x12\x79\x5a\x3e\x10\x86\xf6\x01\xba\x77\xa8\x28\x0f\x27\xce\x2b\x60\x43\x06\x43\xff\x3a\x0f\x09\xb7\x25\xbb\x88\x7d\x79\xe9\xf1\x01\x4d\x7a\x57\x96\x75\x37\x13\xe5\x2c\x39\xac\x8f\xd5\x8b\x82\x21\x02\x39\x31\xff\xc9\x04\x4c\xe2\xd2\x42\xe4\x4f\x0b\xc6\x56\x9c\x5f\x66\x5b\x38\x0e\xaa\x80\x26\x12\x2e\xd5\x6b\x93\xe3\xfb\x16\xe0\x93\x7f\x44\xba\x5d\x91\xe0\xcb\x75\xba\x0e\x17\x28\x01\xf4\x10\xa0\x7e\x8f\xcf\xad\x00\xd2\x56\x84\xd1\x98\x5b\xe7\x19\xe9\x83\x5f\xc3\xcd\x53\x10\x7b\xf7\x65\x46\xda\x6d\x17\xa5\x25\x78\x2a\x4b\xb6\xb2\x0e\x12\xe5\xc3\x08\xbe\x90\x0d\xc3\x33\x45\x22\x2e\xe2\x60\xc0\x87\x96\xf9\x57\xbb\xc8\x76\xfc\xee\xe8\x60\xca\x3b\x4e\xc4\xf3\xae\xcf\xb4\x89\x7d\x86\x1e\x3d\x53\x59\x2c\xe7\x21\x89\xd7\x58\x6c\x62\xa7\xa5\x3c\xf6\x3c\xd2\x07\x2a\x86\x98\x82\x70\x62\x0b\x88\xd8\x98\x9a\x8b\xb5\x08\xc9\xb1\x88\xcd\x6f\xae\xb5\x1d\xda\x75\xa2\x4a\xdb\x44\x73\x6d\x7e\x80\x69\x20\x4f\xe5\x79\x35\xe7\xcc\xb9\x11\x9f\x73\xb9\xcd\x35\xc2\x62\x9f\xae\x36\xa0\x56\x4a\x45\x13\xcc\xad\x41\xa3\x22\x84\x9c\x43\x27\x59\x8f\x27\x1b\xa4\x1f\x4d\x63\x4e\x6a\x54\x8b\xd7\xd4\xd6\x44\x6b\xfe\xb5\xd6\xfb\x5a\x7a\xfb\xf0\x66\x8d\xb5\xe6\x34\xcc\x16\x83\x0d\x8f\x0b\x41\x6b\xa4\x36\xb7\x1f\x76\xcf\x3f\xbf\xff\xf1\x3a\xbb\x5c\xb0\xeb\x50\xb6\xd8\x72\xc1\x17\x02\x00\x9a\xa9\xfe\x08\x9c\xf1\xef\x1c\xea\x43\x17\xf4\xe1\x03\x60\x04\x74\x21\x86\x6d\x14\xa6\x0b\xe0\x60\xa0\x22\x3b\xb0\x2a\x0d\x82\x00\xc4\x0f\xac\xc3\x05\xc6\x30\xb5\x88\x84\xec\x5f\xde\xd5\x29\xa8\x25\xb4\x96\x6a\x7b\xda\xcf\x45\x62\x25\x4c\xb0\x3b\x26\xd7\xc0\x4c\x09\x0a\xe2\x1f\x61\xf2\x8a\x40\xcf\x2e\x5e\xbf\x30\xcf\x2b\xe5\x33\xf1\x41\x07\xde\x21\x80\x09\x60\x08\x76\xc1\xad\xe8\x57\x16\x22\xe0\xf2\x6d\x19\xf4\x90\x47\x45\x2c\xaa\x7a\xc5\x9f\x62\x74\x87\x3c\x51\xaa\x20\xeb\x5a\x63\x9a\xa4\x5b\x8f\x59\x7c\x40\xc0\x6c\xa2\x3c\xf6\x48\x35\x8d\x24\x34\x53\x35\x8d\x6e\x03\xbc\x8e\x23\x52\xb1\x90\xe2\x91\xcb\xb7\x72\xdd\xb3\x49\x12\xcb\x45\xd0\x48\xdf\x84\x8e\xa7\x6e\x19\xba\xb7\xc8\x2e\x37\x49\x46\xc5\x8c\x77\xb2\x7a\xc3\xec\xba\x54\xe0\x7c\x28\x37\x6b\xf9\x36\x20\x08\x71\x93\x17\xd4\x9e\x6c\x28\x88\x9d\x8b\x07\x93\xea\x70\xce\x30\x62\x59\x1e\x19\x91\xda\x93\x19\xe8\x52\xb8\x1c\x57\x8b\x32\x56\xd4\x34\x55\xe2\x62\xb6\xc2\xa6\x13\xab\x76\xaa\x85\xa8\xf3\x32\x3f\x29\x0a\xc7\xd5\x51\x50\xae\x25\x2c\xaf\xe9\x44\xab\x6e\x66\xb1\x52\xd5\x0c\x37\x5d\xdf\x9e\xbb\xb0\xa6\x13\xb3\xae\x35\x03\x5f\xab\x67\x22\xd7\x7b\x6a\x39\xe5\xa0\xba\x0c\xb0\xf9\x21\x0e\xc6\x1c\xae\xc1\xc2\x8e\x54\x3d\x9b\x88\x4f\xfa\x7c\xbc\x70\x45\xeb\x28\xbe\x80\xa8\x87\x4b\xbe\x42\xdd\x83\x38\xdb\x96\x1d\x99\x65\x6a\x13\x48\xd4\xe7\x53\x7d\xee\x88\x33\xd7\x2d\x9d\xbc\x7d\x9b\x2e\x82\x5e\xcb\x09\xb3\xa1\x2c\x25\xf7\xc2\x2c\x89\x2a\x57\xaf\xca\x2e\x28\x37\xd4\xac\x00\xc9\x2f\xdd\xf0\xd6\x25\xb7\xd0\x5d\x41\x01\x87\xd9\x51\x33\xd5\x25\xcc\xa8\x88\x83\xd2\x2c\xc6\x95\x71\x98\xb2\xde\xc0\x74\xf5\x14\xa6\x29\x98\xd0\x4c\xce\x7a\xca\x0a\x09\x63\x78\xd1\x63\xd9\x2d\x52\x1a\xed\xc2\x15\xe5\x35\xb1\x5a\x9c\x3f\xfb\xcf\x83\x7d\x7b\xf4\x64\x99\x61\x6e\x91\xcd\x32\xd9\xe4\xb1\x3c\xcf\xa9\x2c\xe8\x2f\x04\xad\xea\xfa\x70\x8d\x0c\x20\xbf\xba\x6f\xec\x4f\xf5\x67\x73\x55\x1a\xfe\xdb\x6f\x60\x3d\x0c\x10\xeb\x7f\xd1\xfd\x38\x3c\x39\x63\x97\x2d\x7e\xf7\xae\x09\x57\xf6\xff\x7d\x56\xfa\xfd\xfe\xed\xb7\xc2\x5c\x99\x36\x3d\xa7\xc7\x62\x8c\x59\xb8\xab\x6a\xd5\x9e\xe7\xd0\xae\xfc\x6f\xe5\x2b\x4d\x0b\xb7\xc5\x39\xf3\xd2\x90\xb9\x20\x66\xcc\xfc\x5e\x35\x68\x53\x16\x3f\x57\x8c\xc5\xb3\xdb\xbd\xbd\xef\xb8\xff\xc7\xdc\x67\xab\xc3\x25\x45\xd7\xcd\xb8\xe5\xcb\x72\x55\x1e\xe1\x1e\x52\x8a\x18\xad\x3a\xdd\xb6\x02\x8f\x30\x6b\xf7\x7c\xaf\xe7\xa2\x4a\x0f\x87\x5e\x1f\xd4\x6b\x52\x11\xef\x38\xf6\x8b\x7f\x35\xee\xa3\x1f\x41\x97\x7f\x11\xca\x82\xe7\x02\xe0\x41\x87\xd2\xc0\x22\x83\xd2\xf7\x41\xe3\x49\xad\x77\x7f\x00\x82\xba\x0a\x4f\x77\x7b\xf7\x07\x99\x6a\xd6\x6c\xde\x40\x01\x14\x3a\xf5\x31\x8e\x1a\xe2\xe6\x3a\xe1\xa7\x11\xce\x39\x35\x89\x22\xb5\x79\xf6\x62\x7d\x85\x1c\xf4\x4c\xe6\x25\x62\x1d\x14\x38\x92\xe7\xc6\x9f\xd2\xfd\x2a\xa7\x58\x5a\x09\xc8\x56\x44\xa1\xd2\xea\xa7\x1f\x1f\x9f\xfd\xf9\xfd\xfd\xc7\xa3\xf6\xe1\xab\xb7\x0f\xad\xdf\xab\x8a\x00\x84\x6e\x52\x6e\xfb\x8e\x8d\x68\xd5\xae\x7e\xaa\xef\xbe\xab\xed\xf9\xcd\xfb\xfe\xe1\xab\xce\x9f\x6f\x76\x33\x9a\x69\x13\x23\x5a\xa3\xdf\x00\xfe\xc3\xf3\x9b\x4a\x05\x4a\xab\xb9\x10\xdb\xc0\x43\x4d\xd2\xed\xf2\x2d\x6b\x2f\x7d\x81\x8d\x7f\xfb\xef\xf7\x4e\x8e\x9a\xff\x39\x7c\x05\xdb\xef\x9f\x54\x6d\xc8\xa0\x10\x51\x98\x8f\x9d\x11\x29\xe6\xaf\x2e\xf8\x00\xc8\x0f\x40\x08\x94\xb1\xb7\xa3\xf3\x92\xc0\xa9\x8b\xf8\x98\x48\xfa\x0c\xbc\xf1\x5d\xb7\x7c\x81\xee\x19\x50\x29\x78\xfb\x1d\x84\x81\x4f\xf9\x7c\xde\x3b\x4d\x8f\x50\xd2\x62\xe0\xfc\x3f\xef\xc0\x39\xf2\xee\x90\x07\x1a\xb5\xfa\x6e\xa9\x32\x66\x6a\x73\x39\xcc\x15\xca\x74\x4c\xe1\x9d\xf4\xed\x28\x92\xe5\x78\x5e\xa3\xf1\x58\x7b\xbe\xc3\x10\x08\x12\x10\x8d\xaf\x84\x36\x43\xd6\x71\xc1\xe3\xca\xc1\xb5\x5e\xb4\xf4\x5b\x97\xd8\x42\x26\x55\xa6\x2b\x25\xc7\x45\xcc\x10\x1d\x48\x2f\xf8\xbb\xd7\x9e\x47\xbc\x94\xaf\x12\x70\xf8\x4c\xee\xa0\x2b\xc6\x4f\x24\x27\x2a\x92\x3a\x7b\x1e\x5f\x95\x4b\xea\x43\xd7\x0d\xea\x16\x90\x6e\x0f\xe2\x07\x40\x3c\x79\xeb\x93\x07\xcb\xbc\x67\x0b\x47\xec\xe8\x1e\x40\x42\x5f\xf8\xd3\x24\x52\x4c\xbd\x89\x3e\x1b\x8f\xf5\x19\xf0\x3d\x1a\x31\x1b\xe7\x91\x19\x65\xe2\x3d\x9c\xdd\xa2\x71\xbf\x32\x1c\xb8\x30\x85\x82\x77\x70\x89\x18\x08\xc7\xcb\x46\xc0\x68\x3a\x99\xf0\x0f\xa6\xf6\x97\x01\x3f\xea\x42\x27\x9a\xb5\xec\x75\xf0\x7b\xe1\x80\x97\x23\x99\x9a\xfa\x37\x0e\x76\x35\x8d\x4c\x98\x8b\x29\xfd\x05\x00\x8e\x51\xbf\x1c\x56\x95\x88\xf9\xbb\x86\x8f\x16\x08\xf4\xd8\x68\xe9\x72\x16\x01\xe0\x47\x13\xca\x84\x7d\x30\xb9\x35\x3c\x6a\x4e\x9d\xe6\x37\x40\x49\x17\x49\xc7\x15\xca\x3c\xa2\x6a\x5e\xfb\xd8\xf9\xee\x23\xc0\x3a\x90\x89\x5c\xe9\x36\xc1\xd7\xbf\x30\xe0\x53\xe1\xe7\xd2\xef\x20\x0f\x01\xe4\xd2\x02\x67\x51\xfc\xd6\x70\xcf\xd4\xd0\xf7\x10\x3a\x21\xe9\xda\xce\x28\xb8\x39\x69\x5d\x3f\xf5\x88\xed\x37\xb9\x7c\xf8\x1a\x33\xe4\x71\x5d\x18\xbd\x0e\x3f\x88\xf9\x92\xce\x53\x35\x6c\x01\x35\x71\xb9\x28\x76\x27\x85\xe0\x6f\x28\xea\x9b\x7e\x18\xbe\x18\x5f\x87\x45\x2b\xec\x89\xad\xd2\xc6\x8c\x68\x35\x31\x76\x82\x44\x47\x6f\xc5\xf8\x37\xa6\xf6\x44\xcb\xa2\xd5\x7f\xa3\x87\x25\x90\xe9\x02\x28\xf5\x33\xf1\x41\x13\x62\xd0\x46\x0c\x38\x4c\x66\x9a\x2a\xa2\xbe\xf4\xfb\xfd\xb8\xf6\x62\x93\x3e\x76\x09\xb4\xe9\x64\xed\xa3\x58\x1f\x63\xf2\x07\xcd\x90\x87\x60\xec\x95\x54\x58\xfe\xb7\xc0\xb5\x61\xce\x9d\xe0\xb8\xbb\x43\x39\x9c\xbc\x35\x1c\x77\x4d\xa8\xb4\x8b\xe5\x47\x0a\x2d\xe7\x3a\x21\x6d\x68\x5a\x80\xe5\x4a\x08\x9d\x65\xcf\xc7\x2b\x36\x5a\xfd\xf1\xbe\x05\xdf\xe3\xa3\xd6\xcc\x46\x2b\xb9\xbf\x83\xd5\x94\x63\x71\x4c\x0b\x09\x6e\x2a\x90\xfa\x76\xea\xd0\xa6\x44\x06\xcf\x19\x22\x9b\x32\xf2\x9b\x4e\x19\xd9\xf4\x16\x31\x11\x2e\x24\x32\x23\x67\xa5\xdf\x9e\xaa\xfb\x74\x70\x53\x32\xe5\x69\xde\x1d\xaf\xdd\xe2\xff\x6f\xfc\xf0\x73\x4c\x2c\x2b\x5e\x21\x6b\x6a\xcb\x0b\x58\x48\xde\xb2\xbf\x25\xfc\x48\xd8\xd4\x26\xa4\x5b\x9f\x26\x1b\x6c\x5a\x82\x59\x0e\x1b\x0a\xf7\xd9\x7c\x1c\x88\x73\x53\xf5\x4f\x59\x81\x72\xa5\x4c\x08\x9e\x3d\xfd\xf1\xfd\xe1\xb0\x60\xdc\x73\x70\x7d\x11\x10\x41\xdc\xaf\x68\x21\xc0\x4e\x01\x68\x81\xf0\x76\x28\x5b\x75\x29\xed\xdf\x8e\xdf\x9e\x7c\xb3\x0f\xb3\xfd\xe5\xc5\x34\xd3\x0e\xf3\x63\x36\xfa\x9d\x13\xe4\x0e\xa7\x49\x51\x78\x8e\x28\x68\xa5\x07\x48\x86\xc0\x08\x71\x6f\x61\xd4\x79\x1d\x7a\xdf\x22\x0c\xc1\x83\x0e\x45\xb6\xe0\x0c\x9e\xba\xd4\xf2\x6c\xe4\x49\xb6\x2a\xc8\xc0\xcc\xf9\xef\x04\xcf\x9f\x14\x6b\x52\x33\x29\x8b\x68\x80\x91\xac\x2d\xbd\xee\x02\x3e\xc5\x1b\xc9\xda\x1f\xa3\x5c\xd6\xe3\x7d\xb4\x94\xdb\xde\x2b\x8e\x10\x9a\xad\xd7\x24\x03\xb0\x44\xde\x2f\x17\x85\xd9\xb2\x22\x7a\x12\xc7\xc8\x31\xc2\x54\xe4\x63\xbb\x31\xb5\x7a\x91\xfb\xe9\xf3\xbe\xc3\x9a\x9d\x4f\xb2\x62\x79\xbd\xa0\x36\xf9\x88\xb0\x39\x74\xdd\xe2\x80\x69\x11\x8f\x4d\x86\x4b\x63\x6a\xb8\x34\xe6\x81\x8b\xe2\x58\x01\x60\x02\x06\x56\x14\x32\xda\xff\xf9\x5f\xff\x3b\xcb\xe5\x33\x93\x30\x60\xb3\xc0\xfa\xb7\xa7\x5e\xff\xf6\x74\xfe\x7e\x71\x9d\x65\x66\x39\x7f\x5c\x6a\x31\x3f\x5b\x3f\x0c\xdc\x98\x53\x0c\x25\xe6\x5b\x1d\x70\xad\x31\xf6\x80\x0c\x89\xc7\x75\xb2\xef\x6d\x19\xea\x16\x92\xc1\xf2\x2f\x7e\x5b\x24\x73\xce\x39\x0e\x8d\xa6\xd4\xd7\xa5\x42\x2f\x5d\x65\x2a\x4a\xb6\x96\xf8\xf4\x38\x45\x44\x9c\xaf\x95\xc9\x49\xfe\xa2\xae\xdf\x8e\x18\x44\x32\xf9\x60\x72\x01\x05\x17\x92\x30\x2e\xe7\xf9\x82\x37\xc9\x18\x3f\xce\x31\xa3\x17\x05\xa7\x0a\xd8\xca\xc7\x47\x5e\xa7\xb1\xdd\xcb\xbb\x29\x73\x11\x22\xc1\xd2\x6e\xd2\x2b\x19\x2b\x4c\xe6\x0d\x56\x58\xeb\x2f\x3a\xf3\x6c\x77\xeb\xf1\x13\x2a\x3e\x91\x98\x6d\x0e\x13\x56\x2e\xc2\x5f\xa6\xc7\xf1\x04\xdc\x8a\x98\xbc\x94\x8b\xb9\x7c\x1a\xba\xb2\xcc\xb0\xa0\x22\x87\xe8\xd4\x8e\xc7\xab\xdb\xa7\x05\x20\x29\x28\x7b\xe2\x5e\x15\x67\xd5\xc9\xf8\xb0\x8d\x49\xf4\x09\xe2\xbb\x2b\x4b\x0d\x89\x1d\x8d\x34\xd0\xf4\x4e\xec\x91\x60\xa0\xde\x44\xe0\x13\x99\xda\xb4\x67\xd2\xa4\x99\x16\x74\x7a\x2b\x3e\x40\x71\x53\xf7\x5f\x81\xfa\x26\x50\x1e\xef\x87\x16\x67\xd0\x05\x7a\x9b\x8e\xdb\x4f\x3a\xc4\x64\x45\xa9\x14\x93\x69\x12\x1f\xb3\xa3\xc0\x28\x94\x15\xcf\x32\xe7\xc0\x61\xe4\x40\xe0\xb3\xc3\x50\x97\xe6\x9b\x61\xb2\x7a\x2f\xde\x72\x7d\x20\x0a\x19\x6a\x13\x51\x0e\x7a\xf9\x20\x6d\xca\xc1\x1c\xb4\x70\xb8\x2e\x9c\x6d\x4c\xea\x30\x15\x07\x95\x92\xb2\x97\x62\x8f\x4a\xda\x34\xe6\xb2\x90\xf8\x4e\x55\x54\x13\x28\x53\x95\xfd\x79\x95\xe6\x91\xef\xa7\xd4\x7e\xeb\xbd\x69\xcc\xed\xc7\x19\x5d\x52\x9e\x27\x67\x7e\xfc\xdf\x28\xc4\xaf\x61\x6a\x6d\xf7\xa1\xc7\x3a\x5a\x56\x2c\x5f\x5e\xf8\x8e\x72\xeb\xee\x22\x4a\x65\xd5\xbd\xec\x68\xd3\x45\x13\x46\x1c\x95\xf3\x52\x85\xd8\xb7\x65\xe9\x82\xd7\x73\x9a\xdf\x56\xee\xaa\xfd\x04\x9d\x37\x9e\xdc\xfb\xdd\x6c\xdb\x99\xd4\xe4\xa7\xa1\x91\x8c\x05\x4e\x54\x5a\x45\xeb\x22\x81\xc0\xda\xf8\xc8\x5f\x49\x67\xa2\x37\x10\xbf\xdd\x55\x47\x7f\x60\x85\x10\x97\x78\xe1\x8f\x91\xfe\x2f\x3a\x0b\xa3\xab\xf7\x44\x30\x48\x13\x0a\xf3\xe6\x2d\x6c\x7e\x6b\x7b\xc4\xc7\xb6\x5c\xdc\x3e\xd0\x22\xec\x5e\x46\x6c\x68\x07\x91\x5a\x6d\xb9\xe1\xc6\xe7\x2a\x50\x3f\xf1\x75\x9e\x67\x62\x41\x56\xf9\x6c\x51\xc4\x9e\x46\xe0\xbc\x34\x2f\x5d\x97\xd7\x82\xda\xfb\xf7\xee\xd1\x8f\xed\x3f\x8e\xb3\xa9\x5d\x66\x07\x9b\x2a\x0f\x77\x74\x69\x13\xe9\x5c\xb4\x5e\x18\x9d\x8b\xde\x1e\x95\xce\x7b\x9e\xd3\x85\xde\x43\xd4\xe9\xa4\x38\x99\x2b\xf5\x3d\x27\x49\x41\x11\x55\x7f\x75\x7b\x22\x8a\xe6\x79\x77\x83\xef\x94\xe1\x1d\x64\x70\xd5\x5b\xa1\x61\x5f\xfc\x0e\x9b\x4f\x4e\xe7\x96\x0a\xd4\x6a\x62\x61\x5d\x9c\x3e\xe5\xf3\xb2\x3a\xf0\x3d\xd4\x3a\x49\x67\x54\x48\x18\x97\x29\xf2\xca\x0e\x76\x98\x03\xb9\xae\xac\x76\x4d\xc2\x9d\x55\xea\xcc\xe1\x93\xc0\xde\x9b\xe9\x83\xb1\x63\x6a\x90\x31\xd8\xec\x94\x43\x53\x74\xe8\x4a\xd2\x21\xfd\x63\xa4\x8a\xd5\xd6\x6b\xb5\x5a\x86\x26\xa8\x24\x8e\xa8\x87\x6f\xb8\x1b\xe5\xab\x88\xe3\x69\x78\x5b\x37\xce\x62\xbc\x2c\x09\x25\x24\xaa\x05\x50\x67\x24\x51\xdd\x6a\x29\xf4\x73\x69\xf7\xe3\xc9\xd9\xf1\x6d\x21\x0a\x5d\x1c\x20\x47\xeb\x5f\x18\x30\x57\x0c\x48\xc2\xb6\x2f\xab\x77\xcf\x3e\x67\x9f\x7a\x5b\xaa\xc3\xf4\xc1\xb7\x93\xf4\x8e\x3b\x99\x64\xe0\x9e\x5e\x11\xe0\x7f\xab\x92\x51\x45\x13\x93\xa8\x0d\x55\x44\x3b\xe6\x63\xab\xf0\x08\xb5\x5f\x03\xdf\xae\xbd\xe8\x26\x96\xad\xb3\xf5\x89\xfa\x8e\x59\x5f\xe0\x36\x95\x04\xb1\x00\xca\x6a\x8e\x32\xd6\xac\x92\xb6\xf6\xce\xf6\x68\xf5\x3b\xc2\xd3\xd2\xd6\x44\xf1\x26\xb2\x44\x90\x76\xd5\x8c\x89\x38\x91\xa6\xe5\x4c\x71\x27\x57\x48\x11\x59\x65\xb4\x71\x59\x7e\x12\x83\x15\x94\xdc\x0a\x51\x7f\xe1\x8c\x3d\xa6\x06\x62\x53\x98\x2b\x7b\xcf\x02\x67\x38\x43\x2e\x9e\x02\xbe\x13\xa1\x39\x8d\x6f\xbc\x47\xd0\xee\x23\xd4\xb3\x80\x6d\xa9\x9c\xf6\x56\xec\x10\xd3\x6d\x76\x5f\x7d\xf6\x9e\xce\xba\x29\xb3\xc2\xf4\x95\xd7\xe0\x12\x52\xbd\x67\xd1\x44\x92\x26\xa3\x1e\x91\xc1\xd1\x21\x6f\xd3\xc3\x52\xfa\x05\x72\xbf\xcf\xee\x1e\x59\xd4\x89\x3e\xcb\x37\x52\x1d\x33\x41\x16\xa9\x31\xe9\xa2\x66\xf4\x8c\xcc\xf0\x33\x97\x51\x92\x11\x68\x12\x1c\x38\x4f\x17\xcf\xe8\x30\x26\x9d\x1c\xd0\x46\x3b\x34\x7b\x12\x05\x53\xfd\x2e\x2a\x4d\xf4\xdc\x2e\x97\xb3\x14\xf7\x53\xcd\x44\xc6\x8c\x48\x7d\xba\x49\x99\x3b\xe2\x29\x36\x26\xc7\x0d\xcc\x92\x47\x7a\x66\x78\xa4\xa0\x20\x3f\x94\xeb\x4f\xe5\xda\x6a\x39\x5e\xb7\x58\x65\xbe\x64\xb6\x90\xb1\xde\x46\x53\x26\x84\x5e\xde\xc9\x20\x39\xce\x02\xce\x85\x88\xd3\xc5\x4a\x8f\x86\x4f\xad\x9d\x3f\xfe\xfc\xd5\x3d\x7f\x64\xa5\x2a\x5c\xfe\x02\x40\x29\x72\xf2\xad\x85\x39\xf1\xf0\xc8\x63\x7f\xdc\x7b\x47\xd9\xe7\xac\x72\x9f\x2a\x6e\x49\xe9\x3b\x76\x1b\xb1\xd8\xfa\x72\xce\xca\x1c\x1f\x31\x99\xc9\x55\x46\xf6\xec\xc5\xf3\x84\x8a\xbf\x8f\x28\xcd\x16\x76\x63\x66\x4a\x75\x3d\x3b\x45\x48\x99\xeb\x8c\x11\xe4\xe5\xa4\x66\x34\x54\xe6\x4a\xee\xaa\x7e\x43\x60\x32\xcc\x35\x2c\x16\x93\x39\x65\xcc\x15\xf3\x7c\xdc\x8c\x5c\x6e\x29\xfe\x29\xa2\xa3\xae\xc2\x81\x14\xf3\xc3\xb0\x8b\xde\x38\xc8\xb5\x33\x8c\x50\x79\x1e\x11\xa9\x55\x17\x4e\x19\xba\x00\xa9\xfd\x42\x70\xf5\x69\xb5\xec\x24\xb6\xe7\xb8\xb9\x5d\x1e\x97\x8e\xec\x98\x05\xf0\x17\x25\x66\x89\x63\x8f\xae\x3a\x15\xfc\x07\xef\x33\x62\xf5\x57\xd3\x4a\xf2\x0b\xb6\x5a\xc4\x40\xb2\x28\x10\xaf\x18\xb4\xbd\x93\x37\xdb\x9d\xc6\xc9\xf6\xdf\x4a\xd2\xff\x97\x4a\x52\xb6\xf2\xb2\x34\x15\x65\xad\xa4\x5a\x31\xdf\x05\x6c\xe3\x9e\x47\xda\x1e\xa2\xab\x66\x92\x9f\x3e\x96\x5e\xe3\x76\xa3\x5a\x3c\xdd\xdc\x5d\x3c\xdf\xd8\x7d\xd7\xe5\x9c\x5e\x04\x3c\xab\x78\xe7\xfe\x76\x85\x78\xed\x6a\xa3\x56\xab\x55\x45\xf3\xbc\x97\xe2\xdb\x6a\xb0\x89\x45\xc6\x30\xcd\xd4\xb6\x1b\xc1\x13\x99\x35\x2c\xf6\x48\x14\x35\x27\x7c\xf7\xd7\x40\x0d\x6c\x37\x80\x7c\x95\xb5\xdf\x13\x79\xd1\x98\x47\xbe\xa1\xb2\xeb\x60\xd4\x84\x3d\x11\x05\xef\x63\x5b\x4b\xbf\xfd\x4a\x1c\x9c\xf3\x3a\x98\x61\x38\x9b\x96\xe3\x72\xbd\xef\x1f\x75\xf1\xbf\x78\xeb\xf8\xf3\x1c\x4e\xd1\xce\xf6\x8d\x6b\x96\x5d\x42\x7a\x5f\x6c\xc2\x68\xb9\xf6\xa4\x9c\xb1\xc6\x58\x2f\x4d\xc7\x6b\x72\x62\x88\x74\x65\x43\x06\xcb\x81\x9e\x2a\x3d\x12\x92\xb3\xc6\x04\xa3\xc4\x02\x45\xc9\x33\x51\xf9\x4c\x55\x5c\x53\xf3\xe2\xf0\xae\xef\x86\x3f\x1f\x62\x3f\x3d\x15\x0a\x22\xd9\xb3\x07\x31\x95\x16\x14\xf9\xb7\x20\xb5\x1a\xd8\xae\x6c\xef\xee\xd4\xd4\xff\xea\xdb\xcf\x9e\x1a\x5a\x7e\xb2\xed\xfc\x65\xe5\x4e\x3d\x0f\x0b\x63\x97\xb4\x33\xcf\x8a\x9e\xac\xe3\x8a\x1a\x7b\xf3\x2c\xa9\x5e\x78\x49\x79\x2c\x39\x9d\x8f\x52\x51\xed\x66\xc0\xd9\x80\x6e\x80\x9f\x20\xfc\xc5\x74\xc6\x7f\xb3\x8e\x43\x2b\xc8\x15\x9c\x06\x58\x80\x99\xf2\x09\xdf\x00\xc0\x02\x57\xd1\xd7\x95\x36\x62\xaf\xe5\x9f\xf4\xd5\xc3\x05\x6c\x73\xde\xad\x5f\x5f\x2b\xe0\x5e\x5f\x6b\xc6\x55\xfd\xc6\x04\xd3\x7e\x53\x9b\xe1\x9b\xc6\x4d\xf0\x11\xc4\x4e\x57\xe4\xc8\x38\xb1\xd5\x13\xca\xa0\xc7\xd7\x22\xb4\x14\xf9\xc8\xc1\x0e\xd3\x0d\x30\x04\x4e\x0b\xe8\x9b\x7d\x07\xdb\xa4\x5f\xf1\xd0\x77\x1f\x51\x76\x18\x74\xf0\x86\x6b\x05\x1c\x26\x9c\x7b\x3b\xaa\x83\x03\x30\xae\x35\xb0\x46\x00\xd5\x99\x09\x70\xf0\x39\x7f\xa3\x63\xd4\x07\xc7\x90\x21\x83\xaf\xe8\xc2\xe9\x22\xdd\x38\x00\x0e\x18\x0c\x80\xce\xbb\x47\xc6\x81\x68\x0b\x81\x05\xde\x43\xd6\xa9\x74\xe1\xbd\x5e\x33\x41\x7d\x17\x94\x81\x8e\x40\x19\x38\x86\x61\x02\x02\xac\x60\x0e\x54\x76\x43\x7c\xa6\xc7\xb1\xca\x74\x04\x4a\x00\x1a\x60\x68\x02\x68\x1c\x00\x0f\x31\xdf\xc3\x62\x11\xe2\x05\xef\x65\x08\x86\x80\x55\x7a\x1e\x61\x84\x3d\xf4\x90\x80\x49\x6c\xfe\xc1\xdc\x05\x1d\x74\x1c\x7a\x90\x02\xf0\x68\x26\x99\xd0\xd0\x59\x85\x79\x4e\xbb\x8d\xbc\xf0\x79\x85\xcb\x8c\x3a\x33\xc4\xcc\xa2\xa3\x7b\x88\xa2\x49\xc3\xab\xb1\xa4\xa9\x32\x35\x54\x64\x5e\xa9\xde\x93\xd3\x88\xe3\x29\x8a\xe3\xc8\x42\x25\xdd\x70\xec\xc4\xc8\x88\x29\x34\xf1\x4e\x18\x28\x47\xda\x9a\x02\xcd\x12\x75\x0e\xd6\x31\xa8\x82\x9d\x9a\x09\x1a\xdb\xc6\x01\x78\xb6\x5d\x03\x2f\x00\xce\xe8\x6e\xf4\xa3\xc4\x5b\x19\x07\xa0\x45\x3c\xa0\x07\x94\x70\x75\x23\x51\x5e\x3b\x00\xdb\xe0\x05\x20\x07\x80\x94\x4a\x7c\xc6\xf0\x8a\xdc\x44\x29\x85\x13\x48\x03\xfc\x13\x10\x13\xf0\x4e\x38\x65\x8b\x26\x2f\xc0\x9e\xa1\xfe\xb4\x24\x2d\xf1\xbf\x8d\x83\x54\x07\xfc\x37\xff\x36\xb2\xe5\xaf\xc8\x0d\x27\xb2\x43\xc6\x3c\xe7\xd6\x67\x62\xd7\x85\x3c\xeb\xfa\x5a\x33\x41\xf0\x40\x31\xae\xeb\x6b\x8d\xd3\x17\xef\xb9\xc4\x7f\x18\xfc\xff\x0e\xd4\x46\x0b\x04\xf6\x4a\xf0\x87\xda\xd5\x95\xa0\x88\xa3\x1e\xdd\xf6\x86\x31\x9e\xb8\x9c\x1c\xe2\x72\x38\x71\x8d\x50\x14\x0e\x1a\xe3\x22\xe2\xb6\x3e\xe0\x23\xe9\x53\x9e\xcf\x5a\x62\xf3\xea\x46\x82\x12\x1b\x71\xb4\xd4\x0e\x00\xae\xb8\x08\xb7\x59\x07\xbc\x00\xf0\x00\xc0\x52\xc9\x88\xf0\x56\x87\xa3\x08\x55\x7a\x3e\xed\x88\x7d\xcf\x74\x7c\xe5\xdc\xf0\xa9\xe9\x7c\x43\x86\xb3\x82\xb6\xfd\xfa\x4e\xa4\xea\xa6\x0c\x61\xe4\xf1\xf9\xdc\x39\xd4\xb9\x75\x5c\x87\x3d\x34\x45\xd1\x21\x01\xe8\xf8\xc6\xb8\xbe\xd6\x3a\x8e\x6d\x23\xcc\x01\x6e\x45\x56\x39\xfa\xf6\x9c\x0b\x8c\xe0\x25\x40\x95\x16\xf1\x5e\xc3\x66\x47\x4f\x90\x3c\x93\x9b\x8e\xf3\x41\x03\xec\x8f\x6b\x17\xb0\x4b\xf9\xff\x75\xe3\x60\x65\x42\x7f\x20\xac\x2f\x40\xee\x0f\x6a\x4d\xad\x54\xea\x3f\x39\xfe\xe3\xcf\xdb\xdf\xcf\x9d\x29\x8d\xaf\xc1\xdc\x73\xed\x95\xb1\xac\x4f\x81\x5e\x4f\x69\xd4\x49\xa5\x2e\x1c\xda\xa0\x4d\xb0\xfb\x10\xfa\xb7\xa9\x9f\x63\xac\x96\xcd\xa0\x0e\xd6\x28\x2f\x69\xf0\x68\x92\x0b\x42\xcf\x23\xdd\x1e\x2b\x14\xad\xa6\x44\x18\xa2\xca\xce\x46\xe5\x69\x87\xc2\x5b\x57\x44\x61\x07\xce\x31\xa3\xc0\x6c\x69\x9d\xa5\x65\x4c\x58\xc2\xf1\x21\x91\x67\x6c\x4c\xd2\x98\x20\xf3\xba\x9a\x6c\x4e\xa8\xe6\x24\x33\x62\x2c\x92\x31\x59\x39\x4a\x05\x29\x09\x18\xaa\x1c\x63\xda\xbf\x1c\x1b\x61\xa6\x02\xcb\xa6\x87\x4c\x3d\xcc\x2a\x26\x60\xc0\x31\x59\xee\x89\x42\x68\x29\xa3\x6f\xb2\x78\x5a\x14\x2c\xd9\xe0\x44\xdf\x7d\x61\xe9\x4a\xf6\x34\x0b\x68\x0b\x4d\x6e\x54\xc7\x2d\xcf\x39\x72\x96\x48\x9c\xe5\xb0\x24\x09\x84\x45\x30\xa4\x20\xce\x7e\x95\x0c\x89\x3d\x3d\x86\x67\x6f\x9e\x9c\x3d\xf2\xd5\x9a\x5c\xfb\x02\x80\x18\x64\x75\x58\x0b\x9f\xc5\x6f\xbb\x68\x9b\xe2\xb7\xd9\x29\x74\xfe\xf6\x59\x7c\x54\x9f\xc5\x38\x61\x64\x53\xda\xc6\x2c\x94\x66\x3b\x77\x8e\xbd\xf2\x7d\xfb\xe3\xd7\xd6\x6f\xac\x7a\xe4\x3d\xf2\xbe\x4d\x00\x61\x81\x1b\x38\x52\xa9\x73\xa5\xfe\xdb\xfd\xb3\xed\x4f\x7f\xd4\xa6\x76\x3b\x7e\xa4\x4d\x12\xbd\x96\xad\x99\x57\x1a\xf4\x3c\x91\x55\x6d\x3d\x38\x45\xec\x7a\x62\x91\x67\x6e\x92\x48\x16\x48\x77\x32\x31\xd2\x4a\x69\xee\xe2\xcf\xfa\xa9\xfd\xfd\xf2\x3f\xf3\x1d\x1b\x41\xb4\x48\x01\x62\x28\x1a\x62\xf2\xf4\xc9\x98\x08\x93\x70\xbc\xc2\x51\x24\x13\x08\x67\xf1\xe4\xc2\x71\xbb\x40\x52\x59\x87\x2c\x7d\x7d\x4a\xba\xdf\x4e\x4b\xd9\x77\xeb\x99\x59\xfa\x32\x78\x4a\x9e\xc2\xf6\xff\x2e\x09\x2d\x9e\x76\xe6\xcf\x38\x98\x48\x9a\xb7\x52\xb2\xb9\xac\xdd\x35\x2e\x2f\x3b\x53\x4b\xa6\x09\x8e\xfe\x37\xc1\xe4\x22\x78\x41\xa4\x22\x00\xb3\x5a\x17\x93\xbd\xef\xd0\xf1\x4f\x2f\x0a\xd7\x31\xfc\x9b\x1e\xb2\xb0\x38\x1f\x3d\x50\xe4\x55\x5b\xc4\x6b\x13\x16\xa9\x65\xb0\x52\xb2\xd8\xee\xd5\x7f\xed\x1c\x75\xb2\x2d\x97\x59\xe2\x70\xa1\x9a\x47\x72\x8d\xda\xe4\xaa\x47\x69\xde\x43\xe1\xc3\x45\x07\xe2\x6f\xc5\x12\x07\x6a\x45\xaa\x4b\x21\x84\xcb\x4f\x6b\x35\xd0\x85\x5e\xdb\xc1\xe5\x5b\xc2\x18\xe9\x96\xb7\xa3\xf5\xa6\xe4\x90\x15\x20\xc2\x89\x64\xb5\x1f\x51\xc2\x43\xdc\x16\x44\x4b\x79\x15\xa8\xb9\x5b\x60\xbe\xd3\xd6\x3d\xc8\xc8\xc6\x93\x57\xf7\xa0\x40\x01\x94\x1c\x7b\x5e\x66\xd1\xa7\x44\x3d\x0e\x91\x91\x7c\x54\xe8\x20\x56\xfb\x24\xac\x79\x32\x7a\x9c\x51\xfb\xa4\xc7\x1e\x16\x5c\x00\x25\x93\x86\x82\xee\x8b\x67\x54\x2b\x40\x4a\x1e\xb2\xa3\x84\xc4\x48\xaf\x5c\xaf\x25\x61\x0d\x30\x61\xa0\x15\x78\xbb\x4c\x9d\x80\x30\xcf\x13\x60\x79\xa5\xcb\x13\x39\xbc\xf3\x6b\x97\x9f\x21\x8a\xd8\xd8\xd0\x8a\x70\xdf\x4f\x53\xb6\x3c\x71\xff\x34\x31\x61\xe9\x4e\x66\xd1\xc2\xf1\xa5\xc9\xa1\xcf\x3a\x15\x97\xb4\x45\x71\xf3\x2c\x6a\x10\x70\x02\xa2\x94\x0a\x23\x80\x3a\x6d\x0c\x9c\xc9\xce\xc8\xcb\xb9\x22\xcb\x38\x25\xe6\x3f\x76\x82\x9e\xca\xe2\xb6\x70\xc5\xa7\xce\x6f\xfe\xce\x9b\x6f\xcf\x3e\xcc\x9f\x06\x4a\xa0\xb4\x2c\xce\xa4\xbc\xc2\x06\x85\x0e\x2c\x09\x94\xc9\xe7\xd5\xb2\xf9\xb8\x6a\xfa\x01\xf5\x41\x76\x1d\xa5\x79\x79\x37\xf4\x19\x69\x86\xb9\xad\x23\xac\x3c\x59\x50\x29\x5a\x48\x49\xc3\xa8\x7f\x3a\xaa\xbd\x14\x2f\xc5\xf4\x28\x55\x96\x32\x00\x37\x73\xf9\x9a\xa3\x0e\x21\x14\x01\x18\x94\x58\xea\x8d\x05\x74\xfe\xd3\x25\xe2\xff\x48\x46\xb3\x4d\x47\x03\xcb\xc0\xbe\x9a\x88\x62\x84\xf1\x67\x05\x08\x41\x35\x5d\x4f\x3a\x50\xa5\x45\x39\x9c\xa4\xc4\x87\x51\x3f\x24\x06\x00\xdb\xd0\xc1\x0b\x24\x89\x98\xcc\x90\x10\x45\x1b\x99\xa5\x4f\x97\x7e\xf0\x67\xd5\x1d\x9a\xed\xdc\x0f\xd8\xe7\x14\x58\xeb\x41\x9c\x6b\xb8\x96\x0b\xc6\xae\x74\xe7\x56\xd5\xb3\x7c\xca\xde\x43\xd6\xec\x08\x3a\xb2\xcb\xca\xc1\x53\x9e\xc6\x1a\x18\x09\x68\xbb\x23\x01\xcd\x45\x2d\x26\x80\x7b\x93\x2e\x4f\x47\x01\xef\x11\x74\x65\x97\xeb\x52\x8a\x24\xe3\xa8\x9e\xff\xe8\x17\xb9\x8c\x7a\x1e\x69\x39\xee\xaa\xf3\x3f\x3a\xcf\xea\x7f\x9c\xfd\x5e\xca\x2e\x8f\x31\x75\x5d\x8c\x60\x4d\xd3\xd6\x34\x9a\xc4\x9e\x27\xa8\x58\x53\x94\x59\x2d\x7a\x54\x8f\xaf\x7d\xb8\x86\x55\x56\xf3\x37\xc8\xf2\xe0\x5e\xb8\xb4\xea\xe4\xc3\x71\x3c\xbc\xd7\xad\xa6\xea\x2a\x80\x3d\x85\x1d\x61\x56\x30\xaf\x4b\x05\xd5\x6c\xd6\x1e\x37\x29\x38\xf4\xd0\x67\x9d\x53\x8f\x88\x0b\xf2\xa0\x54\xff\x34\x36\xaa\x25\xda\x7c\x0a\x57\x61\x2d\x26\x39\x8e\xc7\xda\x98\x22\xac\x59\xaf\x1e\xab\x0e\xeb\x6a\xe4\xf5\x11\x0e\x54\x02\x8a\xd3\x34\x2a\x16\x21\xcc\x8f\x47\x49\x72\xec\xb1\x98\x51\x8d\x61\x2c\x4f\x46\xa6\xd8\xfe\x58\x48\x2a\x56\xdc\x66\xf5\x72\xf0\xb9\xa8\xb5\x39\x73\x31\xce\xa5\xc9\x8b\x51\xf9\xae\xa8\xb4\xe8\x33\xc7\xa5\x55\x7b\x6c\x46\xf0\x48\x50\x11\x32\x99\xf1\x53\x85\x9f\x74\x09\xe7\x72\x3a\x32\x2a\x1c\xe9\x90\xe9\xcc\x18\x2e\x46\x78\xc4\xd6\x4f\x46\xce\x3b\xc4\x63\xc7\x90\xa1\xfd\xe8\x5c\xe2\x63\x07\x21\x38\x3a\x32\xc2\x59\x68\x9f\x3f\x7f\xfe\x5c\x7d\xff\xbe\x7a\x7c\xac\x19\x43\x93\x91\x13\x4a\x44\x37\xcc\x94\x2d\x12\x7d\x9a\x38\xd9\x2b\x13\x0f\xf9\xb7\x4e\x17\x1d\xb6\x49\xd1\x09\xb8\xa4\x09\x5d\xdd\xa8\xb4\x3c\xd2\xfd\x40\xfa\xfa\xa8\x87\xcb\x8b\xa3\xfc\x4e\x2a\x3e\x6b\x4e\xea\x68\x18\xc1\x23\xce\xc7\x23\xc2\x4d\x62\x3b\xf8\x11\x72\x7d\xfd\xfc\xf2\x0d\x3d\x9c\x33\x6f\x5f\x3b\x7c\x75\x74\xfc\xfa\xcd\xdb\x5f\x4f\x7e\xfb\xf7\xbb\xf7\x1f\x3e\x9e\xfe\xe7\xec\xfc\xe2\xf2\xd3\xef\x7f\x7c\xfe\x13\xde\x36\x6d\xd4\x6a\x77\x9c\xaf\xdf\xdc\x2e\x26\xbd\xef\x1e\x65\xfe\x5d\xff\xfe\xe1\x47\xad\xde\xd8\xde\x79\xb2\xfb\x74\xef\x59\xa9\x6a\x69\xa6\x98\x76\x1c\xcf\x82\x0c\x4c\x62\x52\xd3\x31\xa1\xe9\x99\xae\xd9\xb4\x34\xcd\xb4\xad\xda\x46\x8b\x78\x3a\xb2\x58\xe5\x8b\xcf\x5a\x7b\x5f\xe4\xb7\x3a\x32\x0e\xec\xe7\x48\x85\x70\x1c\x18\x8e\xa5\x63\x0b\x55\x9a\x1d\xe8\x1d\x11\x1b\x1d\x32\xdd\x2e\x95\x0c\xe3\xc5\x8b\x86\x09\x2d\x7d\x7b\x0b\x1b\xcf\x9f\xef\x0c\x74\x92\xd9\x66\xc7\xf4\x2c\xbd\xfe\x64\x8b\x18\xcf\x9f\x37\x06\x3a\xcd\x6c\xb4\x6b\xba\xd6\xee\xf6\x16\x35\x1d\xfa\x01\x7e\xd0\x89\xf1\xd2\xb3\x5c\x6b\x77\x67\x5f\xfe\xa6\xc6\xd6\x96\xce\x7f\x1b\x66\xd3\x6a\x96\x44\x24\x8c\x02\x99\xe8\xec\x90\xe9\x8e\x91\xf9\x18\x66\x3f\xf6\xb2\x1f\xbb\xc6\x86\x22\xa6\xe6\xd0\xb4\xd1\x64\x38\x72\x28\x36\x43\x28\xa2\x8a\x87\x7a\x2e\x6c\x22\xbd\x7a\xf5\xdf\xc3\xf2\x9f\xb0\xfc\xa3\x56\xe6\x48\xb9\xa9\xb6\x4d\x4d\x33\x0e\x9a\x11\xa0\x62\x2b\x36\x03\x91\x2e\xe0\x63\x4b\x47\xc1\x5c\x9a\x1c\x32\x02\x64\x4e\x91\x96\x02\xd2\x44\x40\xda\x91\xe8\x80\x05\x3f\x6b\x98\x94\x23\x11\x1a\xcf\x9f\xef\x0e\x74\xaf\xd0\x57\xa6\x5b\xb2\xce\x99\xe7\xe0\xb6\xd8\x56\x47\x0a\xa1\x3a\x36\xcc\xdd\x9d\x4d\xcb\x82\x1c\x5f\xd9\x4d\x88\xa1\xda\x78\xf9\x6d\xa8\x11\x22\xc2\x0d\x69\x53\xe2\x43\x77\x8d\xa1\x19\x25\xd6\x18\x82\x62\x38\xb8\xf6\xae\x31\x07\xfc\x35\xd6\x0c\x81\x21\xb9\xd9\x34\xcd\xc4\x56\xed\x00\x8f\x70\x81\x4b\x25\x89\xdb\x04\x05\x63\x63\x83\x3c\xaf\x37\xf6\x5e\xb2\xbc\xa5\xec\x93\x17\xf5\xc6\xd3\xad\x2d\xf2\xbc\x51\xdb\xd9\x7b\xa9\xe7\x35\x7c\xf1\x62\x77\x50\x7f\xd6\x30\xcc\x9c\x06\xbb\xdb\x5b\x64\x50\x6f\xec\x19\xc6\xfe\x98\x3e\xea\x8d\x41\xa3\xb1\x93\xdb\x09\x1f\x65\x6b\x77\x5b\xf4\x33\x79\xa0\xa1\x02\x30\x0b\xc0\x99\x43\xef\x01\xc0\x36\x5c\xc4\x00\xb1\x6a\x26\x55\xf4\x1e\x85\xa0\xe1\xb4\xf4\xe4\xfe\xc7\x86\xc1\x81\x67\xe4\x02\xcf\xc4\xa5\xd2\x06\x72\x29\x02\x4e\x4b\x27\x2f\xea\xcf\xea\x02\x90\x8d\x1d\x23\xc1\x24\x70\xa9\x9e\xbb\x20\x7d\xbb\x2e\x58\xcb\xee\x80\xf3\x0f\xde\xa7\xd5\x10\x9d\xfe\xcc\xe8\x44\xac\xc1\x49\x3e\x6f\x18\x1b\x79\x9d\x2b\xbe\x55\x6f\x0c\x74\xd1\xbd\x1a\xc7\x11\xe3\x6c\x8f\x40\x38\x34\xb1\xf5\xf3\x15\xa4\x68\x77\x67\x9f\x15\x3c\x5e\x84\x64\x5c\xbe\x7d\x58\xca\xf1\x92\x81\x45\x15\x5b\x53\xf9\x17\x82\xcd\x4e\x45\x2b\xa1\x60\x8b\x49\xdb\x12\x97\x7f\x7c\x86\x6c\x9d\x8d\xe6\x10\x7c\x7b\x75\x13\xb4\x15\xcc\xa1\x8d\x98\x1e\x86\xea\x18\xa9\xd0\x38\x1d\x07\xbb\x69\x73\x93\x55\x5a\x0e\xb6\x5f\x3d\xe8\x9a\x54\x04\x4c\x39\x18\xef\x01\x9b\xc8\x30\x36\xc8\x60\xc0\x44\x24\xa0\x5c\xac\x2e\xdf\xab\x95\x37\x3d\x24\x8c\x5c\xe2\xdb\xfd\xf8\xa7\xa6\x9a\x00\x97\x6b\x0d\xc3\x9c\x34\x50\x72\xd2\x91\x21\xb1\x31\x34\x4c\x36\x34\x86\xf9\xb8\xea\x3a\xb4\xf9\x08\x62\x80\x83\x19\xf2\xee\xa0\x1b\x15\xa8\x98\x19\x80\x93\x1f\x3b\x96\x4e\x2c\x66\x52\x0b\x47\x91\xe4\xb4\x74\xd9\x8f\x65\x59\x74\x30\xa0\xe5\x32\x78\x51\x33\x7e\x46\x22\xa0\x1d\x93\x18\x1b\xcc\x7b\xf8\x89\x2a\x4d\xe8\xba\x3a\x17\xa6\x8d\x61\x13\xb2\x66\x47\x67\xc6\x4f\xd6\xf1\x48\x1f\x50\xab\x66\xb2\x0a\x23\x72\x27\x70\x39\x69\x68\x6c\xc4\x3a\x61\xc6\xd0\xec\x7b\xb0\xf7\x46\x8d\x9d\x9a\xa7\xa2\x92\xc8\xdc\x50\x05\xf6\x7a\xee\x83\xce\x5f\x0f\x87\xa6\x83\x29\xf2\xd8\x21\x3b\xf2\x3d\x4a\xbc\xd8\xf7\x62\x1d\x61\xac\x66\x18\x3e\x65\xa0\x8a\x30\xee\xe9\x86\x99\x7e\xa9\x28\xe4\x0c\xe2\x36\xd2\x8d\x0a\x43\xf7\xcc\x62\x21\x4f\x41\xa3\x86\xa2\x66\xf9\x60\xa0\xd5\x34\xcb\xb2\x92\xcf\xd5\xc1\x9e\x7a\x6e\x92\xe8\xa3\xd7\xd8\xde\x40\x15\x81\x45\x4b\xfd\x5b\xa1\xfe\x2d\x95\xd0\xaa\x99\xd8\x28\xb1\x52\xfa\x05\x31\x83\x67\x92\x57\x72\xec\xc7\x87\xb1\x70\x89\xa9\x97\x66\x7c\xbc\xc8\x9b\xa1\x58\x94\xea\xaa\x64\xb1\x21\x17\x95\x50\xff\x13\xf2\x68\x16\x22\xf8\xea\x23\x67\xa1\x76\xa7\x71\x01\xc4\x64\x16\x4b\x3d\xe3\xed\x98\xe7\x74\x39\xfc\xc8\x3b\xd2\x47\xde\x11\xa4\x48\x97\x8d\x33\x5f\x68\x02\x88\x5b\x5b\x9a\xb6\x69\x59\xcc\x90\x48\xdf\x0c\x4e\x08\x54\xa1\x3d\xd7\x61\xba\x56\xd1\x0c\x93\x5a\x2c\xf2\x53\x71\x91\x4d\x9d\xa8\x55\x3d\xdf\x1e\x0c\x68\xe4\xef\x4d\x9d\x5e\xd5\x6e\x5e\x90\xab\xda\xcd\x60\xc0\xff\xb4\x2c\x8b\xff\xd8\xda\xa2\x57\x75\xfe\xbc\x7e\x63\x6c\x6d\x6d\xea\x98\x3f\x48\xbc\x15\x3f\xea\xe2\x47\x83\x37\x6d\xdc\x18\x71\x51\x7f\x8c\xca\x86\xc7\x5d\xde\x47\x35\xb6\x80\xc4\xab\xff\xd5\x1b\x4f\xae\x6a\xe5\x27\x37\x83\xc6\x55\xad\xbc\x73\x73\x55\x2b\x3f\xbb\x19\x5c\xd5\xea\x37\x2f\xc5\x9f\xe2\x3f\x2f\x8d\xeb\xca\x6a\xda\xfd\x8f\x6a\x85\x21\xca\x27\xbc\x38\x2d\xb2\x8d\xd8\xb9\x7f\x6b\x93\x2e\x74\x22\x04\x27\x68\x8d\xe9\x2a\x1c\x9d\x2b\x5b\x62\x63\x76\x08\x65\x86\x22\x0d\x4d\x13\xa4\x81\xa4\x24\x91\xd5\x32\x4d\x23\x61\x04\xf9\x8b\xfa\xd6\x96\x8e\x2c\x7c\x55\xbb\x89\x93\xa1\x61\xa2\xa1\xd9\x46\xec\xb0\xd7\xbb\xf4\xdc\x98\xdc\xc2\x47\x63\x13\x07\xe2\x5b\xa1\x4b\xee\xb8\x10\x50\x93\xa2\x01\xb6\x58\xe5\x2b\x71\x70\x6c\x22\x5f\x2a\x8e\xf4\xb0\xd2\x91\xf1\x92\xaf\x61\x1f\x95\x2c\xad\xa2\x99\xc9\xfe\x45\x4a\x85\x26\x71\x4b\x5a\xb5\xaa\x95\x50\x09\xf3\x3d\x7a\xf8\x15\xde\x1f\x36\x9b\x88\x52\x61\xf0\xc9\x52\x5c\x25\x94\x37\xc5\x96\xd2\x35\xfe\x01\x80\x3e\xeb\x10\xcf\xf9\x21\x13\x32\xb4\xa0\xe3\x22\x5b\x72\x2e\x55\x1d\x6b\x30\x18\x7d\x55\x41\xbc\x67\xba\xb5\x15\xfc\x15\x40\xae\xc6\xfb\xdb\xa9\xd5\xe5\x97\xf2\x1d\x07\x23\x65\x90\xf9\x74\x30\xd0\x76\x6a\xdb\xd9\xef\xb8\xbe\x2e\xe7\xfe\x81\xb0\x37\xc4\xc7\x76\xa1\xd9\x17\x9b\x93\xb6\x53\xdb\xc9\x1e\x96\x0f\x7a\x22\xad\x5f\xef\x9c\x26\xc2\x14\x2d\x76\xd8\xc6\x98\x61\x4f\xef\x8a\x8b\x6e\x92\xb5\x17\xe5\x18\x09\xd5\x63\x4e\x1d\x5f\x33\x89\x55\x3b\x20\xcf\xd1\x01\x29\x95\xb8\x70\x8d\x03\xd5\x4c\x24\xab\x68\xb9\x84\x78\xf2\x4f\x0f\x62\x9b\x74\x75\xe3\x9f\xc1\x56\x1a\x69\x55\x6c\x71\x5c\xa1\x0b\xbf\xa1\x73\xd7\x6f\x67\x6c\x40\xea\xfa\x6d\x1d\x99\x3f\xbb\x5c\xaf\xd0\xbc\x56\x73\xfb\xd9\xde\xae\x66\xba\x7c\x0f\x8b\x4e\x37\x02\xfe\x60\x59\x16\xdb\xda\xd2\x99\x85\xb8\x24\x66\xf2\x3e\x4f\xec\x7d\x66\x22\x6c\xd3\xdf\x1d\xd6\x49\x08\x0a\xf2\xb3\x72\x5d\xa0\x3c\x50\x51\x99\x19\x1c\xb1\xe5\xe0\xd0\x34\x86\x26\xc4\x04\x5f\x52\xe4\x9d\xd8\x51\x96\xa5\xc6\xe5\x2f\xbf\x68\x25\xa6\xd7\xeb\x82\xe0\xc5\x15\x48\x06\xb5\x55\xff\xab\xeb\x57\xff\x7d\xfe\x42\x37\xae\xae\x6f\xae\xaf\x2b\xe6\xc1\xfe\x35\xfd\xd7\xb5\x76\x53\xd2\xaf\x2b\xd9\x2f\x8c\x7f\x1a\x03\xfd\x5a\xab\x94\xae\x35\xc3\xf8\x97\xae\x5f\x5f\x09\xce\xfc\xb3\x6e\x6e\x0f\xaf\x2b\x05\xfe\xbe\x31\x06\xba\x7e\x05\xcb\x3f\x0e\xcb\x7f\x5e\x97\xf9\xf3\xd2\x75\xc5\x28\xa9\x27\x37\x3f\x1b\xe6\xd0\x88\xb2\xf9\x82\xa4\xcb\xc8\x63\x08\xb2\xfc\xa8\x60\x09\xcb\x20\x93\x64\x21\xcc\x91\xcd\x0b\x42\x5c\xba\xff\xd3\xef\x5d\x40\xaf\x8d\xd8\xbe\xa6\x99\x36\xe9\xe3\xd1\x2f\x8e\x55\xcc\x4e\x70\xd3\x13\xd7\x3f\xfb\x35\x13\xba\x2e\xe9\x9f\x88\xc7\xfb\x9b\x75\xf9\xf3\xa3\xcf\xd4\xef\xa1\x29\x6d\xc7\xf0\xd6\x45\xa7\xb0\x8d\x78\x13\xbf\x77\xac\x12\x22\xec\x6f\xd6\x44\xff\xd1\xdf\x72\x84\xe8\x13\x22\x7b\x8b\x3e\xea\xc1\x36\xa7\x44\x4d\x1b\x6e\x38\x2d\x9d\x1f\x05\x97\x58\x82\x47\x64\xea\x09\xce\xaa\x0d\x5c\x91\x2d\x2d\x26\x15\x0d\xc7\xd6\x8c\x0d\xa9\x04\x7d\x11\x9a\x09\x9f\xf8\xbd\x8e\xcc\x0c\x56\x86\xe4\x27\xbc\x83\x0a\xff\x8e\x6f\x86\x51\x2f\x43\x83\x8f\x5c\xae\x73\xf1\x66\x34\x1e\xef\x9a\x5a\xf1\xf9\xa0\x2b\x52\xae\xdf\x18\x2f\xe5\xbf\xfb\xf2\x9f\x51\xdf\x9a\x61\x3a\xe9\x2f\x4a\xea\x8b\x92\xfc\xa2\x14\xff\x22\xbd\x68\x61\x8a\xc3\x95\x00\x85\x95\x00\x83\x16\x17\x25\xe3\x4d\x9d\x44\xd3\x11\x82\x45\xe3\xcd\x64\xc7\x52\x0c\x87\x33\x01\x8c\xa6\x01\xb6\x69\x59\x70\xc4\x7c\x3d\x0b\x1e\x78\x2f\xac\x1a\x97\x1e\x15\x74\x5d\x74\x87\x5c\xcd\x78\x81\xae\xbc\xc8\xa2\x2b\xea\xb1\x71\xe0\x95\xcb\x06\x97\x6d\x62\xad\xf9\x01\x92\xdd\xfe\x67\x16\x54\x12\x6d\x05\x59\xdc\x7a\x08\x7e\x1b\x46\x5a\x47\x28\x3b\x58\x48\x30\x37\x2b\x3e\xba\x19\xf9\x2a\xb1\x43\x12\x5f\x96\x13\x1f\x72\xdd\x30\xff\xe3\x38\xa2\x92\x3d\xd7\x8d\xe1\xd0\x69\xe9\x9b\x49\xf4\x4a\x84\xb9\x33\x21\xcc\xc9\x44\x98\x6b\x04\xf8\x6a\x5a\x6e\xc4\x5c\xca\xb1\x86\xae\x9a\x19\x60\x7f\x1e\x5f\xa7\x71\xd0\x2c\x95\x72\xb0\x96\xf5\x79\x0c\x6b\x11\x02\x4d\xb4\x8e\xe0\x2d\x41\x3c\x4e\xec\xe7\x38\x82\x1f\x86\x82\x6d\x1c\xf1\x8a\x87\x25\x30\xfd\xa2\x6e\xe2\xca\x88\x81\x59\xe2\x8c\xcc\xa0\x30\x13\x57\xa2\x8c\x2d\xd5\x6e\x34\x07\x13\x57\xe2\x2c\xcf\xda\xcc\xa6\x41\x13\x57\x12\x9c\x30\xdd\x52\x4d\xda\xc4\x95\x38\xdb\xb5\x36\x47\xe2\x72\xc6\x6c\x8d\xc1\x20\xbb\xc1\x68\x9a\xc6\x60\x90\x3d\xad\xf4\xf3\x70\x12\x43\x93\xcb\xf1\x97\xbd\x6c\xbb\x89\xa2\xcf\xa8\x61\x6b\x74\xef\xc6\xd2\xa4\x89\xd2\xf3\x1e\x72\x4d\x56\x5c\x8b\x3a\xd6\xd5\x4d\x9a\x2b\x12\x63\x30\xd0\x89\x45\xa2\xbc\x33\xc9\x0e\xb1\x31\x18\x24\xbf\x0a\x18\xba\xb3\x91\x66\x7d\xac\xe0\x4e\x22\xd1\x9d\x74\x20\xf9\xde\xd6\x56\xf2\xac\xba\x82\xfc\x6c\x18\x0c\x74\x6a\xc9\xbf\x63\x53\x95\x67\x95\x17\xf4\x45\xd1\x77\x1f\xe1\x26\x3f\x32\x5c\x71\x64\x7c\xf0\x5d\x57\xa7\xa9\x05\x50\xe3\x65\x6d\x9f\xa6\xbe\x69\xce\xb4\x0e\x9c\xc9\x11\x9a\x12\x89\xb6\xa5\x7b\x25\xd7\xa8\x36\x36\x1c\x99\x37\xec\xa7\x3a\x99\x23\x5f\x99\xc1\x14\xf6\xed\xe1\xc8\xe0\xef\x5b\xcd\x52\xfd\xc0\x7f\xce\x22\xac\x84\x5d\xf9\x59\xac\x24\x98\x42\xc8\x4b\xfc\x52\xc9\xb0\x2d\xdd\x2e\xa5\xe0\x62\x54\x1b\x66\x62\x26\x89\x4e\x53\x33\x0a\xf6\xbf\x23\xa9\xf5\x98\xf4\xd3\x66\x9b\xb4\xc4\x30\x13\xf4\x4c\x3a\x07\xcd\x8f\xb6\xe2\xd0\xd8\x48\xe2\x5b\x10\x10\x8d\xd1\x8e\x20\x1d\x67\xa6\x49\xc7\x4e\x6d\x13\xaa\xad\x25\x65\x9d\xc1\x40\xfc\xeb\x04\x5b\x04\x2a\x12\xad\x99\xae\x55\x13\x24\x66\x7b\xa4\xa7\x33\xd3\x31\x4c\xdb\xfa\x52\xf1\x90\x30\xe6\x36\x27\x0d\xad\x90\xbb\x69\x25\xb0\x3d\x18\x8c\x87\x6a\xe6\xfb\x94\xd8\x61\x87\x0a\xa7\x44\xa6\x6f\xd9\x5c\xcf\x8c\x0a\x61\x5d\x8b\x5d\xcd\x02\x2c\x3f\x3a\x56\xb9\x1e\x72\x21\xb1\x37\xbb\x1c\x33\x5d\xab\x1b\x67\x40\x9b\x91\xf7\x5b\x5b\xdd\xf8\x01\x93\x20\x76\xcf\xd2\xfd\x24\x95\x97\xba\x59\x74\xef\x5a\xa9\x86\xf2\xc6\x85\x2f\xb8\x67\xb1\x2b\x27\x29\x45\x7a\x96\xde\x4b\xf5\x9d\xe2\x1b\xb2\xef\x54\xc3\xa1\x34\x7d\xba\x56\xe3\x9f\xba\x67\x35\xfe\xd9\xbc\x6a\x06\x7a\x5e\x74\x98\x4a\xa4\xa3\x0d\x58\x80\x49\x78\x11\x26\xd1\x09\xd8\x8b\xd9\xb2\x48\xa9\x7e\xd0\x4a\xb0\x8b\x56\x21\x76\xd1\x0a\xee\x11\xdb\x96\xde\x91\xdc\x0a\x26\x79\x44\x2b\x9f\x47\xb4\x47\x3c\x02\x0e\x95\x7a\xb2\x44\x0e\x71\x75\xb3\x41\xf3\xc1\x24\x16\xb5\x1f\x5f\x61\x09\xe5\xca\x88\x11\x58\x3a\x02\x82\x4e\x02\x82\x4e\x21\x08\x3a\xa5\x92\x41\x93\x20\x73\x52\x20\x93\x93\xcb\xee\x74\xfc\x24\x15\x78\xe8\x30\x50\xf6\xd6\x0a\xc0\xe5\xfa\xfa\xc0\x51\xcc\x25\x04\xd7\x44\x3b\xba\x70\x80\x6b\x57\x11\xbe\x73\x3c\x82\x45\xe9\x01\xf3\xea\x26\x7a\x4b\xc5\xbc\x07\x01\x5c\x64\x8d\xff\x8a\x59\xe1\x3d\xcf\x77\x1f\x79\x0f\xb2\xce\x34\xf1\xf4\x5f\xba\x88\xc1\x2b\x0c\xbb\xc8\xd2\x7e\x29\xa1\xd2\x2f\xda\xcd\x2f\xe2\x5e\x6f\x94\x82\x75\x74\xc1\x67\x62\xeb\xa7\x9a\xf0\xfe\x6f\xe7\x1f\x3f\x54\x7a\xd0\xa3\x48\x97\x97\xdc\x97\x67\x27\x47\x81\xbb\x17\x57\xe3\x87\xc1\x42\xb3\x0d\x20\x38\xdf\x00\x82\xd5\x25\x1a\x09\x2e\xd1\x30\xea\x03\x61\xb4\xd4\x7f\x39\x22\xbe\x6b\x8b\xc0\x55\x0f\x41\x1b\xc8\xb5\x82\x96\x47\xba\x80\xaf\x04\x30\xd8\x06\x7d\x87\x75\x00\x5f\x12\x50\x4b\xaa\xfc\x22\xee\x21\x3d\x1f\x63\x07\xb7\x2f\x10\x65\x74\x30\xf0\xd0\x77\xdf\xf1\xa2\xe0\x86\xbd\x9e\x66\x04\x18\x09\xef\x49\xdf\x7d\x7c\xfb\xe5\xec\xf5\xf9\xc7\x77\x9f\x5e\x9f\xed\x6f\xd6\x4d\xfe\xfb\xf0\xe8\xe2\xe4\xd3\xeb\x2f\x6f\x5f\x7f\x78\x7d\x76\x78\x71\xf2\xf1\x43\xf0\xe2\xd3\xc9\xeb\xdf\xbf\xbc\xfb\xf8\xf1\xdf\x97\xa7\xe7\xc1\xb3\x8b\xb3\xc3\x0f\xe7\x27\xbc\x55\xd6\xa3\x2f\x27\x1f\x2e\x5e\x9f\x7d\x38\x7c\xc7\xdf\xe1\x98\x23\x9d\x66\xde\xa9\x9b\x28\x6d\xbb\xf2\xb4\x52\x2b\xc1\xdb\x67\x4f\x5a\xcd\xe6\xae\x36\x34\x36\xfe\x6f\x00\x00\x00\xff\xff\xad\xb0\x96\xc4\x8e\x8f\x0e\x00") +var _bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x73\x13\x39\xbe\x38\x8e\x3f\xcf\xab\x70\x34\xff\xca\xba\x4f\x14\x27\x01\x66\x76\x8f\x67\x3d\x14\x03\xec\x2e\xe7\x00\xc3\x21\xb0\xfb\xad\xe2\x4f\x51\x4a\xb7\x62\x6b\xd2\x96\xbc\x2d\x39\x21\x93\xf8\xbd\xff\x4a\xfa\x48\x6a\xa9\x5b\x6d\xb7\x93\xcc\xc0\x6c\xcd\x13\x88\x5b\xf7\xdb\xe7\x7e\x41\x4b\x49\x07\x52\x55\x2c\x57\x68\xa7\xa0\x67\x8c\xd3\x21\x2a\x44\xbe\x9c\xb3\x5f\xe8\x21\x59\x2c\x10\xfe\x80\xe8\xe7\x85\xa8\x94\x44\xb8\x2e\xa9\xa8\x14\xe5\x05\xad\x10\x46\x74\x7e\x4a\xab\x83\x52\x90\xe2\x80\x71\xa6\x18\x29\xd9\x2f\xb4\x8a\x6a\xe7\x82\x9f\xb1\xe9\x21\xe5\x17\xac\x12\x7c\x4e\xb9\x42\x1f\xf1\xd9\x92\xe7\x8a\x09\x3e\xa4\x58\x61\x8e\x45\x76\x5d\x52\x35\x90\x3b\x3f\x9d\xfe\x4c\x73\x35\x82\xc9\xbc\xa9\xc4\x82\x56\xea\x6a\x48\x31\xfa\xf4\x89\xca\x57\xa2\x58\x96\x14\xe1\xeb\x0b\x52\x2e\xe9\x78\xf7\x68\x95\x61\xaa\xeb\x92\x65\xa9\x26\x17\x82\x15\x83\x23\x2c\x27\xcf\xf5\x9c\x46\x4f\x16\x8b\x92\xe5\x44\x0f\x32\xa2\x9f\x15\xe5\xc5\xf0\x7a\x6e\x3a\x78\x53\xd1\x33\xf6\x79\x2c\x5c\xcb\x51\xf8\x19\x2f\x44\xf1\x2a\x5d\xad\x51\x82\xdf\xda\x6d\x18\x2b\x57\x65\x95\xe1\xe1\x11\xe6\xee\x67\x36\x94\x38\x3d\x4a\xb6\x73\x41\xaa\x01\x9b\xc8\x9d\x7a\xfe\x6c\x95\xe1\xf6\x21\x2c\xd5\x8c\x72\xa5\x17\x22\x2a\x79\x48\xb8\xe0\x57\x73\xb1\x94\xf1\xc9\xc0\x29\x48\x36\x5f\x94\xf4\x40\x37\x69\xb6\x3b\x25\x92\x36\x76\x3d\xbb\xbe\xf3\x5e\x9b\x45\xf0\x89\x5f\xbe\xdf\xe7\x8a\x4a\x25\x2a\x3a\xa6\x93\x1f\xe0\x30\xde\x9e\xfc\xf3\xcd\xc8\x5e\x9b\x21\xcd\x70\x30\xbd\xee\x5a\xab\x2c\xd8\x1d\xde\x63\x77\x72\x72\xab\x7d\x09\xee\xea\x52\xb1\x52\x1e\x72\xda\xbe\xa2\xf7\xb5\x5d\x22\xb1\x5d\xe4\x67\xf2\x79\x0c\x5b\xc0\xb8\x19\x44\xd2\xea\x82\xe5\x74\x98\x61\xb2\x58\xbc\xa2\x8a\x74\x15\x97\x22\x27\xe5\x89\x12\x15\x99\xd2\xae\x3a\xc1\x69\xd0\xc7\xc9\x9d\x1e\x47\x5f\x75\xf3\x61\x7c\x46\x43\x9a\x5d\x57\x54\x2d\x2b\x3e\xa0\xa3\x42\xcc\x09\xe3\x13\x7f\xcd\x47\x53\xaa\x4e\x96\xa7\xf0\x79\x98\x61\x3b\x0d\xf9\xa6\xa2\x92\x72\x35\xa4\x23\xc5\xf2\x73\xaa\xb2\xc7\x6a\xc6\xa4\xae\x3d\x44\x7a\xc9\x28\x1b\x2d\x84\x54\x43\xb4\x58\x9e\x96\x2c\x0f\xcf\x86\xc2\x59\x5e\x17\x44\x91\xf1\xff\x9c\xfc\xf4\x7a\xa4\xc1\x14\x9f\xb2\xb3\x2b\x7d\x7d\x72\xc1\x15\xe5\xea\xdd\xd5\x82\x8e\xd1\xcf\x52\x70\xb4\x4a\xad\x01\xe9\xe6\x76\xf0\x01\x93\x03\x3a\x5f\xa8\x2b\x94\xad\x30\xe3\x17\xa4\x64\x85\x5e\x98\x5f\x57\x3d\xb7\x70\x4f\x51\x36\xca\x4b\x4a\xaa\x27\x65\xe9\x57\x16\x6d\x5e\xb6\x8a\xae\xa9\xe8\x71\x4d\xdd\xf7\x0e\xe8\x0a\x77\x90\xf2\x5c\x14\x8c\x4f\xd3\xb7\xf3\x76\x4f\x1e\x00\xed\xfd\xdc\x63\x39\x11\xbf\xd3\x7b\xac\x11\x8d\xc0\xb2\xf3\xfe\xee\xb0\xb3\x21\x12\x66\x93\xd0\x64\xa2\xae\x16\x54\x9c\x0d\xa0\xdd\xf5\x82\x48\x79\x29\xaa\x62\xcc\x31\x9d\x13\x56\x8e\xd9\x6a\x42\x75\x83\xdd\xe6\xa5\xe7\xd9\xcd\x4d\xeb\x23\xcb\x32\x7b\xdb\x12\x97\xd5\x5e\x4a\x94\xed\x84\x30\xe2\x47\x22\xe9\x77\x8f\x46\xe6\x3a\xd0\x21\x42\xa3\x5c\xf0\x9c\xa8\xa1\xc4\x68\xac\x2f\x27\xfc\x62\xd1\x2f\x9e\x65\x2b\x5a\x4a\x7a\xad\x57\x02\x0f\x07\xed\xd6\x2b\xe9\x37\x05\xba\xd2\x1b\xc5\x26\xd7\x4f\x96\x6a\x26\x2a\xf6\x8b\x41\xa5\x63\xf4\x23\x91\x2c\x1f\xa0\x7d\xb1\xda\x69\xbd\x9c\x4d\xaf\x1a\xe1\xeb\x19\x25\x05\xad\xe4\x98\xad\x7e\xd5\x77\x28\x7b\xbc\xc3\x73\x7a\x95\x97\x82\x9c\xaf\x7d\x87\x77\x79\x6d\xf7\x87\x33\xf8\x7d\xbe\xb5\xf3\x5c\x1f\xe9\x57\xf0\x12\x9b\x18\x45\x6d\x81\x51\xc4\x39\xe5\xd9\xe3\x76\x81\x79\x96\x5b\x61\x9a\xfa\x1a\xdc\x0b\xba\x31\x13\x08\xb0\x4d\x37\x5e\xd2\x4b\xb8\x17\xb4\x54\xd7\x81\xa3\x45\xd9\xa8\x14\x53\xb1\x54\xb7\xc1\x4e\x65\x41\xba\xe8\xfe\x3f\x30\xd3\xef\x02\x33\x2d\x25\xad\x38\x99\xd3\x3f\x90\xd3\x56\xc8\xc9\xde\xfc\x2f\x8a\xa1\x72\x31\x5f\x08\x4e\xb9\x92\x87\x44\x29\x92\xcf\x0e\x16\x62\x21\x0c\xab\xdd\xe6\x6b\xa0\x06\xad\xd6\xb4\xba\x33\xcb\xd7\xd9\xc0\x2e\x03\xe1\x6b\xca\x97\x73\x5a\x91\xd3\x52\x37\xc1\x53\xaa\xc6\x7e\xcc\x7a\xcb\x3c\x87\xbc\xca\xfa\xad\x5b\x09\x51\x2a\xb6\xd8\x72\xdd\xae\xd5\xef\x70\xdd\xf9\x52\x2a\xe1\x01\xf2\x81\xa4\x4a\x31\x3e\x6d\x30\xb4\x3f\xff\x7b\x49\xab\xab\x10\xf2\xce\xd9\x67\xc6\xe5\x21\x17\x8a\x9d\x31\x23\x92\x69\x16\xcd\x45\x41\xca\x35\x60\xbc\x0d\x89\xb1\xbc\x2f\x58\xcc\xac\x30\xe6\xa9\x5b\xa7\x83\xc8\x1e\x44\xd7\xd2\x12\x7c\xbd\x01\x12\x4f\x4b\x71\x4a\xca\x93\x8b\x3c\x5d\x01\x41\x39\xca\x30\x93\xcf\xec\x5a\xdf\x54\xe2\x82\x15\xb4\xb2\x2d\xf4\x76\x2f\x15\x2d\x86\x48\xef\xb1\x2b\x44\x38\x71\x70\x35\xd8\x08\x6b\x66\x93\xc9\xa4\x2e\xca\x05\x97\x8a\x70\x25\x51\x36\x7a\x12\x54\x1b\xb9\xe1\x57\x7a\x2e\xff\x6b\xe9\x8b\x2f\x34\x17\x37\xbc\x99\xcb\xcb\x67\x4f\xde\x7c\xa1\x79\xe8\xa1\xcd\x1c\x9e\x3e\x39\xf9\x42\x53\x78\xfa\xe4\x64\x95\x61\xb7\x21\xef\xab\xf2\x79\x55\x89\xe6\x24\x46\x86\x1c\x1b\x22\x47\x16\x3e\x35\xe2\xcb\xd1\xb2\xd2\x37\xcb\xb5\x7d\x4b\x49\x39\xdf\xa2\x75\xa5\xeb\x07\xed\x9f\x96\x8c\x72\xf5\xa2\xd8\xa2\x8b\xdc\x36\x09\x7a\x79\x63\x90\xd8\xff\xd2\xab\x2d\xba\x59\xb8\x36\x41\x3f\x4f\x8a\x39\xe3\xef\x25\xad\xb6\xe8\x87\xb8\x36\xcd\x7e\xde\x58\x42\x64\xdb\xbe\x5c\x3b\x94\x61\x57\xfc\x37\xc2\xca\x65\x45\xc7\x08\x61\x8d\x9b\x4d\x8f\x27\xb4\xba\xa0\xd5\x3f\x84\x54\x1d\x7d\xeb\x9a\xb6\x5f\xe9\xeb\xa2\xac\xd9\xc3\x1b\x51\x35\x7b\x48\xb4\xd5\xb5\x52\xf7\xf0\xd3\x88\xc9\xe7\x66\xbc\x80\x18\x48\x36\xce\x34\xa9\xa5\xab\xbf\x5e\xea\xc1\x86\x0b\x52\x49\xfa\x82\xab\x1e\x0d\x35\xc6\xf0\xb3\xfe\x91\xf1\xe2\xd9\xeb\xcd\x6b\x3e\x35\xf5\x50\xa3\xa5\xdb\xdc\x7e\xed\x83\xa3\xf0\xbd\xbc\x16\x7f\x63\xa5\x4a\x3c\xd9\xa0\xed\xb5\xa6\x3c\xa1\x1a\x9e\x56\x62\xb9\x80\xbf\x57\xb7\xd8\xc1\xba\x27\x94\x65\x7b\x7b\x1b\x6a\x07\x83\xa1\x78\xdb\x9e\x28\x55\xb1\xd3\xa5\xa2\xfa\xaa\xbe\xed\xb3\x81\xa4\xd1\x02\x75\xf5\xf6\x37\x56\x49\x65\xe8\xec\xed\xfa\xf4\xed\x3a\x7b\x7e\x49\x6e\xd5\xb1\x6b\xd6\xd9\xef\x73\x23\xb2\xda\xae\x53\xd3\x26\xd9\xe3\xdf\xf5\xa6\xbf\x32\x24\xd9\xda\x4b\x11\x1c\x0e\x26\x89\xc6\xa9\xeb\xb1\xbb\xd5\x81\x6f\xbc\x1f\xa9\x61\xeb\x8b\xf2\xa6\xa2\x17\x8c\x5e\x8e\xf9\xb2\x2c\x71\xdd\x0a\x7e\xe7\x44\x9a\x65\xbf\xaf\xba\x76\x2e\x27\x32\xc2\x11\xae\xc5\x5b\x5a\xb0\x8a\xe6\xaa\x4f\xcb\xaa\xae\x0b\x3d\x84\x53\x60\x9c\xa9\x61\x76\x6d\x56\xf6\x49\x2e\x17\xb4\x1a\x8e\x46\x23\x52\x4d\x97\x73\x4d\x39\x5a\xfe\x3f\x86\xa9\x93\xeb\x65\x55\x6a\xc0\x69\x30\x8f\xfe\xc3\xe1\x0f\xfd\xb7\x47\x02\xfa\x87\x87\xe4\xfe\x87\x87\x16\x08\xc1\x3b\xd6\x7f\x14\x4c\x6a\x5a\xf7\xa5\x11\x2c\x8c\x77\x8f\xb1\x25\xdb\xde\xd0\x6a\xce\xa4\x64\x82\x3f\x29\x8a\x93\x05\xc9\xe9\x78\xf7\x78\xb5\xc2\x05\x2b\xde\xd2\x9c\xb2\x0b\xaa\x6f\x8c\x5c\xb7\x80\x1d\xcd\xcc\xd1\x49\x17\x72\xc7\x2a\x8d\xdc\x77\xe4\x25\x53\xf9\x0c\x8e\x5c\xba\x23\xb7\xa7\x89\xf0\x35\x83\x73\xd0\xd4\xf9\x9c\x4a\xa9\xf9\x77\xf4\x9e\xeb\x45\x0c\x94\x18\xe4\x82\x73\xcd\x48\x6b\xd2\x35\xbb\xce\x89\xa4\x03\x95\xa6\xe2\xc6\xa7\x15\x25\xe7\x3b\xa9\x2a\x0e\xf3\x8d\xaf\x53\x4b\x80\xa3\x40\xd9\x8e\xbe\x9e\xef\x39\xd0\xd2\xc5\x90\x66\x37\x37\x80\x11\xca\xd2\xff\x80\xdb\x4b\xb3\xc7\x74\x72\xbd\x1a\x0f\x87\x74\x62\xe4\x50\x06\x5d\x0c\x69\x96\xd5\x88\x7b\x22\x9b\xfc\x77\x41\x0d\xff\x4d\xeb\x3a\x01\x39\xde\x3e\x9f\xc9\xee\x2e\x1d\xcd\x88\xfc\xe9\x92\x7b\xc2\x1e\x75\xd6\x46\xd9\xde\xde\x9a\xce\xf4\x40\xe1\xcd\x98\xa4\xfa\x0e\x2b\xa0\xec\xe6\xa6\xd1\xc6\xde\x60\x73\x84\xf1\x35\x46\x98\x66\x3b\x66\xfb\x57\xa9\xed\xd7\x34\xe5\x6f\xb0\xf5\xbf\x9f\x9d\xc4\x74\x44\xca\x52\x5c\xfe\x4d\x54\x73\xa9\xb7\x2a\x39\xc3\xb8\x0a\x4c\x2b\xfe\x16\x9e\x48\x0d\x11\x37\x9c\xc6\xd3\x27\x27\xbf\xc1\x61\x2c\xab\x72\xd2\x5e\x92\x01\xbd\x8f\xe9\xc8\x42\x3d\x1a\x42\xd4\x44\xf5\x08\xde\x3e\x8e\x6a\x8f\x11\x0a\x57\xef\x61\x71\xb0\xf8\xd5\x0a\x13\x83\xaf\xe4\xf8\x5a\x70\x07\x26\x86\x59\x6b\xf1\x21\xb0\xaa\xbb\x8c\x99\x1c\x9a\x06\x3a\xd9\x0a\x0b\xee\xc0\xcb\xfd\x74\xed\x7a\x33\x5d\xeb\xa7\x73\x3f\xdd\xea\x9e\x4c\x97\x4f\x9f\x9c\xdc\x4f\x8f\x4f\x9f\x9c\xf8\x39\x3e\xe7\x79\x75\xb5\x00\xe9\x84\x45\x21\x8d\x5b\x39\xa2\xbe\xca\xbb\xab\x05\xd5\xe7\xe4\x1a\x5b\x5c\x90\x98\x55\x70\xa9\xb3\x1d\x1a\xd0\xdd\x93\x2d\x08\xf4\x40\xf0\xee\x65\x13\x28\x1b\x2d\x60\x54\xb3\xc3\x34\x1b\xa9\x19\xe5\x43\x3a\xf9\xe1\xba\x03\x4f\x51\xdb\x8f\x91\xd3\xfc\xb4\xa0\x7c\x88\xbe\xd1\x15\x0e\x6c\x3f\x07\x56\x80\x73\x2d\x67\xe2\x12\x64\x2d\xa6\xbe\x11\xf9\x5c\x9d\x2c\xf3\x9c\x4a\x39\x44\x27\xe4\x82\x16\x28\x5b\x99\xc5\xeb\x1f\xeb\xcf\x02\xf3\x6e\x7c\x2b\xba\xde\x6f\x0b\xe1\x36\x38\x35\x84\xf5\xe3\xe1\x16\x9d\x76\xdc\xec\xb1\x98\x5c\xaf\x76\x02\x9c\xda\x71\x4d\xc7\xec\x2c\x38\x83\x26\xd7\x8e\xbc\xb4\xfa\x42\xb0\x62\x78\x84\x55\x6d\x75\x83\xbe\x71\xf3\x3a\x30\x70\x61\x74\x26\xf2\xa5\x04\xf9\x79\xbb\xc7\x9a\x97\xef\xd9\xa7\x65\xe6\xd7\xf7\x1a\x71\xf8\x3d\x3b\xae\x59\xfc\xf5\x7d\xc7\x7c\x7f\xcf\xce\x03\xc6\x7f\x7d\xef\xb1\x34\xa0\x67\xef\x86\x6e\x3c\x58\x1a\x79\x40\x8f\xee\x23\x21\xc1\x56\x43\x2c\x3c\x6f\xea\x86\xf9\x7e\x28\x26\x8e\xbe\x5e\x84\x0c\x40\x83\x94\xc8\x2c\xf2\x10\xfa\xdf\x91\xaa\xd8\x7c\x98\x61\x01\xa2\x99\x89\xfd\xbf\xfe\xec\xce\x62\x52\xff\x59\x17\xd6\xb4\x58\xf0\x77\x5d\x6c\x68\xe6\x49\x8c\xec\xec\xd7\xec\x31\x42\x63\xfb\x77\xdd\xc0\x93\xe0\x93\xe0\xef\x46\xb1\xdb\xb2\x49\xe3\x77\x5d\x6d\x0d\x99\x22\xb6\xa1\x52\x6e\x6e\xd6\xf4\xa5\xc7\x89\xa9\x94\x44\xdf\x4d\x2a\xa5\xd1\x06\x7f\x1a\x51\x5e\xc8\x7f\x31\x35\x1b\x9a\xd3\xc0\xe8\x50\x53\x21\xf0\xc3\x1e\x90\x5c\x9e\x82\x76\x68\x78\x84\xe1\x4b\x49\xf9\x54\xcd\x0e\x8e\x33\xa7\x5e\xd1\x20\x48\x60\x54\xdf\x6c\xdc\x22\x8d\xad\x6a\xaa\xeb\x52\x84\xe2\xb0\x2c\x5b\x03\x94\x0c\xa5\x19\xdd\xe7\x84\x44\x6a\xfd\x45\x36\x30\x7d\x66\xaa\xa5\x5f\x48\x42\x42\xd5\xa3\xc7\x85\xa9\x16\xf6\xd8\xf5\x1e\x42\x9c\x97\x65\x81\x74\x6c\x22\x82\x1f\xf5\x7d\xba\x25\x52\x0c\x78\x77\x11\x32\xea\x11\x9b\x2e\x92\x3c\xf9\xe6\xd5\xa6\x39\x79\xbf\xfa\xee\x03\xd4\xc4\x69\xb4\xdb\x01\x63\xbf\x7e\x97\x73\x22\xd7\xa1\x91\x04\xbb\xbf\xb9\x3f\x47\x6f\xc6\x1d\x77\x42\xb2\x9a\x08\xed\x04\x62\x35\xb5\x1b\xfd\xb2\x55\x9c\xba\x34\x44\xf4\x63\x8e\x6b\xe4\xde\xb4\x7a\x10\xd9\x6a\xa7\x1e\x1f\x08\x0a\x94\x0d\x99\x25\x67\x86\xd9\xe4\x87\x6b\x36\x0a\xbb\x9b\x4c\x26\x1d\x88\x7c\x6f\x2f\xea\xe9\x8a\xe7\xae\x04\x65\x43\xdb\xa1\xd2\xf4\xd1\xc8\x72\xec\x8f\xd7\x51\x18\x6a\x64\x99\x79\x63\x97\x21\x45\x49\x47\xa5\x98\x0e\x83\xcf\x8d\x79\x75\x90\x21\x78\xd3\xf2\x56\x59\x36\x6e\x2d\x31\x20\x8c\x40\x59\x35\x8a\x69\xa7\xc7\xe9\x39\x8d\xc3\xc1\x9e\xce\x08\x9f\xc2\x70\xab\xd6\x6c\x5b\xbb\xa8\x21\x4f\x7b\x07\xf5\xd7\x3f\x76\x6f\x13\x25\x1c\x6b\xdc\x93\x06\xd6\x49\x0d\xec\x29\xc9\xcf\x97\x8b\x03\x6b\xd6\x71\x5f\x2a\xd8\x5f\xd3\xe4\xa5\x43\xcd\x5a\x2b\x57\x45\x6f\x35\x6b\x25\x96\xb5\x9c\xbf\x55\x7a\x5a\x89\x4b\x49\xab\x6e\x2d\xac\xad\x80\x32\x0c\xbb\xf8\x92\x9c\xd2\x72\x8c\x7e\x34\x3f\x90\xfd\x78\x72\x25\x15\x9d\xdb\x22\xf8\x31\x68\xd4\x58\xd0\x1c\xc4\x9f\xf0\xfb\x6f\xac\xa4\x46\x26\x8e\x5c\x0d\x2b\xdc\x3b\x76\x0d\xe0\xf8\xeb\x0f\x6f\x97\x9c\x33\x3e\xd5\x1f\xec\x41\xd6\x7d\xda\x0f\x3f\x2e\x95\x12\xdc\x4e\xe3\xad\x3b\x6d\x5b\xf8\x7e\x51\x0a\x52\xbc\xa5\xa4\xb8\xd2\x7d\x18\x37\x86\x6a\x6e\x6b\x81\x44\xb4\xb7\x84\x33\x10\x28\xd4\xcb\x43\xf8\xba\xa2\x8a\x30\x3e\xde\x3d\xc2\xa2\x9a\x8e\xdb\xcf\x43\x54\xd3\x17\xe6\x2a\x07\x1d\x04\x8b\x41\xf8\x5a\x5c\xd0\xea\xb2\x62\x8a\xfe\x54\x4d\x75\x3f\x15\xcd\x2b\x4a\x40\x76\x2f\x03\x6e\x31\x6c\xaa\xf7\x12\x61\xbd\x11\x91\xa4\x23\x5a\x20\xb0\x72\xcd\x69\x03\x83\x7d\xfd\x8e\x72\xc2\x95\x1e\x0e\xce\x6e\xbc\x7b\xac\xf9\xce\x82\x15\x2f\xb8\xa4\x95\x7a\x5e\x52\xbd\xee\xb5\x3b\xd2\x44\x8b\x76\x6e\x07\x67\x7a\x72\xd9\x48\xf0\x21\xca\xe1\xa9\x87\xea\x01\x7d\xdb\xe9\xc4\xbc\x2f\x7d\xcd\xa7\xd4\x8d\xf5\xe3\xd5\x8b\xc2\x2f\xd0\x75\xa2\xff\x93\x1f\x8e\x3e\x8e\xf4\xcd\xf9\x3e\x1e\x51\xcf\x2c\x1b\x71\xfa\x59\x0d\xd1\x08\x9e\xbe\x69\x76\x50\xea\xeb\x80\xb2\xd1\x4c\xcd\x4b\xe3\x85\xb0\xc2\x85\x80\xcb\x39\x0c\x25\x10\xf1\xbd\x4c\xef\x97\xbd\x94\x08\xef\x1e\xb7\x0b\x35\x50\xa6\x45\xba\xcc\x5e\x5e\x84\x77\x8f\xda\xe2\xf1\xe0\x0a\x65\x11\x96\xb6\x4f\x28\x6b\x8b\x1d\x1a\x20\x52\x03\x8a\x92\x2a\x0d\x26\x5b\x43\x9b\xe7\x80\x30\x3a\x51\xa4\x52\xee\x55\xae\x5b\xda\x51\x62\x69\x7e\x57\xe8\xba\xb5\x1d\x67\x2b\x6c\xb0\x45\x30\x47\xf3\xac\x87\xc8\x6e\x4e\xf7\xf4\xde\x2e\x79\xf7\xe4\xfc\xd6\x26\xe6\x16\x0d\x9f\x45\xa2\xbc\xce\x53\xd6\x7b\xad\x1f\x23\xc2\x9d\x6f\xd4\x0e\x54\x5f\x15\x23\x87\x31\xcf\xa3\x47\xb7\xe8\xbf\x50\xba\x83\x99\xb8\xb4\x2f\xf2\x95\x46\x22\xae\x93\x50\x58\x64\x1f\xae\x43\x57\x2d\x79\x11\x6e\x55\x41\xa6\x6f\xdb\xef\x90\x66\xd7\xd4\x08\xad\x28\x57\xcf\xe0\x79\x0c\xe1\xd2\xf1\x58\x76\x14\x82\x07\x30\x46\x74\xfd\xed\x4e\x26\x43\x3e\xe1\x23\x25\x5e\x8a\x4b\x5a\x3d\x25\x92\x0e\xb3\xec\xe6\x06\xa1\xc9\x64\xc2\xd7\x52\xc3\xcd\x99\x8d\x48\x51\x3c\x2d\x89\xbe\xa5\x4c\x1e\x78\xa3\x3f\x4f\x7c\xaf\x07\x58\x9b\xbb\xaf\xe8\x5c\x5c\xd0\xc4\x08\x81\x14\xee\x69\x29\x24\xed\xdc\x59\xd8\x9b\x50\x48\x16\xc2\x55\xb3\x31\x5e\xac\x2d\x1c\x2b\xb0\xd3\x82\xc2\x01\xf2\x41\x18\xbd\x29\xa9\xe6\x5a\x2e\x09\x53\x78\x60\x6b\x0c\x2a\xb8\xaa\xa3\xd1\x08\xa5\x30\x40\x1a\xb8\xb8\xc9\xd4\xd0\xc5\xcc\x57\xb6\xe7\xdb\x82\x20\x92\x1a\x5e\x7f\xc4\xe4\xdf\x8d\x3c\xd3\xc8\x6a\x0c\x67\x2e\xf5\x35\x9d\xd4\xb7\xd4\x02\x1c\x7f\x1b\x86\x12\x8b\x90\xfc\xbb\x2d\xd0\xf1\x1d\xae\x5b\xee\x51\x38\x09\x20\x57\x50\x36\x52\x15\xe1\x92\x19\x31\xb0\x00\xb9\xa5\xb5\x82\x46\x5b\x41\x19\x18\xad\xf7\xac\x02\x48\xa3\x81\xc9\xd2\x10\x0d\xb1\xa8\xba\x4d\x4f\x74\x1d\x59\x8d\x97\x77\x8c\xa8\x76\xa0\x26\x74\xa4\x48\x35\xa5\xca\xe3\xb2\xf6\x45\x82\x66\x2a\xd1\x61\x3c\xe4\x51\x93\x20\xde\x64\x82\x5a\x13\xc4\x80\x89\x0f\x4a\x31\xdd\x96\x18\xfe\xf5\x7c\x22\x36\x92\xbc\xfd\xec\x09\xbb\x4a\x61\xc9\xa5\x98\x6a\x52\x6f\x93\x0a\x3e\x40\xd1\x98\x4f\xf6\x39\xbd\x1c\x3c\x23\x8a\xee\xd4\xa6\xd2\xe4\x67\xf2\x79\x08\x4a\xf9\x99\x52\x0b\x39\x3e\xf4\x7e\x60\x23\xf9\xf0\x80\x2e\x0f\x2e\xa9\x54\x07\xc7\x23\x32\x27\xbf\x08\x4e\x2e\xe5\x28\x17\xf3\x43\x4e\x2f\xe5\xa1\x5c\xce\xe7\xa4\xba\x32\x14\xc9\xe3\xfc\x74\x82\x6a\x5b\x6a\xac\x8c\x53\xc2\xdf\x9f\xbf\x43\xb8\x20\x8a\x80\x8f\x82\xae\x88\xb0\xb4\x14\xb1\x3f\x00\xa5\x01\x3d\x80\x4e\xb7\x38\x7d\x6f\x56\x11\x16\xec\xe1\x31\x90\xbc\x22\x53\xca\x69\x45\xca\x5b\x1b\xae\x7e\xc5\x17\x65\x3d\x47\x34\x27\x9f\xdf\x91\xa9\x1c\x3f\xc4\x60\xa7\xaf\xef\x8b\x62\xaa\xa4\x46\xd2\xd5\x61\xfa\x31\x17\x05\x2d\x47\x76\xcf\x46\xa6\x3a\xca\x9c\x99\x42\xff\x86\xb6\x01\x32\xdc\xfc\x05\xad\x34\xf4\x7e\xce\x8b\x85\x60\x5c\xf5\xef\xa5\xdd\x16\x65\x78\x46\xe4\x3b\x3d\xad\x17\x7c\xb1\x54\x49\x63\x3e\xc2\x8b\x21\xaa\x57\x8a\xb0\xfd\x01\x32\x7d\xdd\xc1\x2b\x98\xde\x86\x2e\xc2\x55\x23\xec\x7f\xd6\xdd\x3c\x6d\xcd\x6f\x43\x8f\x1d\x9b\x81\x70\xaa\xc4\x8e\x73\x3b\x6e\xce\x1e\x7e\x48\x17\x36\x4e\xc8\x56\xc8\xc2\x56\x70\x51\xba\x1b\xd9\xf2\x6c\x4b\x9e\x2a\x86\x42\x6d\x4a\x95\xd6\xa7\x2b\x12\xc5\x96\x90\xc5\x72\x52\x7b\x72\x70\x8c\x0e\x45\x35\x25\xdc\xba\x58\x1c\xd6\x8e\x1c\x02\xa3\x43\x8d\x60\x51\x86\xd9\xe4\x03\xfa\x06\x50\xdf\x81\xf9\x84\xa3\x9f\x83\x1f\x06\x05\xbb\x40\x1f\x77\xce\x44\x35\xd4\x6f\x92\x4c\x8e\xbe\x27\x7f\x7d\xf0\x3d\xd9\xdf\x07\x25\xa5\x9a\x18\x90\x59\x89\xc5\x2f\x82\xd3\x21\xfb\x40\x3e\xd6\x8e\x18\x2d\x27\x0f\x4a\x2a\x5a\x0d\xd0\x3e\x8d\xa9\x16\x8d\xf2\xdf\x89\x73\xca\x35\xc2\xd7\x90\x56\xe2\x39\x55\x33\x51\x8c\xd1\x42\x48\x85\xf0\x82\x54\x64\xfe\xda\x08\x11\xc0\x5f\xc0\x04\x23\xc0\x79\xc9\xf2\x73\x67\xc7\x3f\x27\x9f\x35\x3e\x95\xec\x17\x3a\xfe\xf6\xc8\x34\x29\x4b\x5a\x02\x26\x95\xe3\x63\x8b\xe1\x5f\x2d\x4b\xc5\x16\xba\xc9\x31\x26\x45\xf1\xd6\x10\x95\x2f\x19\x3f\x37\x02\x08\xb2\x54\xe2\x4d\x25\x34\xf4\xfd\xbf\x25\x35\xe0\x09\x03\x5b\xfe\x62\x4e\xa6\xf4\xdd\x6c\x39\x3f\xe5\x84\x95\xa6\xb2\xc6\x2d\xa1\xeb\x80\x39\x18\xcd\xfe\x4a\x47\xf0\x04\x85\x8e\x9d\xd7\xe5\xff\xd6\x5d\xe7\x96\xa8\x8a\x6a\xd1\x26\xe9\xf5\x52\x9f\x02\xcc\x9c\x06\xf2\x04\xdd\x0b\x35\xf7\xbf\x6e\x6d\x40\x2f\x8d\xc8\x24\xae\x41\x6b\xf8\x41\x19\xe1\x5a\xb6\xa3\x80\x4d\x6f\x4f\x41\xd3\x3f\x96\xd2\xd6\xbb\x09\x6c\x34\xbc\xd4\x6a\xc9\x47\x32\x9f\x51\x0d\xbe\x87\x88\x9c\x29\x5a\xbd\xa5\xdc\x98\x01\x18\x22\x0d\xee\xf0\x75\x4e\xf2\x19\xfd\x24\x97\x67\x67\xec\xf3\x18\x3d\xbe\x98\x7c\x7b\xfc\x10\x61\x49\x4b\x9a\x2b\x51\x8d\xd1\x37\xb4\x60\x4a\x54\x07\x0e\x02\xe2\x8a\x96\x44\xb1\x0b\xfa\x69\x59\xc1\xbe\x5a\x41\xd4\x27\xb9\xa0\x65\x99\xcf\x68\x7e\x6e\x8e\x41\x70\x45\x3f\xab\x39\xe5\x4b\x5d\x49\x2a\xa2\x96\xf2\x94\x54\x70\x12\x25\xe3\xe6\x48\x17\x44\x2a\xfa\x49\x23\xd4\x4f\x4c\x9f\x98\xd4\x4d\xe1\xaf\x4f\xb0\x8d\x9f\x66\x84\x17\x25\xad\xc6\x4d\xac\x65\xdd\xfb\xc6\xfa\x7a\x9e\x96\xe2\x74\x98\x8d\x34\x8e\xde\x47\xdf\x9f\x1a\x95\x14\x36\x05\xe6\xcf\xa1\x7e\xe0\xa6\xd7\x4f\xa4\xb8\x50\xe4\xd4\x8f\xf2\x29\x27\xc6\xa0\x01\x6c\xd7\x0a\x46\x3e\x95\x7a\x69\x74\x7e\x4a\x0b\x33\x17\x35\xa3\xfa\x1a\x4b\x06\x71\x38\xe4\xb9\xc6\x3b\xe2\x33\x2b\x34\xcb\xcd\x15\x53\x57\x9f\x9c\x83\xc7\x18\x55\xe4\x12\x61\xc0\x7a\xb4\xf8\x64\xd8\x9d\x4f\x14\xc0\x89\x1c\xa3\x53\xcc\xf0\xe9\xa1\x54\x95\xe0\x53\xcc\x0e\xe9\x1c\xe1\x33\xc1\x95\x7e\x01\x9f\xce\x44\x35\x27\xba\xd2\x5f\x16\x9f\x07\xc7\x47\xfa\x9f\x07\xfa\x9f\x47\xfa\x9f\xef\xf4\x3f\xba\xe0\x81\x2e\x78\xa0\x0b\x1e\xe8\x82\x07\xba\xe0\x81\x2e\x78\xa8\x0b\x1e\xea\x82\x87\xba\xe0\xa1\x2e\x78\xa8\x0b\x1e\xe9\x82\x47\xba\xe0\x91\x2e\x78\xa4\x0b\x1e\xe9\x82\x6f\x75\xc1\xb7\xba\xe0\x5b\x5d\xf0\xad\x2e\xf8\x56\x17\x7c\xa7\x0b\xfe\xac\xff\xf9\x8b\xfe\xe7\xbf\xcd\x5c\x8e\x8e\x16\x9f\xf5\x6c\x61\x92\xd7\xa7\xa2\x2c\xc6\xd7\xf6\x14\xd1\x29\x5a\x61\xa6\x48\xc9\xf2\xfa\x1b\x43\xab\x15\x5e\x94\xcb\x29\xe3\x72\xfc\x01\x91\xe2\xa2\x64\x52\x0d\xf4\x7b\x2d\x19\x3f\x37\x7f\x54\xe6\xf1\x0f\x74\x81\x1c\x98\xaf\xe6\x48\x06\xf9\x8c\x54\x73\xb2\x18\x2c\x2a\xc6\xd5\x60\x56\x0d\x16\x64\x4a\x8d\xc2\x09\x61\x24\x29\xa9\xf2\x59\x45\x17\x25\xc9\xe9\xe0\x52\x54\x45\x2e\x96\x5c\x0d\x2e\x98\x5c\x92\xf2\xb4\x14\xf9\xb9\xb4\x3f\x74\x3f\x9a\x24\x62\x06\xac\x17\x44\x51\xc5\xe6\x74\x60\x8e\x79\xc0\x05\x37\x5d\x32\x3e\x1d\x48\x72\x41\x07\xca\xd8\x2b\x82\x3e\x87\x09\x4e\x4a\x06\x98\x96\xce\x17\x25\x51\x74\x60\x6e\xea\x40\x5f\xe9\x05\x51\x8a\x56\x1c\x66\xab\x84\x28\x25\xfa\x88\xcd\x3d\xbf\x5e\x99\xff\xed\x2d\xd7\x45\xfa\xcf\x0f\xc8\x6e\x9c\x79\x53\x03\x77\xe6\xf6\xe7\xcd\x40\xef\xe6\x00\x36\x70\xb0\xd4\x0f\x54\x6f\xa1\x09\x17\x73\x4e\xd5\xac\x12\xcb\xe9\x6c\x60\x90\x90\xcc\x2b\xb6\x50\x03\xb9\x3c\xb5\x7f\x99\xe5\xfe\x7b\x29\x14\x1d\xdc\x0c\xce\x44\x45\x73\x51\x8a\x6a\xa0\x79\x2a\xf8\xcb\xec\xea\x52\x9f\x89\xde\x3b\xb1\x54\x05\xe5\x6a\xc0\xb8\xf9\xef\x74\x59\x9a\x43\xe1\xcb\xb9\xf9\xff\x66\x40\x4a\x36\xe5\x25\x3d\x53\xf0\x57\x4e\xb9\xa2\x15\xfc\x5d\xb1\xe9\xcc\x7e\xfe\x79\x29\x35\x84\x1a\xdc\xd8\x3d\x83\x77\x0a\x67\x07\xff\x9a\x2d\x46\x1f\x57\x3b\x68\xe9\xf4\xf2\xb5\x1f\xa5\x62\xfc\x6a\x9e\xd3\xc7\xb1\x13\xb2\x59\xd0\x10\x1d\xda\x52\xf7\xff\x68\xce\xf8\xe8\x67\xe9\xc0\x52\x00\x7a\x2f\x19\x2f\xc4\xe5\xc8\xd5\x2b\xc4\x7c\xf4\xfc\x42\x53\x9d\x85\x98\xbf\x34\xe0\x77\xa2\x9f\xaf\x2d\xd6\x70\xe0\xfd\xdb\x97\x13\x74\x78\x88\xf6\x6d\xd3\x52\xd8\xa8\x35\x33\x21\xd5\xbe\x1f\x1a\xf9\x46\x00\x14\x27\x48\x4f\xa2\xfe\x6a\x58\x14\x0d\x67\xc7\xad\x2f\x2b\x7c\xc9\xca\xf2\x19\xd5\x6f\xfc\xaa\x8f\x6c\xd6\xf5\xf0\xdc\xc0\xd8\x57\x84\x93\x29\xad\x46\xf4\x33\xcd\x9f\x8a\xf9\x1c\x88\xb6\x9c\x02\xd2\x83\x3a\x9a\xbd\xc4\xa8\x01\x93\x43\xb6\x02\x38\x8e\x61\x76\x0d\x8c\x2d\x9d\x34\x25\x35\x9e\x50\xfa\x70\xf4\x71\x04\x97\x90\x16\x3f\x19\x28\x68\x44\xb8\x86\xce\xdf\x49\x50\x5e\x5e\x37\x4d\x35\x38\x95\x91\xe5\x53\x72\x1d\x86\x68\x68\x4e\x15\xf3\x89\x21\x27\x9e\x82\xaf\x37\x68\x79\x9d\x8b\x6c\xd3\xb4\x3c\x49\xbd\x37\xdc\x67\xf5\x24\x0d\x25\x16\x52\xc5\x46\x76\xd1\x5c\xb9\x64\x8a\xbe\x83\x3e\x42\x15\x73\x3c\x38\xef\xec\x3e\xa2\x97\xcd\x00\xb4\xbb\x9b\xae\x35\xa4\x58\x80\xce\x11\xbb\x88\xe8\xe4\xea\x52\x3d\xfb\xf9\x35\x05\x69\x9b\x27\xb5\x13\xda\x8e\x58\xbb\x91\xe0\x52\x6c\x6a\x8f\x45\xc3\xb0\x24\x30\x2a\xe9\xea\x26\x45\xe3\xa7\xa8\xfa\x34\x6b\x86\x79\x5b\xfe\x96\xa6\xf6\x77\x43\x05\xa9\xfb\x18\x8b\x54\x77\xba\x46\x6b\x73\x14\xe9\x0e\x62\xf1\xdd\xfb\x85\x46\x3f\xb5\x1e\x19\xd4\xfa\xd6\xba\x21\xad\x55\xc5\x6b\x6f\xf7\x71\xbb\xbc\x71\x3d\x13\x35\xba\xaf\xd3\x71\x86\xa5\x85\x53\x7d\x64\x7d\x7a\xb9\x2b\x30\x80\x7c\xa7\xe9\x23\x50\x15\x7b\x61\x5c\xc8\xec\xa0\x4c\x4f\xc0\xd4\x1a\xd2\xee\x43\x34\x64\x96\xb3\x28\xb5\xb2\x71\x4d\x4b\x0f\xc3\x2e\xa3\x12\x94\x0d\x37\xa9\x08\x1a\x1b\xfb\x5e\x6a\x64\x6f\x5f\xcc\x00\x38\xaa\xd5\x6d\xa5\x30\x8c\x2b\x3a\xad\x0c\xfe\xe8\x90\xc4\xf4\x14\xc0\xdc\x5f\x78\xb0\x0e\xf1\x8b\xaa\xc5\x2f\xa2\x9a\x76\xeb\x93\x43\xee\x13\x6d\x8c\xd6\x70\x17\xaf\x93\x9f\x59\x45\x40\x7c\xbf\x1b\x5a\xa2\x83\xd9\x12\xec\x86\x31\x53\x1f\x52\xef\x5d\xe3\x43\x2d\x20\xcd\x9b\xe4\x15\x55\x63\x84\x22\x95\xab\xee\xf4\x69\x45\x0b\x59\xab\xc2\xd6\x89\xda\xdb\x36\xbb\xaa\xa2\x65\x29\xac\xf1\x7c\x63\x16\x64\xb1\x00\x27\x9e\x68\x48\x68\xe1\x07\x8d\xad\xd5\x3b\x2c\x83\x9b\x32\x00\xd5\xd8\x17\xd3\x1b\x38\x38\x85\x10\x58\xb5\x20\x70\x5c\x19\xab\x08\xdc\xaa\x16\xb8\x85\x07\x64\xce\x5f\x3f\x49\x72\x41\x7f\xaa\xa6\x27\x70\x71\xf5\x5d\x33\x67\x82\x13\x73\x41\x59\x4b\xdd\xb0\x5e\x85\xd1\x31\x1c\xd4\x72\x23\xa2\x93\xe7\x4f\xdf\xbd\xf8\xe9\xf5\xc1\xbb\xb7\xcf\x5f\xbe\xfc\x29\x1c\x39\xdc\xd5\x8e\x97\xdc\x65\x78\x92\x8c\x5d\x97\x7c\xbe\x25\xcb\x29\x97\xf4\xe0\x9c\x5e\xf5\x7c\xb5\x7d\x8d\x4d\x7e\x75\x71\xaa\xba\xb5\x47\x7f\x67\xe4\x15\xd8\x8c\x75\x8e\xc4\xb6\x0a\xca\xb0\xe7\x3e\x34\xd7\x6c\x6c\x3c\x16\x25\xe1\x4f\x4b\xb1\x2c\x0c\x43\x5f\x12\x7e\x42\xcb\x33\x4d\x53\x83\x35\xc7\x5c\x43\x81\x31\x7a\x2d\xd4\x4c\xc3\x5f\xc6\x07\x0b\x52\x29\x96\x2f\x4b\x52\x0d\x0e\x0e\x06\x9a\x9d\xd0\xdc\x95\x81\xce\x96\xdf\x19\x0d\xac\x9a\x2e\x2f\x85\xa4\x83\xf9\xd5\xc0\xd9\x43\x0d\x48\x6e\x18\xbe\xd1\x2d\xcc\x42\x02\x07\x02\x94\xd9\x90\x2f\x7e\x2d\xc3\xa4\x03\x41\xb8\x5a\x03\x58\xd0\x0b\x2e\x15\x29\x4b\xc3\xd1\x4c\xe8\x48\xaf\x37\x34\x04\xf3\x9b\xd1\x54\x3d\x85\x1b\x63\x08\xb8\x6c\xdc\xd1\xec\x68\x4d\xb3\xe3\x2c\x56\xa5\xeb\x97\xf5\x12\xce\x26\x42\x95\x7e\x95\x92\x2a\x57\x5e\x97\xfa\xd3\xdc\xa4\x49\x74\xb4\x48\x93\x63\xaa\xa8\xd1\xbe\x59\x27\x88\xb7\xf4\xdf\x4b\x2a\xd5\xd3\x52\xc8\x65\x45\x53\x9a\xf3\x82\xea\x19\x5f\x00\xba\xac\xa0\x7a\x52\x7d\xae\x8f\xfb\xc0\xde\x19\x64\x89\x01\xdb\x34\xee\xd8\x69\x8e\xd7\xf4\xdc\x46\x3c\xbe\xe3\x9d\xc4\x4e\x15\xf5\x40\xb4\xef\xbe\xac\x5f\xa8\xd5\x6a\xc3\x8f\x96\x73\x49\x0b\x7a\xf5\x27\x3e\x40\x08\x72\xa0\xf9\xf8\xcf\x5f\x3d\xd1\xb1\x01\x34\x9d\xc6\xa6\x61\xa7\x4b\x56\x16\xa8\xbe\xe0\x15\x35\xab\x8c\x6d\x3a\x22\x85\xfe\xdb\x96\xee\x1e\x0e\xeb\x05\x3f\x13\x43\x30\xae\x31\x42\x1e\xb3\x67\x83\x8a\xc2\xb6\x0d\x16\x20\x36\x8e\xf4\xec\x76\x30\x94\xad\x39\xf9\xb8\x1b\xdd\xb3\x17\xcb\xde\x05\x21\xc9\xb9\x5a\xfc\x27\xaa\xf4\x4e\x5e\xbd\x7b\xf3\x0f\x21\x41\x2f\xb4\x0e\xc3\x00\x3f\xa0\xb7\x61\x04\xb6\xfb\xa6\xe9\x1b\x51\x6d\xd5\x14\x8c\xf4\x4d\xd3\x13\x23\xec\xde\xa6\xb1\x04\xf1\x78\x86\xe1\x8f\xd7\x64\xbe\x16\x27\xb6\x5a\xbe\x86\x98\x00\x70\x3d\xdf\xd1\xcf\x6a\x6c\x00\xc5\x60\x6f\xf0\x8e\x6a\xe8\xad\xa8\x54\x7a\x66\x80\x36\x23\x18\xae\x3f\x47\x00\xbc\xbd\x6f\x28\x7b\xdc\x12\x68\xe8\x4b\x13\x7b\x3a\x8c\xe3\x2e\xe2\xfd\xeb\xea\x22\x76\x6d\x68\x74\xd1\xdc\xc7\xae\x4e\xdc\xee\x25\xba\x69\xec\xe7\xfa\x1e\x60\x17\x7d\x2f\x01\x92\x74\xfb\xa7\xa1\xa8\x33\x42\x0d\x5c\xce\x63\xe2\xbc\x3e\x85\xd8\xe8\xa7\x0b\x4e\x50\x5e\x18\x02\x84\x4a\x35\x80\xd0\x82\x4a\x0c\xae\xc4\x32\x02\x10\xee\xa8\x6a\x4e\x3e\x26\x17\xa2\x41\xc3\xb3\x8f\xd8\x06\xbf\x8c\x88\x21\x76\x9c\x01\x84\xf1\x5e\x56\xce\xac\x8e\x8e\xec\x62\x1f\x27\xe0\x11\x6d\xd8\x6e\x87\xca\xa3\xba\x6c\x95\xdd\x01\xd7\x2c\x48\x4e\xc1\x27\xec\x3f\xcd\x3e\xdb\x2c\xad\x9b\x21\x3e\x13\x25\x80\x83\x2d\x4c\xb1\x9d\xc1\x6c\x77\x5d\x57\x43\x83\x19\x3d\xbe\xb4\xe1\x30\x0c\x02\x6c\x86\xf7\x30\x20\x26\x12\x7b\x87\x9e\xa1\xb5\x88\x0b\x65\x96\xe1\xb3\x1e\xa1\xc7\x63\x90\x28\x22\x33\x84\x89\x39\xaf\x97\x1c\x7d\x95\x68\xb5\xca\x7a\xc6\xbc\xd0\xd4\xde\x33\xa2\xc8\x30\xdb\x2a\xde\x84\x35\xb4\xa4\x1a\x3b\x82\x83\xdc\x35\x33\xc1\x2e\x2c\x2b\xbf\x5a\xe1\xba\xe7\x90\xb7\xb4\x07\x83\xb2\xd1\xdc\xc8\x92\x3b\x88\x73\x58\x06\xa6\x4d\xf3\xd2\x93\x99\xb8\x8c\x4d\xc3\x82\x39\x8c\x58\x91\xf6\x05\x86\x9b\x0e\x35\x53\xc4\xa9\x2d\x81\x6a\x10\xff\x05\x08\x54\xfd\x39\xc1\xea\x07\x63\x5a\xb1\x37\x2b\xb0\x98\x50\x63\x24\x8d\x43\x31\xa5\x5d\x48\x36\x3a\x63\xbc\xf8\xf1\x6a\x88\xf4\x14\x79\x06\x85\x30\xd2\x8e\x98\x4c\x26\x72\x6f\x0f\xa1\xdd\xc9\x44\xd8\xff\xe5\xe3\x61\x0b\x90\xb6\x17\x91\xc1\x2a\x87\x68\xc6\x0a\x9a\x30\xdd\x5c\xd7\xa4\x60\x72\x21\x24\x8d\x81\x60\x7d\x3a\xd0\x68\xc8\x5b\xf4\x72\x72\xd3\x63\xc3\xed\xb0\xb4\x61\xd8\x5d\x5f\x8a\x24\xfb\x0f\x3b\x6e\x04\x00\xd9\xb8\xb9\x9a\xc4\x29\x6d\xb0\x74\xd5\x87\xf8\xdc\x80\x35\x7f\x88\x00\x1a\x20\x86\x8b\x51\x32\x7f\x1a\xcd\xc9\x62\xd8\x3e\x31\x8c\x8c\x45\xeb\x99\x71\xbc\x03\x9b\x30\x78\x72\xd6\xab\x2b\x44\x31\x30\x46\xc2\xd6\xd4\x8a\x91\x3d\xe4\x40\xd9\x08\xc0\x6c\xdb\xbc\x1c\xcc\xd2\x3d\x3c\xd2\x47\x20\x2e\xb9\xde\x2f\x50\xff\xd7\x20\xd7\x18\xb1\xa1\xf4\x06\xda\x99\xe4\xb5\x9d\x28\x30\x72\x3f\x5d\x72\x5a\xc5\x62\xdc\xe0\xb0\xa7\x15\xe1\xca\x54\xa9\xbd\x55\x37\xb3\x4a\x4f\x8a\x82\x16\x03\x22\x07\x42\xb7\x4c\xd0\xc8\xfd\x8d\x23\xe1\x4c\x0d\xa4\xec\x4b\x22\x7f\x21\x19\x4d\x40\x1f\x9b\xe9\xbe\xb6\xa2\x4b\xf3\xe3\xa9\x28\x8d\x61\xc5\x83\xef\x1e\x3e\x78\xf8\x17\x84\x69\xc1\x14\xf0\x3f\x06\x13\xc0\x05\x0e\x3e\x68\x10\x04\x57\xfe\x19\x23\xa5\x30\x8e\x36\x0d\x60\xf7\xa4\x28\x22\xab\x75\x08\x7e\xe0\x46\x6e\xbe\xbc\x7a\x16\x41\x49\x08\x09\x49\x51\xc0\x36\xa7\xc0\x60\x5d\x58\xc3\xc0\x13\x3f\x45\x98\x46\x02\xf6\x5a\x76\x2d\x22\x79\x9a\x2b\x43\x78\x37\xb8\x79\xcd\xc2\xcc\x0f\x05\xea\x94\xc4\x50\x7e\x2b\x1b\x03\x05\x5b\x41\x43\xa8\xda\xb5\x2b\xd4\xc9\x0b\x4a\xe3\x35\xdf\xde\x21\x3d\x50\xf7\x16\x05\xa5\xc1\x1e\x51\x65\x7a\x6f\x84\xd7\x08\x47\x35\xf5\x9e\x14\x45\x0d\x87\x0c\xa2\x0c\x04\x37\x7e\x1d\x99\xf3\x49\x35\x73\x6c\x56\x81\x0e\x5d\x9d\xd5\x0e\x02\x61\x95\xa9\xbb\xb7\x37\xb4\x7f\x4d\xfc\x1d\xcc\x70\x20\x88\x37\xd0\xb8\x4d\xa2\x37\xcf\x7d\x03\x54\x1d\xb7\x50\x53\xab\x83\x6d\x3c\x04\x9a\x57\x32\xd6\xaf\x3d\x29\x0a\xe3\x8c\x63\x36\x10\x6e\x47\x2a\x16\x49\x7b\xf7\x78\xb3\x38\xde\xb9\xc8\x7c\xaf\xbe\x5c\xa0\x23\xf0\x11\x74\x9a\x0b\x6d\x1d\xff\xd6\x5b\xd5\xee\x61\x9b\xbd\x6a\x5d\x4e\x70\x32\x77\xb7\x5e\x3f\x0d\xe1\x3c\x3b\xcc\xc5\xe3\x1d\xda\x4a\x11\xbe\x8f\xe0\x6d\x19\xcb\xf9\x3e\xc4\x8f\xdb\xae\x30\xaa\x68\xd7\xcb\x3f\x8e\x27\x01\xa5\xfa\x54\xe1\x0b\x2b\x1a\xa6\x9d\x21\x54\x01\x17\xbb\xdd\xa3\x5b\x73\x39\x4b\x49\xab\xad\x98\x1c\xb2\x54\xb3\x3e\x31\x80\xd7\xf0\x44\x10\x1e\xd8\x46\xe6\x4e\x05\x07\xc6\xec\xbe\x10\x15\xd9\x86\x2f\x92\x35\xf2\x3a\x5d\x96\xe7\xe0\xe0\xa8\x89\x76\x7a\x69\xa2\xd7\x6d\x11\x2b\x0f\x2e\x1d\xb4\x43\xf8\xfa\xcc\x47\x72\x34\xb8\xb0\xfe\x1b\x72\x7c\x20\xc0\x85\x10\x49\xee\x82\x41\x33\xc3\xe3\x1b\xa1\x2a\x2c\x30\x22\xf4\x35\x34\xd6\x95\x3a\x5d\xb6\x34\xd8\x30\x67\x9b\x80\xd2\x76\x5e\x41\x98\x48\x0b\x7e\xf5\xd7\x61\x76\x6d\xdd\x8b\x9a\xf6\x1c\xb6\xd9\xe8\xac\x6e\xb7\x36\x0c\x41\x7b\x98\x4d\x9e\x57\xec\xac\x05\x10\x12\x9d\x74\x43\x84\x75\xb3\x2e\xc9\x36\x93\xae\x23\x5d\xde\x7e\xce\x41\x1f\xb7\x9b\x32\x85\xc8\x98\xd9\xcd\xcd\x2e\xf3\x36\x63\xba\x3a\x61\xe5\x9a\xea\x3d\x96\x67\x63\x6e\x6e\x58\xdb\xf7\x1b\x5a\x77\xae\xaa\xa5\x7f\x70\x2f\x21\x76\x26\xb5\x37\x2e\xf0\x26\x6d\xf0\x51\xdb\x3c\xa0\xe0\xa5\x24\x49\x7f\x20\xc7\x21\x7e\xd0\xaa\x0b\xd1\x06\x2f\x26\x7c\x13\x9a\xd7\x4f\x1d\x94\x87\x12\x28\x6b\x23\xc3\xa0\x70\x6b\x34\x18\xb6\xdd\x80\x00\xe3\xbd\x94\x91\x75\x48\x38\xbf\xe4\x06\xd7\x15\x6a\x7a\xb8\x73\xdf\x64\xcf\x8d\x6b\xf2\x39\x64\x3b\x64\x64\x02\xba\xf4\x65\x73\xd6\x62\xa3\xaf\x45\xdc\x66\x56\xb4\x26\xaa\xbc\x2e\x46\x99\x31\xf5\xe8\xae\x05\x37\x57\xe3\x22\x13\x98\xc6\x72\x48\x46\x29\x03\x12\x77\xb0\x15\xb1\x52\xb5\xb9\x89\x5b\x63\x7f\xe8\xef\x2f\xd9\x9c\xa9\xf1\x83\x6f\xb7\x97\x62\x69\x1e\xdb\x0c\x29\x87\x35\x72\xb3\xf6\x48\x46\x88\x10\x56\x08\x35\xb1\x76\xd5\xa0\x71\x36\x49\x2b\x52\xb2\x2c\x77\xdc\x20\xcb\x8a\xba\x8e\x21\x81\x19\x02\xe1\x6b\xf7\xf2\x17\xcb\x6a\x21\x24\x88\xbf\x83\x49\x18\x91\x43\x9b\x2c\xb3\x1b\x62\xaa\x8c\x58\xd3\x00\xa5\xde\xc7\x58\x45\x1a\x2d\x21\x08\x08\x24\x3b\xc2\xee\xd9\x51\x1a\x96\x38\x4b\x2f\xb3\x98\x13\x95\xcf\x00\xa2\xa8\x46\x05\x73\x40\xfe\x9d\x2a\xeb\xa7\xe0\xf4\x8c\x4f\x86\x1f\x3e\x66\x3b\x6a\x74\x26\xaa\xe7\x24\x9f\xf9\x72\x31\xa1\x5e\x76\xa6\x7b\x79\x51\x20\xac\x02\xba\xb1\x11\x10\x53\x64\x7b\x7b\x7c\xb4\x58\xca\x99\xb5\xf3\x51\x71\xe4\x07\x78\xe6\x98\x67\xab\x94\x64\xf1\x49\x01\x5b\xbc\x96\xe8\x30\x7b\xd6\x41\x75\xd8\xc2\x88\xe6\x30\x3d\xf6\xf4\x10\xf7\xb7\x20\xe4\x43\x78\x07\xdb\xd6\x1c\x6f\x23\x10\x4e\x9e\x3b\x29\x8a\x84\x94\x2f\xbc\xf2\x9d\x30\x31\xdc\x89\xd4\xcb\xe9\x2b\x40\x68\x5e\x7c\x56\x8c\xe9\x2a\xa9\x82\x37\x02\xc0\xce\x03\x88\xca\x9b\x62\xdc\x6d\x8e\x21\x9c\x56\xcc\x29\xda\xc7\xdc\x90\xe7\x8e\x58\x91\x38\xb0\x9b\x1b\x11\x4a\x24\x76\x27\x13\x28\x68\x1d\x64\x62\xde\xb7\x3b\x4b\x27\xb4\xd5\xf3\xd9\xfa\x44\x13\xbb\xdb\xe6\xca\x12\x47\xa5\xc1\x93\x3f\xe9\xe7\x05\x53\x1d\xd2\x1b\xdb\x74\xc3\x5e\xd2\x4e\x99\x4c\xe7\xb1\x07\xa5\xf5\xa1\x3f\x77\x23\xf6\x3c\xf2\x7a\x86\xf1\x49\x86\x22\xa5\xb4\x38\xe0\xee\xc7\xb6\x04\xb1\xc6\x2d\x5e\x61\x6b\x63\x9a\x6c\xbd\xdd\xf4\x9a\xad\x87\x68\x18\x9a\xe0\x02\x40\x9f\x38\xac\x10\x93\xdc\xee\xbc\x60\x46\x40\xd7\x1d\x40\x77\x5d\x21\x58\x63\xac\x12\x04\xd4\x69\xe0\x3b\x37\xf7\x27\x45\xf1\xab\x4f\x5c\xc3\xb6\x8e\x59\xe3\x76\x1d\x79\x00\xc8\x15\xa5\xf0\x4c\x23\x40\x50\x80\x86\x63\x9d\x48\x73\xa5\xa6\xde\x30\xbb\xae\x1d\xfe\x0a\x7a\x2a\x96\x3c\x07\x63\x2f\xdc\x74\x76\x6c\xf5\xf1\xe8\xdb\x23\x88\xe1\x4b\xc9\x45\x0d\xfb\xc0\x51\x74\x0d\xd1\x90\xa6\x0d\x4a\xdd\xc9\x50\xe1\x36\x17\xd3\x18\xb7\x4d\x50\x81\xfa\xe1\x7f\x04\xe3\x77\x9d\xc4\xcf\x82\xf1\xbb\xcc\xc1\xd0\x1f\xf1\x85\xa9\xc9\x12\x4f\xcf\x34\x37\xf2\xb6\x1a\x0d\x43\xe9\x97\x4c\xaa\x3f\xa4\x4e\x72\x6b\x46\x41\x43\xae\x5a\x20\x05\x98\xa7\xfe\x0d\x2a\x39\x8d\x7d\x66\x44\x9e\x58\x37\x27\x2b\x50\x3a\x4e\xea\x54\xf4\xb7\x37\xb4\x9a\x3f\xff\xbc\x28\x4d\xb0\xb0\xe3\x9e\x52\x2e\x17\x2a\x77\x72\xbd\x72\xaf\x38\x18\x6e\xf2\xe1\xe3\x2d\x94\xe6\xb7\xe5\x1d\x5a\x32\x07\xcb\xb2\xee\x50\x4f\x34\xeb\xc6\xd4\xc1\x42\xaf\xeb\xd0\x4f\x2a\x8a\x1c\xe8\x0c\xbc\x43\xaf\x6f\x97\xc2\xaf\x30\x79\x63\x46\x20\x93\xa5\x0e\x6a\xc1\xa2\x6d\xbc\xa7\x36\x98\xa3\xd9\xca\x9e\x8a\x13\x26\x84\x9c\xbb\x4b\x32\x12\x20\xbf\x33\x9f\x68\x26\x24\xc1\xa1\xe2\x53\xe7\xe6\xd6\x05\xfb\x4c\x37\xc1\x70\xf8\xa1\x81\x75\x4a\x4c\xa7\x25\xd5\xc7\x1c\x73\x56\x8d\xc3\x6f\x69\xa2\xc2\x32\x2f\x87\x8e\xbf\x37\x11\xff\x68\xa1\x47\x41\x99\xa9\x37\x6c\x69\xaa\x7d\xf1\x8c\x15\x74\xe8\xa7\x06\x57\x15\xe8\x91\xe6\xbe\x7a\x3f\x7c\xfb\x25\x83\xe3\x8e\x59\xb8\xe0\xea\x99\x63\x6f\x34\x79\xac\x0c\xe3\x13\x89\xd5\xc7\x6a\xf2\xc9\xa5\x7f\x54\x38\x0c\x63\xe2\x04\xf7\x46\x7d\xe4\x1b\xac\x62\x6c\x15\x8e\x18\x87\xc7\x69\x3e\x3d\xe4\x3d\x13\x7e\xa8\x0f\xe3\x89\x11\x59\x35\x60\xbe\xb9\x33\x0d\x54\xbc\xa3\xac\xa5\x94\x69\xa0\x8f\xc8\xfa\x54\xc0\xef\x86\xcf\x95\x0d\x96\xa9\xfc\x38\xe0\x9c\xb8\xc5\x38\xd4\x79\x5c\xaa\xd0\x95\x71\xe3\x38\xc6\x13\x62\x9b\xe5\x80\xda\xc1\xaf\xc6\x3a\xa8\x6c\x18\x84\x93\xf2\x4a\xb1\x5c\x6e\x33\x90\x6b\x13\x0c\xe6\x3f\x6d\x1a\x10\xde\x6c\xff\xc1\xbc\xfc\xbe\x1e\xac\xfe\xd4\x3d\x58\xcd\x20\xb8\xb1\x78\xf7\x58\xba\xbd\xc5\x4e\x8c\x4a\xf8\x8a\x20\xfe\x83\xfe\xab\xa2\x17\x4c\x9a\xbf\x6a\x59\x3d\x46\x5e\x02\x8e\x11\x88\x8a\x31\xd2\x60\x9e\x91\x52\xa3\x5e\x77\xb7\xfc\xe1\xbb\xe3\x09\x17\x84\xac\x13\x42\x9c\x6a\xc1\xe1\xa3\x5a\x9f\x06\x16\xfc\x2e\x90\x3a\xae\x73\xc7\x22\x84\x43\xe3\x70\xb0\x5d\x4c\xf2\x0d\xa1\x44\x11\x82\x55\xcc\xc4\xe5\xe8\xd4\x12\xa4\x71\x24\x88\x7e\x71\x1f\x92\xc3\x04\xca\x0c\x6f\x16\x93\xf5\x9a\x53\xcb\x50\xa8\x6f\x93\xc0\x12\x7e\x9d\xd2\xd6\xef\x6a\xac\xac\xad\xc3\xd3\xef\x44\x7a\x1a\x5a\xeb\x65\xb2\x6c\xe3\x52\x37\x28\x35\x68\x29\xe9\xa0\xd1\xbd\xbb\x3e\x1d\xbd\x97\xbd\x35\x26\xae\xf3\xd0\x07\xce\x66\xd5\xde\xdb\x6b\x2b\x3a\x5c\x99\xd1\x4b\xf5\x3e\x96\x0e\x93\xaf\x1e\xc7\x98\x78\x9f\x34\x8a\x39\xce\x3d\xdd\x93\xed\xed\x45\xdf\xc3\xab\x0d\x92\x36\x47\x20\x4d\x26\x8d\xd2\x88\x04\xa8\xd3\xe1\x0d\x29\x0e\xba\x5f\x99\x3c\xc6\xc9\x35\xd0\x5e\x1a\x9c\x58\xc2\x94\x12\x2e\xc1\xbb\xed\x04\x34\x1b\x8c\x56\x8e\x62\x5d\xf8\x36\xda\xee\x14\x0a\xfd\xf0\x71\x3d\x0e\xed\x54\x95\x37\x65\x53\xef\x6b\x22\x2d\xa5\xd3\xb0\x76\x74\x56\x1b\x84\x35\xe3\x1a\xee\xd3\x8f\xcb\xf2\x3c\x2d\xde\x74\x29\x28\xba\x8c\x25\xcd\x76\xe8\xe6\x7e\x4b\x3a\x09\x94\x88\x2a\x4d\xeb\xff\xd7\x92\x1b\xbd\xf7\xaa\x63\xed\xae\x3b\xa7\xda\x49\x0a\x31\xd3\xeb\xf5\xd7\x0a\x38\x48\x2f\x6a\x68\x92\x64\x4b\xb7\xd2\x06\x9e\x4c\x2e\x49\x13\x50\x4e\xec\x14\xcb\x25\x92\x12\xc6\x1d\x11\x6d\xa0\x0d\xf1\xe4\x87\x32\xd5\x5e\x14\x11\x91\x0f\x69\x78\xf4\x0f\x69\xc3\xfa\xc3\xab\xae\xc5\xe3\x2a\x8b\xb7\xdc\xf1\x17\xa2\x53\x16\xd2\x25\xbd\xd9\x2c\x5b\x08\xd7\x9e\x64\xeb\xdb\x3b\xd7\x9a\xfd\x31\xe8\x8f\xdb\x09\xaf\xc2\x25\xdd\xdc\xac\x11\x5a\x50\xac\x5a\x02\x83\x88\x55\xe9\x21\xa0\xb8\x8f\x95\x1c\xdd\x61\x25\x46\xf2\xd1\x73\x21\x61\x6e\x80\x06\x1f\xd6\x4c\x1b\xe0\xaa\xdb\x3c\x56\xcd\xaa\x2e\x3e\x7e\x7f\xd9\x49\x3c\x9d\xed\x74\xa4\xce\x48\xf6\x90\x14\xc5\x81\x84\x48\x3d\xff\x69\x5e\x09\xde\x10\x18\xe4\x1d\x3d\xdc\x08\x60\x1f\xd6\xd7\x77\x9b\x95\x61\x08\xab\xde\xe1\xae\xc5\xe9\xe5\x09\xd4\x74\x26\xab\xf1\x97\x57\xcc\xf8\xe9\x76\x78\x44\xc5\x75\xf5\x58\x06\x10\x1c\x63\xb3\xc3\x2f\x8a\x31\x68\x84\xec\x5c\x1c\xb8\xc8\x89\x91\xc3\xb7\x9c\x1f\x16\xde\xca\xd8\x7b\x36\xea\xbd\x5b\x54\x42\xb9\x93\x5f\x97\xb8\x3a\xd5\x20\x0e\xfd\x11\xe6\xaf\x7e\xe3\x2b\xbd\xbb\x5a\xd0\xd1\x4b\x91\x47\xe9\x34\x82\xb9\x8c\x5c\xc7\x7a\xd2\x86\x17\x9e\x11\xf9\xa3\x09\x3c\xd5\x5a\x02\xc4\xa3\x5a\x3f\x4f\xa8\x63\xd9\x62\x94\xfd\xa0\xaf\x91\xe0\x06\x9b\xbc\x33\x9c\x97\xed\x55\x9c\x42\xfa\x17\x20\x27\xa2\x3e\x5b\x5a\x5e\xd8\x6e\xd4\xc8\xa0\x62\xda\x65\x2d\x8c\x4e\x5b\xfa\x49\x77\x40\xd6\xf5\xa0\xe6\xc2\x1a\xa6\x30\x54\xb3\x24\xd4\x50\x99\x05\xe5\x1d\x5c\x09\xaf\x69\x20\x17\x0a\xdc\x90\xbe\x4d\x44\x4b\x9b\x64\x2a\x5d\x4f\xc5\xd2\x36\xd1\xba\xca\x30\x29\x0a\x7b\x05\x3d\x20\x0a\xc6\x48\x6c\x91\x13\xa1\x1c\x61\x3e\x39\x8e\x70\xec\x29\x3d\x13\x15\x7d\x03\x51\x8b\x64\x47\x76\x37\x16\xf1\x24\x53\x2a\x61\xd3\x99\x35\x29\xf5\x87\xea\x0e\xc9\x15\x10\xa9\x00\xb8\x68\x3c\x31\x79\xf0\x5f\xb4\xee\x62\x24\xe9\xbf\x97\x94\xe7\x41\xb0\x24\x5b\x50\xd2\x0b\xaa\xe9\x0e\xcb\x92\x58\xe5\xb5\xc8\xb2\x6b\x3e\x11\x6e\x44\x53\xc5\x8a\x01\x3f\x19\x84\xf3\xc2\x78\xd0\xb6\xe6\x19\x9d\x92\xbd\x96\xe1\x68\x56\x22\x28\x42\xb9\x8f\x5e\xdb\xc1\xf1\xee\x64\x12\x33\xe7\x61\xb7\x1f\xe8\xc1\xf1\xc7\x1d\xd5\x48\xcb\xc5\xb3\xc7\xc2\xe1\x49\xb7\xba\xc3\x07\xe3\x61\xeb\xe3\x3e\x4f\xee\x44\x76\xf8\x60\xb5\xf2\x93\xb4\x85\x61\x43\xac\x34\xf4\xad\x0b\x60\x23\x62\xd3\xd6\x24\x48\x98\x4c\x26\xb2\xf9\xfc\xdf\x9a\x84\x80\x7b\x7b\xd1\x48\x26\x82\x21\xc2\xd6\x96\xda\x14\x58\xaf\x61\x08\x88\xa8\x6f\xd3\x63\x39\x02\xc9\xe4\x89\x22\x8a\x8e\xde\x80\x57\xe1\x6b\x7a\x39\x4e\x16\xc4\x74\x3c\xc4\x1f\x3d\x71\x13\xd3\x94\x6f\x28\xf8\x8c\x8a\x87\x89\x03\x68\x82\xdf\x98\x33\xe6\x9b\x2c\xe2\x1a\xcf\xbe\x33\x76\x94\x0b\xf0\x0e\x82\x96\xb7\x34\x17\x55\x01\xe7\x65\xe8\x51\x19\xee\xb4\x31\xc4\x68\xef\x3f\xf0\x24\xb6\x2e\x84\xf5\xd2\x27\xe5\xad\x92\x4d\x68\x30\x9b\x64\xd2\xbf\x39\xff\xad\x6e\xaa\x07\x8d\xaa\xf9\x0f\x99\x0b\x06\x75\xad\x3f\x8d\x05\x9e\x53\x45\xc6\xd7\xf5\xbc\xc6\x1d\xd3\xc2\x15\xb9\xfc\x51\x14\x57\x5e\x46\x33\x35\x8e\x6a\x01\xb9\xde\xd8\xe6\x5a\x45\x17\xc0\x1e\x99\x14\xd4\x2b\x61\x70\x06\xf6\xd8\xd8\xdc\x3d\x73\x93\xdc\xc4\x1f\x6b\xa4\x6b\xa9\x34\x38\x70\x83\x5a\xfe\xf3\x8e\xbb\x0e\x7d\x6b\x8f\xce\x47\x77\x73\x15\x4f\x45\x71\xe5\x0f\xd6\xfc\xc8\xee\xf9\x8a\xf8\x91\xf4\x16\xb7\xd8\xa4\x3b\xde\x1f\x07\x1d\xe0\x27\x44\x8e\xd6\xb7\xa9\x9e\xad\xc9\x33\x66\xe2\x85\x56\x9c\x94\x27\x62\x59\xe5\xd4\x15\xc7\x5f\x51\x76\xa7\x1b\xb8\xb5\xcf\x95\xa7\xb3\xcd\xce\x1c\x38\x59\x68\x4d\x68\x7f\x8c\x90\xc7\xfd\x90\xc9\xaa\x8b\x4c\xbe\x5e\x4b\xb2\xb6\x55\x6b\x4d\x72\x68\xdd\x0d\x8e\xed\xdf\x3a\x2b\x42\x28\x33\xcf\x39\x47\xd7\xdc\xec\x51\xac\x0b\x83\xe8\x4e\xad\x3a\x3e\x3c\x19\x6d\x3f\x1b\x54\x2c\xe7\x73\x7d\x4d\x68\xe2\x86\x37\x3b\x6a\x5c\x75\xda\xbc\xea\xcd\xfa\xe1\x9d\xa7\xd1\x33\x6c\xd6\x74\xaf\xd0\x55\x83\x47\xd8\xac\xe5\x5e\xa3\xad\xe4\xee\x78\xab\x9e\xbf\xfc\xbe\x2a\xfd\x9c\xd3\x6a\xa1\xda\x55\x5d\x41\x96\x61\x55\x2f\x27\xb5\x8b\x56\xa0\xd5\x6f\xa7\xd5\x9a\x9d\x56\xfd\x67\xaf\xfc\xa1\x98\x0c\xd5\x89\xf3\x80\xa4\x81\xae\x62\xe3\xf9\x26\x56\x1b\x3f\xef\x58\x61\x30\x6d\xe6\xf3\xd1\xc0\xa7\xa1\x5a\x83\x37\x09\xc7\xed\xf0\xc9\x21\xda\x5f\x7b\x53\xf6\xd1\xa1\xba\x5a\x50\xf7\x9e\x63\xf2\xe2\x29\xe1\x39\x2d\x1b\x2c\x3e\x7c\x74\x0c\xfe\x93\x20\x80\x4c\x58\xeb\x89\xa7\x58\x4c\x96\x83\x08\xd4\xa8\xbe\xa0\xc6\xce\xf4\xa0\x64\xfc\x9c\x56\x9b\xb8\xfa\xc8\x8c\xe1\x2b\x62\xe9\x03\x46\x5e\x2f\xa4\x3b\xe4\x16\x3f\x7f\xed\xe3\xd9\x95\x70\x7c\x60\xb8\xa0\xc8\xe9\xb1\x13\x62\x9a\x08\xd4\xe4\xf4\x41\xfd\xfb\x58\xff\x7e\x18\xfe\xd6\x8c\x95\x05\xfa\x6d\x06\x34\xec\x6c\x3d\x1b\x1a\xd5\xd4\x9c\x94\xee\xf7\x89\x8f\xde\x9e\xec\xfa\x41\xef\xae\x1f\xb4\xba\x06\xe3\xa5\x54\xaf\x0f\x7b\xf7\xfa\xb0\xd5\xeb\x6b\xaa\x2e\x45\x75\x9e\xea\xf6\x51\xef\x6e\x1f\x45\xdd\x72\xe8\xf2\xa5\x8d\x7d\xa5\x4f\xec\x9c\x5e\x5d\x8a\xaa\x90\xd6\xba\xe4\x15\x51\xf9\x8c\xb6\x77\x68\x0e\xdf\xd7\xb3\xea\xb6\x8e\xf7\x91\xa3\x5e\xbe\xe0\x64\x02\x37\x37\x40\x1e\x86\xbf\xeb\xb0\xfa\xee\xeb\x2a\xf3\x52\x96\x96\x20\x85\x34\x92\xbb\xd9\x30\x10\xdf\xc4\x4f\x0e\xe4\x31\x07\x21\x0c\xf1\x7c\xa0\xdd\x5e\x23\x95\xe8\x6f\x18\x63\x17\x37\xf1\x64\x93\x1c\x7f\xf8\x88\xcd\x5a\xf4\x1f\xc1\x22\xc6\x1f\x3e\xae\xb6\xb2\x92\x69\xd9\xb9\x44\x32\x8f\x86\xf1\xc6\x2b\xeb\x91\x11\x10\xc4\x09\xf1\x43\x60\x4b\x11\xa9\x1a\x21\x0e\x08\x10\x77\x62\xd2\x45\xf6\xc9\x49\x62\xdb\x02\x11\xb0\x89\xc1\x6d\x34\xd6\x4f\x09\x2f\x58\x41\x14\x95\x43\x63\x70\x65\x09\xb5\x38\xa6\x3f\xa0\x1b\x5f\x13\xf0\x41\xa0\xe4\x80\xf7\x6e\x45\xf7\x26\x03\x96\xbd\x24\x99\xe3\x5a\xdd\xc5\x08\xdb\x05\xef\x39\x6e\x1a\x1c\x85\xe9\xa0\x7d\xbf\x32\x67\x50\x1f\x0e\x9f\xdd\xdc\xd4\x5f\xc3\xce\xb3\x9b\x9b\xa1\x1d\x36\x06\x41\x46\x1f\xe3\x0b\x1e\x74\x15\x04\x30\xc0\xc4\xc3\xf3\x05\x8f\xa2\x16\x59\xdb\x00\x9c\xb6\x8c\x47\xa1\x8c\xff\x83\x15\x74\x48\x71\xc3\xf5\xa7\xbe\x1e\x2e\x4d\x9d\xb9\x84\xbc\x30\x2e\x80\xdd\xf7\x3b\x11\x7d\x39\x7c\x4a\x16\x68\xb8\x80\x79\xeb\xfc\x97\xb6\x0f\x1a\xde\x31\xf9\x96\xea\x2a\x25\xed\x5a\xe1\x33\xaa\x8c\xd1\x68\xf3\x01\x39\xa0\xe6\x69\xe2\xd8\xc9\x39\x20\x46\x1c\x58\xeb\xf7\xac\xc3\x40\x50\xf6\x11\x80\x81\x6b\xf0\x0e\x68\xf7\x1b\xf0\xa3\xb5\xa3\xbc\x6c\x32\x7f\x05\x75\x83\x5e\x2e\xfe\xb3\x31\xfe\x92\x54\x9d\x38\x64\x9b\x52\xe1\x04\xef\x2d\xb6\x36\xa8\xa1\x74\x53\x6b\xe7\xe2\x42\x2a\xfb\xe6\x42\xcf\x94\x20\xfe\x32\x0e\xcc\xb8\x34\xc0\x30\x22\x24\x56\x98\xfb\x1b\x3d\xb6\xed\xdb\xf3\x00\x61\xdc\xa6\xf5\x6d\xe7\xcd\xef\x36\x6f\x4d\x4f\xc6\x24\x67\xea\x3d\x7a\x29\xc8\x4b\xc6\xcf\x53\xac\x9d\x3f\x84\x86\xac\x3b\x46\xe3\xed\xa3\x6e\x60\xf5\xb4\xc7\x7f\x00\xf9\x77\xe8\xe4\xda\xa6\x34\x31\x41\x61\x36\xcb\x01\x5c\x08\x19\x81\x59\x31\xf6\x9a\x9e\xd1\x9c\x9c\xd3\x17\xc5\xf0\xf8\x3b\x20\x02\x21\x66\x8c\x9d\x0d\xc2\x90\x83\x0e\x02\xcf\x38\x1e\x41\x8f\x01\x89\xae\xc6\x6a\xb5\xaa\x81\xb6\x7d\x93\x89\xe5\xee\xed\x6d\x0d\x9e\x36\xb8\x24\xb4\xc5\x94\x2f\xcd\x53\x1e\x42\xcc\x8a\x77\xe4\xb4\xb6\x5b\x0c\xe4\x5d\x11\xe8\x3f\xd6\x87\x1f\x05\x42\x8b\x10\xc0\x83\x44\x71\x80\x06\x1e\x26\x8a\x03\x64\xf0\xc8\x14\xdf\x56\xcc\xe1\xfe\xf8\xe2\x92\x8e\x0e\x0a\xa8\x1f\xc7\x67\xc8\x8e\xdf\x0f\xc3\xe7\x37\x1d\xb8\xdb\x75\x61\x4c\x53\xec\xdc\x6f\x19\xc3\x34\xd7\x4f\x43\xf3\x6b\x72\xfc\x01\x45\xf3\x3e\xb8\xac\xc8\x62\x61\xd4\xca\x5c\xf0\x03\x93\xb3\x86\x9c\x96\x14\x7d\xdc\x18\x41\x7d\x7b\x3d\xaf\x51\x40\x6e\xd2\xf3\x9a\x4a\x28\xc3\x39\x51\x74\x2a\xaa\xab\xf5\xf5\x5d\x2d\xb4\x29\xfb\x9e\x83\xe3\x4f\xa1\x01\xf3\xfc\x8e\xf1\xc9\xc4\x8a\x4c\x7f\x89\x3e\x2c\xa5\x33\xd2\x6e\x32\x46\x23\x2e\x20\x26\x25\x08\xb9\x2a\x76\xba\x54\xa2\x7a\x25\xa7\x28\xc3\x4b\x4e\xa4\x64\x53\x4e\xdb\x5c\x4c\x7b\x02\x08\x23\x3d\x6c\x8a\x9f\x3b\x6a\x98\xb2\xb7\x9a\xba\x80\x79\x7b\x7b\x71\x55\xd3\x61\x56\xf3\x54\xb7\xf2\x13\x76\xee\xc0\xd1\xdb\x6a\x9c\x07\xf0\x02\xcf\xec\xf1\xd6\x33\x1b\x76\xc9\xcf\x93\x11\xf0\x12\x7b\x12\x78\x01\x7c\xf8\xe8\x83\xec\x07\x06\x24\xed\xfe\x15\xa4\xd8\x08\x15\xde\x8d\x32\x67\xb5\x7d\xdc\xc6\xa4\xcd\x9a\x72\x51\x32\x35\x44\xdf\x40\x00\x7b\x43\x13\x44\x26\xe5\xb5\x05\xb8\xe1\x54\x62\x27\xdc\x55\x08\xdf\xf5\xd1\xba\x2b\x45\x1b\x5e\x00\xc6\x42\x38\xdc\xde\x6e\x0d\x7d\xb8\xac\x8e\xc4\x16\x7e\x0d\x3e\x02\xaf\x77\x0f\xb4\x5b\x7b\xf5\x6b\x0e\x86\xaf\x8d\x7c\xeb\x0d\xa9\xc8\x5c\x8e\xaf\x15\x39\x1d\xd7\x0f\xd3\x26\xda\x00\x54\xf7\x4f\xc8\xdf\x91\xb4\x3f\x82\x40\x83\x3b\xbd\xc7\x8f\x5c\xa4\xdd\xdf\xb2\x5c\x1a\xa5\xc4\xa8\xa6\x70\x52\x1a\x1d\xa8\xb6\x6d\xb8\xe3\x36\xe8\x07\xd1\xc4\x17\xc3\xb6\xbf\xb2\xa9\x0d\x05\x3f\x57\x93\xe9\x4e\xff\xfd\x86\x4c\x29\x08\xf9\x4c\x89\x46\x0e\xf0\xeb\xf3\x82\xf0\x02\xc4\x7d\x6d\x80\xe3\xe8\xda\x0d\xce\x42\x4c\x5a\x1e\x52\x53\x80\xa1\x8d\x98\x2f\x60\x7c\xea\x85\x20\x2d\xf9\x49\x4a\x66\x91\x74\xfd\xf1\x77\x5c\x53\x90\x67\xa5\xb8\x1c\x86\xb3\xb0\x2a\xce\x4c\x93\x63\xfd\x0c\x68\x7c\x52\x0b\x5e\x68\xd2\x02\x3e\x86\x82\x6e\xbb\x39\x20\xb0\xe0\x79\xb9\x2c\x22\x28\x09\xe5\x46\xad\xae\xb7\x5c\xc3\x89\x7a\x66\x0d\xf2\xc9\x18\x73\xe0\x78\xd1\xb1\xf0\xdd\x1d\x4c\x94\x84\xc8\x28\x7f\xb2\x56\x7a\x0f\xdd\x1b\x50\x22\x89\x1c\xee\xce\x42\x64\x67\xb3\xf9\x01\xef\x32\x3f\x68\xd8\x6c\x8c\xac\x09\x02\xb4\x89\xcc\x09\x96\xa7\x25\x93\x33\x5a\x68\x90\x0a\x4a\x8d\xda\x28\x01\x27\x0e\x39\x6b\x7e\xec\xee\xda\x9b\x30\x24\xfb\x46\x89\xed\x13\x05\x6d\x1b\x29\xbb\x0d\x73\x44\x23\xae\x3f\x3d\x91\x5e\xc7\x9d\x6a\x61\x8b\x3d\xb3\xf1\x54\x2c\xae\x60\xeb\x1b\xa4\xab\xfd\x1e\x19\x42\xfb\x15\xdb\xe8\x7a\xaf\x84\x3b\xb7\xb8\xb1\xfb\xbe\xb6\x31\x18\x0d\xbb\xe6\x4d\x00\x6c\x55\xe2\x56\x0b\x1f\x99\xd3\x06\x6f\x8e\x9b\x18\xb8\x11\xe4\x05\xd6\x2e\xd2\x82\xe3\x7c\xc6\xca\xa2\xa2\x7c\x4c\x57\x51\xb0\xa0\x7a\x0a\x28\x1b\x72\x8f\xa5\x22\xec\xe4\x0f\xc1\x48\xe1\x9a\x4f\xb3\x11\x0c\x32\x38\xb1\xa3\x2c\xe0\xca\xc3\x5e\xdb\x47\x7b\x67\x9a\xdf\x26\x47\xfc\x95\xfd\x5e\x53\xfe\xad\xf7\x85\x56\xd8\x66\x15\x10\x4f\x79\xb7\xae\x55\x66\xf7\x0d\x49\x6d\x21\x73\x57\x37\x1b\x58\x8f\x05\xe3\x35\x85\xdd\xce\xc8\xf0\x6b\x85\xbb\x36\x41\x05\x2e\x98\x4c\x6a\xaa\x6e\x63\xed\xb9\xbb\xdb\x03\x57\x0d\x53\xb5\x02\x57\xb4\x08\xcc\x76\x81\xe8\x24\x68\x6f\x82\xed\xd7\x82\xd3\x9b\x9b\xdd\x4d\xdd\xf5\xb5\x41\x05\x2c\x70\x73\xb3\xbb\x1e\x8b\x3e\x59\x2c\x2a\x61\xdc\x1f\x33\xaf\xb6\xcb\x15\xbb\x60\xad\xa4\xe4\x8d\x4d\x5e\xa7\x05\xf3\x99\xac\x0b\xb6\x79\x0f\x8a\x65\xae\x46\xcf\xb9\xa2\xd5\xa2\x62\xd2\xf8\x59\x32\xc1\x3b\x76\xfe\x16\xe7\xb3\xdb\xb1\x03\xe6\xb1\xfc\x93\xd1\x4b\x04\x4b\x9f\x11\xf9\xce\xe6\x5c\x5d\x7f\xbb\xa2\x9b\x68\x7f\xbb\x3d\x4b\x5d\xb3\xa6\x3e\xa9\x6e\xab\x67\x17\x97\xf9\x7e\x32\x0d\x7d\xa3\xa6\xc9\xd3\x2b\x8a\x46\x27\xa9\x5a\xce\x19\x06\xba\x5c\x73\x4c\xeb\xee\x56\xfa\x98\x36\xde\x2f\x20\xc8\xb2\x9b\x1b\x80\x7d\x66\xa7\x8b\xe5\xa2\x34\x27\xe8\x74\xd8\x3d\x1d\xe5\x19\x37\x44\xc5\xe4\x9a\xc9\x37\x00\x83\x76\x8f\x35\x34\x02\x81\x27\xa7\x97\xb6\x3f\xe7\x47\x4f\x2e\xe8\x3b\x9b\x80\x77\xe2\xa3\xc9\x14\xb4\x4e\x40\x65\x62\xc8\xdf\x45\x6d\x58\xc3\xa7\x00\xcd\x02\x7c\x44\xd9\x88\x49\xc7\xa0\xc3\x74\x23\xaf\xe9\x3a\x44\x55\x8d\x24\xdd\x0a\x47\x66\x51\x0d\x93\x0d\x5f\xe8\x56\xaf\x71\xb1\x3e\xb1\x64\x25\xbb\x1b\xcd\x88\xc5\xb1\x33\x54\xb0\x41\x36\x88\x7a\x02\xf8\xb4\x63\x1d\x47\xed\x82\xfd\x4c\x36\xaf\x2d\x73\xb6\x55\x55\xb5\x42\x67\xb9\x31\x3b\x43\x67\xd5\xf4\x81\xad\xd9\x15\x42\xcb\x97\x37\x82\x50\xbb\x8b\xb9\x79\x04\x7f\x87\x93\x41\xa2\x7c\x61\x77\x90\xeb\xb5\x9d\xaf\x71\x8c\x7b\x16\x3d\xea\x74\x56\xab\x64\x3f\x0d\xaf\xbf\x06\x6c\xa8\xdd\x1c\xdf\x54\x8c\x2b\x37\xc7\x14\x9f\xd7\x19\x0f\xc2\x88\x2f\x23\xd5\xeb\xaa\x69\x99\x24\xd3\xc9\x13\x6a\x8e\x5e\x77\x91\x5e\xf8\x9b\xba\xf7\x20\x28\x4d\x7a\xe1\x61\x37\x4d\x66\xa5\xe9\x36\x08\x64\x75\xd3\x74\xdd\xa4\x5a\x98\xb6\x57\xd5\x8e\xe7\xa9\x9b\x1c\x78\x73\x54\x9e\x85\xda\x90\x58\xa8\xdb\xd6\xfb\x9a\xb6\x06\x11\x55\x7d\xbb\x10\x7b\x7b\x2d\x07\xde\xf6\x14\x22\x7d\xf1\xad\x67\xb1\xae\x17\x7d\xb6\x36\xb1\x9b\xf9\x0a\x17\xe8\x3d\x5f\x30\x1e\x0b\xbb\x1c\x34\x5c\xea\xa2\x17\x8a\xce\x87\x51\x61\x08\xf0\x3a\x02\x6c\x26\x20\x5f\x23\x3b\x5e\x03\x6e\x7a\x1e\xc5\x04\xe4\xfa\x71\x29\x47\x0b\x60\x71\x4d\x55\xe0\x4f\x9d\x99\xf4\x1b\x56\x1b\xd6\x5c\x2f\x18\x1f\x27\x66\xe7\x80\x69\xb6\x8d\xe6\xae\x21\x5b\x03\x43\x98\x9d\x16\xad\xe4\xf7\xc7\xed\x4e\x3a\x28\x62\x6a\x0f\x8e\xd6\xed\x41\x3b\xf0\xf5\x86\xcd\x70\x1e\xbc\x01\x70\x4f\xa9\x4c\x5b\x38\x23\xd6\x75\x77\xe2\x86\xa6\xa7\x7d\xdb\x03\x3e\x01\x98\xfb\x78\xc1\x5f\xc7\x5e\xf0\xde\x72\xbd\x4f\xf7\xdd\x61\x61\xd7\xb6\xd6\xeb\xda\x1c\x54\xb6\x0b\xc7\xa2\xee\x0a\x11\x32\x45\x09\x3f\x7a\x57\x13\x9c\xdc\x93\x21\xf6\x3a\x70\xa0\x3e\xdf\x54\x2c\xe2\xd6\xaa\x36\x38\xc3\x1b\x1c\xe4\xf0\x5b\x2a\x74\x7b\x48\xdc\x25\xf2\xf4\x76\x9c\x4e\x13\x65\xf6\xda\xdc\x78\xac\xd6\x86\xf9\x69\x42\xf4\x81\x75\x88\xb2\x81\xcd\x93\x9b\xd5\x9a\xe2\xed\x13\xc3\xa4\x64\xe2\x50\xa4\x61\x0c\x51\x64\xfc\xe1\x63\x94\x16\xc6\x13\x9a\xab\x1d\x3a\xd2\x15\x20\x0c\x4f\x97\xb6\x27\x41\x88\xdd\x31\x33\x4c\xa7\x14\x7f\x1f\x6d\xce\x15\x93\x4c\xb7\xcb\xb6\x95\xfa\xc8\x44\xac\xb3\xa4\xa8\xe7\xcb\x69\x7a\xd7\x2b\x41\xb7\x92\x77\x14\x22\xb7\x91\x87\xcd\xcd\xb0\x61\xca\x6e\x15\x08\x2c\xbe\x02\x10\x0b\xec\xc7\x2b\x93\x3b\xa9\x99\x94\xa8\x5b\x59\xa8\xe7\x53\x13\x6f\xb5\x4a\x7b\xf2\x01\x15\x2c\x8f\x89\xff\x90\x75\x7c\x91\x0b\x3e\x7a\x52\x55\xe2\xf2\x64\x4e\xca\xf2\x99\xb8\xe4\x1f\x9b\xa6\x58\x66\x26\x76\x2d\xb0\x85\x0d\xa5\x93\x33\xa5\x81\x94\xa5\x30\x29\x3b\xdd\xf0\x97\xbe\x91\xb7\xd6\x2a\x19\x2a\x68\x46\x49\x61\x6c\xc2\xef\xc7\x2b\xbc\x65\x72\xae\x44\xfe\x65\xc4\x8a\xf7\xe5\x2c\x4e\xaa\x7c\xb6\x49\x81\x65\x23\x55\xae\x7f\x0c\x9b\xec\x1b\x0c\x5f\xf2\xd4\xc9\xb1\x77\x8f\xb1\xf1\x48\x78\x67\xa4\xdd\x08\xc1\xaf\xe7\xc0\x5b\xea\xdf\x60\xfa\x74\x52\x3f\x15\xf8\xf0\xcc\xbf\x22\xff\x1b\x7e\x0a\xfe\xbf\x60\xb1\x08\x04\x50\xcb\x4b\xba\x10\x39\x58\x08\xda\xc8\x72\xa1\x5c\x67\xad\xc5\x20\x2c\x5f\x8f\x0b\x66\x83\x19\x36\xee\xed\x1d\x06\xeb\x7e\x98\xb7\x54\x2e\x4b\x95\x94\xab\xc5\x26\x06\xcd\x16\xde\xf5\x7b\x95\x6d\xe9\x0b\x8f\xb0\x63\xc9\xd6\x58\x98\x87\xde\xca\x91\xba\x22\xe8\xb2\x41\x01\xa6\x45\x75\x3b\x4e\xe8\xda\x74\x25\x0e\x7c\xd7\xf7\xf6\xf8\xde\x9e\x8a\x81\x56\x5b\x31\xde\x25\x16\xa5\x29\x37\xfc\xac\x77\x96\x42\x09\xb2\x25\x80\x4b\x9a\xc7\x31\xfa\xd6\xdd\x63\xbc\x5c\x3c\x63\x52\x7f\x00\x0d\xab\xb8\xe4\xe1\x6f\x0d\x93\xb8\x0a\xbf\x88\xa5\x6a\x7e\x02\x67\xa4\xad\xe5\x4d\x01\xc9\xf2\x82\x2f\x96\xea\x6f\x86\xb2\x40\xdf\x58\x02\xde\xe8\xbf\xd7\xd9\xdd\x63\xf4\x0d\xb8\xe0\x19\xbd\x50\xba\x4e\x4d\x4f\x19\xf6\x21\xa5\xbf\x02\xb3\x66\x30\xdc\xeb\x21\xb7\xe9\x56\x0e\x63\x35\x69\xe6\x02\xd7\x67\x28\x72\x51\xee\xa3\xc3\xc8\x1a\xcd\xc9\x26\xc9\x62\xf1\x0f\x93\xa2\x36\x28\xf3\x96\x09\x53\xca\x69\xa5\x27\x1d\x90\x3f\x80\x22\x62\x93\x88\x7c\x59\x55\x94\x1b\xfd\xed\x8b\x62\x4c\x57\x2b\x77\x63\xb1\x98\x70\x7a\x39\x78\x5a\xb2\xc5\xa9\x20\x55\xf1\x3f\x27\x8e\x1d\xce\xc5\xe2\xca\xd8\x3b\x1e\xa0\x7d\x8a\xaf\x8d\xe5\x66\xfb\x69\xf2\x26\xbd\xf3\x92\xf1\xf3\x41\x2e\x16\x8c\x16\x03\x25\x06\xb9\xeb\x58\xaf\x5d\xe3\xa5\x1a\x9f\xea\x22\x84\xc5\xd6\x52\xb1\x76\x5a\x72\xdd\x51\x33\x46\x3d\xcd\x6e\x6e\x0c\x3b\xa1\x7b\x1d\x5a\xe3\x65\x05\xd9\xc9\x93\xaa\x47\x78\xc5\xe0\xf1\xdf\x11\xc5\xb1\x71\x98\x93\xc9\x84\xae\x32\x2c\x26\x5e\x3b\xa5\x2b\xd8\x4b\x84\x79\xa4\x22\x0f\xa4\xa3\x16\x46\x19\xed\xa2\x18\xc5\xaf\x6d\xb2\x7b\x8c\xc5\xa8\x7e\x6f\x13\x31\x0a\x9f\xdb\x44\x8c\xe2\xd7\x36\x11\xa3\xc6\x63\x9b\xc4\x4c\xb1\x79\xd3\xb0\xcb\x0d\x59\xa2\x75\x42\xf8\x17\xfb\x85\x54\x45\x4b\x77\xdc\xac\xe0\xb5\xc7\x56\xaf\x99\xba\xe1\xc0\xeb\xb4\xdc\x84\x3b\x45\xea\xb6\xc6\xe8\x1d\x39\xcd\x12\x77\xbb\xd3\xea\xc7\x59\x8d\x07\xfc\x3d\xf0\xc1\xe1\x0a\x60\x8b\x1d\xbb\x56\x2b\x9e\xb3\x44\x94\xac\x96\xe2\x3a\xc6\xbd\x71\x06\xbb\x46\x24\xf7\x4d\x10\xa8\x96\x2a\x02\xc8\xea\x94\x7d\xf6\x06\x69\xa1\x9c\x75\x33\x70\x4b\x19\x0a\x74\x1d\x1f\xe6\x93\x66\x97\xc1\x26\xc7\xc1\x3d\x3c\x2d\xd2\x94\x6b\x88\x35\x8e\xf3\xbc\x8b\x65\xb4\xce\xe2\x6e\x74\xcd\x88\x37\x06\x67\xcd\xc1\x9f\x3b\xb1\xfa\x0e\x9b\xb0\x51\x45\x17\xa5\xa6\xa1\x0f\xff\xff\xfc\x70\x6a\xf8\xe0\x7a\x46\xac\x19\x53\x5e\x76\x4d\x23\xc1\x96\x46\xe6\x86\x6f\xac\x2b\x73\x17\xdb\x89\xdb\xfa\x0d\x62\x05\xac\x55\x8a\xf7\x0d\x5d\xa3\x02\xc3\xe3\x71\xca\x23\x1f\xbb\x17\x35\x6e\xbd\x30\x6b\x02\x21\xf0\x69\xe0\x38\x0f\x3e\xc6\xd8\x6a\x1f\xc6\xcc\x3b\xd6\x13\xfb\xce\x9a\x8e\xf5\xc4\x0f\x9a\x74\xac\x27\xce\x5c\xa8\xe1\x58\xbf\xd3\x94\xd0\xc4\x36\x27\x55\x08\x8d\x82\x5b\xd3\x10\x02\x45\x47\x6a\xca\x5a\x37\xa7\xaf\xa8\x4a\x6e\x97\xed\xaf\xef\xbb\x0b\xf9\xc9\x8a\x9e\x55\x54\xce\x0c\x7c\xf1\x0f\xfc\xa9\x58\x5c\x35\xb2\x88\x82\x49\x16\x88\xce\x21\x91\x31\x6e\x1e\x7e\x32\x3d\xa6\xc1\xbd\xfd\x01\x81\x9f\xc2\x2b\x71\x41\xef\x69\x0a\x26\xab\xc0\x96\x53\xf0\x96\x45\x6d\x00\xe3\x99\x0f\x8b\xa8\xad\x0b\x86\x33\xb0\x89\x4e\xa4\xd7\xea\x63\x41\x57\x60\xbb\xd4\x16\xfb\x36\x8f\x2c\x36\x64\xba\xdb\x5c\x7b\x6d\x53\x3c\xd7\xc0\x54\xaa\xe7\x5c\x83\xd3\x6b\x3a\x88\x78\x9e\xaf\x91\x2c\x28\x09\xbe\x02\xa9\xc7\x26\x45\x6c\xcd\x3c\xda\xc8\x40\xbe\x7a\xc4\x8b\x05\x00\xec\x71\xa2\x71\x4a\x1f\x6a\xe2\x65\x07\x36\xcc\xe9\x66\x1f\x8e\x3e\x66\xa1\xe1\xee\x33\x91\xa7\x96\x6e\x2a\x6b\xc2\x44\xef\xf5\xfb\x45\x32\x78\x85\x11\x7f\x02\x65\x52\x13\x56\xa1\x81\xe7\x9d\xac\x4c\x5e\x0b\x4e\x43\xfb\xb4\xfb\x21\x2b\x47\xc0\x2f\xad\x9a\x54\x2d\xd7\xb7\x90\x4f\x1a\xb4\x25\x84\x9c\xa9\xa9\x50\x7d\x29\xdf\x2f\x6c\xae\x66\xbd\x72\x51\x47\x0d\x6f\x44\x8c\x9d\xd2\x13\x1b\x01\xca\xe9\x41\x86\x6e\x70\x4d\x34\xc2\xc6\x3e\x13\x97\x1c\x0c\x69\x77\x13\x64\x6c\x97\x45\xac\xdd\x79\xfc\xb5\xec\x88\x59\xc5\xbd\xed\xc9\x0b\x43\x87\xff\xbe\x77\x05\x78\x89\x9e\x7b\xf2\x92\x5e\xd0\x72\xcd\x86\xfc\x04\x7c\xc8\xef\x7b\x47\x2c\x33\x75\x0f\x5b\x62\x54\x1f\x84\x17\xb1\x0d\x68\x6d\x8b\x5d\xf7\xe5\x3f\x36\xf0\x04\xb4\xef\x30\xa8\x4d\x36\x77\x38\xd8\x3a\x7b\x06\xac\x76\xc8\xfe\xa7\x0d\x9a\xdb\xba\x89\x9d\x5e\x42\x63\x17\x05\xab\x76\x66\xed\xe3\x8a\xb6\x85\xcd\xe9\xaf\x9e\x6c\x5e\x25\xec\x4d\xaf\x37\x08\x67\x37\xd8\x8f\x86\x8e\x0b\x4e\x8d\xf4\x7f\x4b\x5a\x99\xa8\x68\xcb\x85\xfe\xd9\x27\xce\x44\x07\x93\x6d\xc3\x4f\x18\xaa\x03\x3a\x0b\xcd\x16\x9c\x7f\x31\x94\x40\x1e\x7c\xf4\xde\xfc\x18\x44\xf1\x0b\xb6\x37\xfb\x42\x28\xe1\xdc\x00\xf1\x0c\x96\x15\x7d\x27\xce\x35\xaf\xfc\x98\x4e\xd0\x63\x69\xbe\x4c\x42\x6a\xa8\xce\x87\x12\x54\x1e\x6f\x94\x9a\xee\xed\x0d\x75\x87\x4a\xd7\x4f\xf6\xa7\xeb\xdb\xde\x22\xcd\x68\xb8\xed\x40\x23\xf4\x8a\x4c\x50\x2f\x35\x8e\xfd\xf9\x3b\x5b\x6d\x04\x60\xbc\x3d\xbb\x03\xc1\x67\xa2\x1a\x82\x6b\xcf\xd1\xf7\xea\xaf\x0f\xbe\x57\xfb\xfb\x09\x3d\xf6\x2f\x82\x53\xb4\xaf\x1a\x44\x70\x5b\xcc\x36\x0c\xe4\x6c\xe1\x9c\x6c\x7b\x97\x17\xad\x76\xf2\xd8\x36\x0c\x48\xc4\xfc\x7b\x9b\x4d\x5e\x2c\x04\x33\x4a\x19\x32\xa9\xa3\xe1\x31\x8c\x6a\x7d\xe9\x21\xca\xdc\x77\x81\xd1\x61\xe0\x70\xff\x58\x77\x3e\xa9\x8b\x65\x86\xab\x30\xe6\xb8\x7d\xa3\x28\xc3\xe5\xe4\x03\xfa\x06\xed\x57\xd8\xfc\xbb\x8f\x06\x3f\x0c\x0a\x76\x81\x3e\xfa\x4d\xcc\x27\x47\xdf\xe7\x7f\x7d\xf0\x7d\x5e\x6f\x22\xa7\x97\x83\x67\x95\x58\xe8\x1d\x18\x96\x1f\xf2\x8f\xf8\x7a\x46\xf5\x33\x95\xe3\xeb\x27\x4b\x35\x13\x15\xfb\xc5\x46\xc3\xf9\x91\x92\x8a\x56\x03\xe4\xe2\x76\x26\x0e\x7a\x85\x97\x55\x39\x26\x78\x4e\xd5\x4c\x14\x63\xb4\x10\x52\x21\xbc\x20\x15\x99\x83\xbd\x67\x08\x7b\xf3\x92\xe5\xe7\x9a\xc4\x1d\xef\x1e\xe1\x39\xf9\xfc\x37\x56\x52\xc9\x7e\xa1\xe3\x07\xdf\x1e\x99\x36\x65\x49\x4b\x00\x07\x72\xfc\xad\x85\x12\xaf\x96\xa5\x62\x8b\xd2\xc0\x2b\x52\x14\x90\xba\x4e\x63\x11\x93\xec\x89\x2c\x95\x78\x53\x89\x9c\x4a\xf9\x7f\x4b\x6a\x80\xac\xd1\x28\x8c\x9b\xf9\xd1\x4c\x7e\x0d\x10\x04\x47\x70\xcc\x19\xc1\xe9\xf2\x7f\xeb\x1e\x34\xcc\x33\x56\x77\x61\xad\x96\x28\x19\x66\x49\x8b\xc1\x19\x33\x56\x5b\xdc\x61\xc6\x1a\x8c\x41\x15\xe0\xc3\xeb\x31\x48\x51\xd0\xc2\x34\xea\x9a\x05\xad\x2a\x11\xaa\xb4\x8c\x96\xdc\x4d\xe0\xb9\x2e\x1c\x2a\x3d\x60\xf8\xc1\x04\xd0\x30\x48\x52\xf7\x90\x58\x82\xca\xae\xa9\x15\x3d\x18\x9b\x81\x46\x56\x54\xfb\x1e\x72\x0d\x8b\x22\x69\x6c\x23\xad\x42\x63\x17\x74\x57\x03\x10\x36\xb6\xb2\x35\xfb\x7d\x08\xb2\xfd\x6b\xe8\xbf\x5d\x1a\xff\x00\x97\x83\x43\xe5\x81\x77\x9e\xdc\x52\x0b\xfc\x9b\xe3\xee\xfe\x18\x7b\x2b\xd3\x83\xad\x7d\xbf\x5b\xee\xdb\x79\xda\xcd\x9b\xd3\x4b\xe7\x10\x6b\x42\x97\xcd\x84\xff\xed\x63\x43\xcd\x88\x6c\x39\x89\xd7\x44\x42\x1e\xb8\x2a\xaf\xf3\x40\xc8\xdb\xbe\xda\x26\x34\x76\x4e\x2c\x47\xed\xe7\x71\xaf\x23\xf4\x0e\xfa\x9d\x13\xfe\xa4\x28\xee\x3c\x89\x96\x3f\xc3\x4f\x97\x9c\x56\xb1\x03\x67\xab\xce\x2b\xc2\x89\x35\xf9\xbb\xb5\x7f\xfa\x36\xfa\x40\x7c\xbb\xcc\x42\xa4\x28\x0e\x14\x99\x1e\x9c\x31\x5a\x16\x07\xc7\xb5\x61\x55\xd3\x36\x6f\xa4\x6b\x31\xbe\x58\x2a\x94\x8d\xc4\xd9\x99\x09\x46\xa4\x49\x02\x9b\xf3\xc8\xfd\x4a\x44\xac\xde\x1d\xee\xd2\x91\x9c\xb1\x33\xf5\xbf\xf4\xea\xe6\xe6\xbf\x8d\x16\xf9\x72\xc6\xf2\x59\x76\x73\x13\x14\xed\xed\x0d\xff\x7b\xe2\xcb\x6e\x6e\x8e\x1f\x46\xbf\xbe\x0b\x7f\x3d\xfc\x73\xf4\xeb\x2f\xd1\xaf\xa8\x97\x47\x47\xd1\xaf\x6f\xa3\x3e\xff\x12\x55\x8d\x7a\x39\x7e\x10\x0d\x61\xff\xf8\x61\xf2\xdd\xb7\x7b\x7b\xf6\xc7\x5f\x27\xff\x7d\x14\x94\xfc\xf7\x9f\x83\x92\xe3\x07\x0f\x82\xa2\x47\x7f\x09\x8a\xbe\xfd\xb3\x4d\x5a\xbd\x65\x50\xa9\xfe\x27\xd2\x37\xb4\xc1\x7b\x49\xab\x7f\x32\xc9\x4e\xcb\x8d\x36\x4a\x20\x77\xaa\x5d\xfd\x43\x25\x6b\xf0\x8e\x54\x88\x3d\x7e\xbb\x70\x0a\x98\x26\xac\xcd\x55\x9c\xca\xc3\xe7\x76\x6e\x32\xec\xad\x1c\x7e\x91\x76\x33\x5e\x1d\x9c\x9c\xa3\xe0\x8f\xb1\x9a\x44\xa0\x37\x41\x43\xce\xc9\xe7\x77\x26\xea\xc2\xaf\x14\xe7\x21\x49\xe7\x76\xc6\x79\x10\x58\x68\x28\x20\x26\xc2\x06\x53\x0a\xc1\x2a\xfd\xeb\x84\xef\xed\x0d\x55\x18\xf1\xe1\x9a\x2f\xf5\x02\xc7\x14\x03\x02\xd5\x88\x9e\xee\xef\xeb\x5d\xd0\xc4\xa9\xcd\xec\xfe\xbd\xf8\xeb\x84\x7f\x2f\xf6\xf7\xb3\x64\x63\x61\x1b\x23\x14\x69\xe7\x21\x7c\x84\x6a\x7b\x6d\xa7\x2c\x5e\x23\x12\x9e\x37\x83\x2a\xb4\x43\xff\x45\xa8\x03\xac\x3c\xf5\x55\x88\x8f\x59\x6e\xd5\xe0\x58\x73\x09\x1f\x3e\x62\x32\xf9\xf0\x31\xc8\xea\x53\x67\xb8\xf7\xea\x37\x1e\xda\xb0\x53\x8f\xeb\x5f\x44\x5e\xc5\xab\x1d\x06\x06\xa6\xc2\x38\x05\xde\x43\x7f\x24\xdc\x7c\xe1\x49\xc3\x8e\xc7\x28\xa9\x47\xd0\x90\xdd\x46\xce\xd8\x62\x48\x30\x5a\x72\x1b\x04\xae\xe1\x27\xb0\x55\x3f\x0c\xa3\x56\x2f\xfe\xe9\x54\xad\x70\x2e\x9a\x07\xfa\xe8\x6e\x69\x85\x43\x9f\x11\x73\x77\x46\x4a\xbc\x14\x97\xb4\x7a\x4a\x24\x1d\xba\x48\x60\x3b\x3c\xb8\xbd\xc3\x20\xf4\x40\x89\xb9\x61\x23\xa5\x22\x95\x92\xff\x62\x6a\x36\xe4\x18\x1d\xa0\x76\xe6\xef\x18\x01\xa2\x7d\x3a\x82\x3b\xdb\xa9\xbe\x1d\x96\x70\x68\xbc\x6d\xbe\xde\xdd\x57\xa7\xb2\x30\x73\x3b\x92\x4f\xd0\x37\xc8\xad\xbf\x34\xeb\xcf\xf7\x27\x14\xe7\xfb\xba\xc0\x56\x2a\xd2\x5e\x71\x85\x7f\x4e\x12\xe1\xbc\x6d\xcf\xfe\xcc\x57\x1d\xde\x03\xe1\x0e\xf6\x40\xe5\x7a\x11\x5c\x07\xb9\xfe\x5b\x9a\x09\x6f\x6b\x08\xec\xfc\x24\x0b\x91\x07\x26\x8f\x33\x62\x2c\x70\x0d\x7b\xd6\x91\x52\xc7\xb6\x45\xb7\xa0\xf4\x9c\xd1\xef\xeb\xfe\x7e\x81\xf5\xf4\x36\x7a\x02\xb6\xa1\x6a\x24\x6f\x0a\x97\x56\xcb\x6d\x62\xc9\xfa\x1a\x6f\x53\x5b\x3f\x9a\x59\x30\xe9\x78\x72\xb0\x41\x0e\xe7\xe0\x44\xa3\x44\xd4\xf1\x60\xa9\x8d\xa6\xe9\xcb\x9d\x54\x04\xde\xd6\x52\xd9\xdf\x77\x45\xb6\xb6\x54\xfe\x83\x47\xfd\x83\x47\xfd\x83\x47\xfd\x83\x47\xfd\x15\x78\xd4\xe3\x3f\x3f\xfc\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\xfd\x83\x65\x5d\x47\xc2\xb3\x82\x9e\x92\xea\x3f\xcd\x6e\xa4\x3b\xd2\x31\xc2\x68\xd0\x0c\x71\xbc\xb5\xfb\xe1\x16\xb1\xc5\xee\x66\xc1\x12\xe7\xa3\xe8\x8e\x40\x7c\xc6\x4a\x63\xa8\xd5\xc3\xf1\x6e\x74\xdd\x08\xb9\x85\x43\x82\x7b\xf5\x85\x72\xd4\x0e\xbb\xa2\x63\x35\xdd\xef\x36\xc6\x25\xeb\x1b\xe6\xcc\x45\xa7\xec\x1f\x97\xcc\x86\x25\x83\xe4\xf7\x49\x9b\xa2\xdb\xb8\x45\x07\xe7\xbb\x2d\xb3\xf0\x1f\x68\x24\xd3\x7d\xf4\x1b\x4d\x85\xfb\x1e\xbc\xf1\xc6\x6c\x99\x0a\x47\xc4\x47\x4c\x96\x88\xf5\x66\x2f\x32\x30\x7b\x11\x1d\x66\x2f\x3c\x36\x7b\x69\xa5\xf7\x49\x5a\x67\xb2\xc9\x07\xf4\x0d\x58\x86\x1c\x78\x18\x66\x5e\xfa\x00\xe1\xae\x92\xc1\x0f\x03\x16\x58\xc5\x90\xc9\xd1\xf7\xe4\xaf\x0f\xbe\x27\x1d\x56\x31\xec\x03\xe9\x63\x15\xa3\x36\x58\xc5\xc8\xff\x74\xab\x18\xb5\xc9\x2a\x46\xb5\xdf\xf2\x1d\x4d\x61\x78\x3d\x2a\x58\xbe\x70\x3d\xca\x9d\x4d\x61\x56\x2b\xdc\x9c\xe9\x75\xfb\xe6\xc7\x0e\x0b\x41\xe5\x6d\xb8\x3a\xc0\x4a\xed\x94\x37\x0d\x4b\x9b\x8e\x81\xc1\xd8\xa6\x1e\x7b\x8d\xb7\x17\x2b\x5a\x54\x6d\x3f\xf3\x9d\xc6\x81\xdd\x95\x8a\x52\x22\xef\x20\x9f\xba\xa2\x2e\xfc\xea\xd2\xfe\x98\x14\x72\x5e\x9b\xb7\xa0\x79\x20\x7a\x80\x22\x8a\x26\x2d\x66\x7b\x44\x0c\x88\xbd\xec\xbf\xf2\x30\x01\x11\xd4\x6f\xc6\x07\xa8\x63\x08\x88\x3b\x84\x0a\x98\x24\x42\x05\x18\x3f\x96\x9b\x9b\xae\x9e\x3d\x35\x72\xab\xce\x81\xe4\xf9\x5d\x47\x22\x68\x7b\x9d\x47\x36\xf5\xb5\x1c\x02\xfc\xbf\xa3\xdc\x5f\x08\x8d\xe9\xb6\xe2\x58\x53\xe2\x03\x96\xc9\xe5\xa9\xcc\x2b\x76\x1a\xbc\x0c\xe3\x66\x59\x18\x67\x02\x43\x46\x04\x21\x0d\xeb\xa2\x5b\x66\x47\xf3\xe3\x2e\xf9\x1d\x46\x4e\x7c\xd6\xa0\xb7\x9f\xa0\x39\xde\x4e\x80\xe4\x4d\x17\xfe\x44\xf6\x7c\x2c\x9c\xc7\x08\xdf\xc2\x85\x5f\x4e\x54\xdb\x85\x9f\xe3\x58\xba\x26\xb2\xc7\x62\x2c\x62\xff\x91\x04\x21\x75\x73\x33\x94\x09\xaf\x7e\x19\x7a\xf5\xcb\xd8\xab\x5f\x36\xbd\xfa\x65\x3f\xaf\xfe\x28\x42\xe8\x57\xe3\x01\x77\x3f\xa7\xd2\xe5\xc7\x23\x4c\xd8\x84\x49\xe3\x1c\xc0\x7d\x5c\xb5\x3d\xe0\x38\x16\x66\xe5\xf2\x56\xde\x5e\xf2\x7e\x3c\xe0\xbe\x96\x1d\xb1\x1e\x70\xf7\xb4\x27\x77\xf5\x80\xfb\x1a\x76\xc5\x7b\xc0\xf5\xd9\x93\x0e\x77\x2f\x79\x6f\x1e\x70\x5f\xc3\x8e\xd4\x1e\x70\x77\xdd\x12\xc1\xff\x2e\x94\x70\xd9\x1e\xd8\xd9\x10\x21\x93\x64\xae\x61\x9b\xe0\x20\x7a\x2c\x66\x9c\x89\x4b\xe7\x23\x7d\x6b\x2b\x01\x4d\x73\x1c\xd8\x18\x0a\xbf\x27\x2b\x81\x5b\x04\x25\xdb\x2a\xad\xce\xda\x0c\x0a\x1b\xc4\x86\x25\xe3\xe7\xdd\xd2\x47\x90\xd0\xe3\x19\x91\x6f\xc8\xda\xc4\x65\xee\x76\xcb\x99\xb8\x04\x9a\xc8\x46\x9b\xf1\x16\x06\x9c\xba\x00\x34\x61\xe6\x68\xc8\xc1\xa1\xff\xda\x8e\x84\xff\x2d\x25\x8a\x3d\x8d\x0b\x2e\x84\xa2\xef\x66\xc4\x4a\x13\xf4\x46\xbc\x64\xe7\xd4\xff\x00\x56\xd5\x44\xd1\x08\xe4\x7e\xf5\x47\x08\xf9\x7e\x3b\xa3\x26\x3f\x58\x3b\x16\xc4\x88\x94\xa5\x2b\x4c\xd3\xfa\x4c\xbe\x64\x46\x2c\x79\x1b\x82\xf6\xe7\xe5\x7c\xf1\x4e\xd8\x83\x1d\x76\x12\xd3\xbd\xd3\x08\x9b\x12\xfb\xc4\x5f\x32\x7e\xfe\x0f\xc2\x8b\x52\xb7\x59\xe1\xd4\xd7\x16\x6d\x64\xaf\x73\x03\xf6\x06\x4f\x0b\x98\xb1\x66\x24\x54\xf2\xa1\x20\x8a\x1c\x38\xe8\x31\xf9\x93\xaa\x96\xf4\x4f\x1f\x9d\xe2\xdc\x48\x9b\xac\x5d\x03\xfc\x5d\xdf\x39\x09\x93\x60\x10\x5c\x5b\xcf\xce\xe9\xd7\xea\x19\x49\x2b\x28\x30\xe0\xb7\x7e\xb9\x93\xc9\x84\x8d\x5c\xd2\xd3\x9b\x1b\xa4\xc8\x69\xfc\x2d\xdb\xdb\x63\x41\xe2\x31\x93\x8b\xc8\xab\xf3\xdc\xe2\x45\x84\x5f\x22\x9d\x36\x1b\xb9\xfc\xa9\xed\x68\x5a\x8f\xd9\x48\x54\x8b\x19\xe1\x93\xdd\xa3\x71\x7a\x4a\x7b\x7b\xa2\x71\xc0\x41\x87\x2b\xfb\xd4\x5c\x37\x8f\x1b\x31\xbc\xcd\x7a\x03\x25\xd9\x69\x25\xce\x29\x3f\xb0\x10\x45\x8e\x16\x95\x61\x4a\x9e\x41\xfd\xa1\xfe\x24\x95\x58\x68\x40\x4c\xa6\x04\x9e\x33\xde\x3d\xce\xc6\xc3\x9e\x75\xa9\x99\xf7\x53\x7d\x3c\x43\x8e\x59\xe6\xf2\x57\xc7\x2b\xa0\xd9\x75\xc8\xca\xa5\xdc\x1f\x23\xef\xc8\xfa\x12\x79\x4d\xcc\xe8\x92\x30\x75\x92\x57\xa2\x2c\xdf\x89\x56\xac\x72\x48\xcc\x57\x14\x27\x6b\xd2\x2a\x07\xd9\xb0\xfa\x01\xac\xc9\x64\xa2\xba\xd4\x0e\x80\xa4\x6b\x3e\x62\xa9\xe1\x24\xf2\x84\x03\xf4\x1a\xa4\xa8\xca\x1e\xab\x8e\x84\x56\xe3\x64\x41\x8c\xc8\x23\xe0\x6e\x83\x88\x25\xd2\x80\x6d\x91\xc2\x2a\xa9\x45\x6e\x05\xe4\xa9\x93\x5c\x35\x73\xaf\x86\xa1\x62\x6c\x22\xad\x3a\xa9\x55\xb3\x72\x18\xab\xc5\x56\x8e\x93\x58\x85\x95\xa3\x60\x62\x34\x8a\xbc\x95\x4e\x73\xd6\x82\x33\xed\xf3\x96\x97\x4c\xe5\xb3\xa1\x0b\x5b\x10\x9c\x71\x76\x9d\x13\x49\x07\x22\x85\x84\xc6\xa7\x15\x25\xe7\x3b\xe9\x0a\x70\x11\xc6\x9e\x20\x6b\x9f\xb8\xbe\x24\xd3\xe0\x7e\xe8\xfb\x24\x3a\x2e\x41\x16\xd8\x5f\x34\x13\x64\x35\x4e\xd1\x6e\xa2\x89\xd5\x36\x30\xc3\xef\xde\x76\x78\x97\xaf\xcd\x1e\x40\xf0\x7e\x0c\x1f\x3c\xa6\x78\xae\x89\x18\xb5\x4a\xc7\xd3\x0f\x66\xba\xca\x56\x7a\x3e\x77\x98\x0b\x6c\x85\x4b\x83\xb4\xcd\x4e\x64\x3b\xeb\xce\x49\xf3\xd5\xe3\xad\xfb\x5c\xb9\x58\x50\xe9\xf8\x7e\xa6\xab\x36\x6d\x55\x47\x0f\xf2\x04\x42\x9b\x2c\x83\x84\x16\x51\x26\x0f\xf3\x2c\x21\xe2\x54\x34\x42\x44\xa8\x24\x3a\x6f\x51\x37\xbe\xef\x7f\x8a\xcd\x02\x7a\x4d\x3a\x75\x0b\xe5\xc3\xb1\x6a\x22\x0b\x06\xb8\xa5\x98\xdd\x70\x12\x95\xcd\x5a\xf4\x75\xa7\x5a\xde\x9a\x79\x28\xd8\xd9\x99\x26\x25\xdd\xf2\x20\x3a\xf0\x8c\xc8\x67\xba\xa0\x15\xae\x97\x9d\x9d\x6d\xa0\xa0\x75\x8d\xa6\x39\xef\x5b\x51\x96\xa7\x24\x3f\x5f\x6b\x1f\x10\x91\xc8\x9b\x69\xf7\x35\x12\xf8\x9e\x68\xb2\x2b\x64\x6e\x9c\x39\xb2\x57\xae\xda\xed\xe4\xec\xdb\x19\xf5\xb6\xe4\x05\xfe\x26\x36\x42\x33\x50\xab\xba\x72\xb2\xbd\x33\xaa\xf2\x99\x3e\xc6\x9a\x33\x07\xff\x70\x1c\x94\xc4\x28\xaf\x33\xec\xa1\xcb\xd9\x65\x1a\x75\xbe\x3d\xac\xd2\xa1\xd3\xcd\xad\x69\xa9\xe3\x20\x64\xdd\xa6\x5c\x40\x95\xbd\x3b\xe9\xa4\x38\xee\x66\x25\x2e\x44\xb0\x4d\x21\xc0\x74\x2d\x42\x81\x85\xd9\x96\x75\xf9\x11\x1a\x93\xd8\x56\x26\x61\xec\xd8\x0e\x16\x62\xb1\xa0\xd5\x01\xd0\xc4\x8c\x4f\x0f\x16\xa4\x6a\xc9\x26\xc2\xaa\xfd\xbb\xb8\x33\xc0\xe9\x6c\x60\x97\x88\xf0\x35\xe5\xcb\x39\xad\x9c\x16\x7d\x4a\x53\xf1\x80\x3d\x24\x5a\xad\xb2\x2d\xf6\x64\xfb\x2d\xf8\x3d\xae\xd8\x98\xc6\x5b\x1b\xeb\xdf\x28\x69\xf3\x3b\xfa\x59\xfd\x8d\xd1\xb2\xa8\x93\x36\x6f\xcd\xb4\xff\xff\x86\x41\xf2\x93\x6d\xd2\x96\xc2\x7a\x15\xfd\xac\x48\x45\xc9\x6f\xb9\xe4\x27\x15\x25\x5f\x66\xc5\x65\x41\xab\x3a\x4d\x6b\x68\xed\xfd\xa5\xb2\x74\x47\x7a\xf8\x60\x42\x1f\xef\xb4\x32\xb0\x0e\xfd\x2a\xd6\x34\x23\x72\x66\xa6\xf3\x71\xa3\x7a\x39\x4a\xec\xdf\xc6\x62\xef\xfa\x26\xeb\x7f\xf7\x6b\xe4\xea\x8f\x78\x63\x67\x31\xfe\x8e\x4c\x63\x72\x38\x28\x48\x49\xc7\xb7\x3c\xc7\x76\x4a\x99\xdf\xf6\x20\x4b\x91\x93\xf2\x44\x89\x8a\x4c\xbb\x93\xfa\x7a\x86\xa1\x96\x84\x4a\x1b\xed\x36\xf8\x62\x0d\xeb\x9d\xce\x39\x76\x6a\xab\xfd\x3c\x6c\xe2\xcb\xda\xb8\x43\x13\xf7\xcf\x28\x97\x4c\x5d\x8d\xd1\x31\x38\xbc\x3d\x29\x12\xe1\xd9\x3a\xd2\x8f\xd6\x94\x6a\xbf\xe4\x15\x50\xd5\x1b\x75\x6c\x12\x18\x9b\x0c\xa7\xd6\x02\x54\x13\xa7\x62\xb9\xde\xca\xf6\x5e\xa7\xd6\x27\xfb\x2a\x64\x8e\x75\xdb\xfe\xc4\x5e\xe0\x5e\x86\xc0\x70\xaa\xde\x24\x48\x1f\xe8\xaa\xbf\x2f\x5d\xdc\x4b\xb7\x3f\x5d\xd8\xbd\xdf\x4a\xc6\xa7\x4f\xca\xd2\x64\x47\xe9\xf0\xeb\xbb\x72\x89\x4f\x10\x5f\xce\x9f\xd5\xfb\xb8\x7e\x4f\x6b\x69\x61\xa8\x00\x8c\x3a\x4c\xbb\xe3\xd4\x80\x27\x3c\x94\x68\xe8\xbb\xf2\x0d\xc6\xfd\xc3\xd8\x27\x7d\x1a\x55\x14\x00\x51\x5c\x28\x51\x86\xaf\x59\x31\x0e\xe2\xfd\x46\x2e\x36\x73\x71\x41\x7f\x32\x2f\x48\x22\xec\xde\x97\x8a\x73\xa3\x36\xdf\x61\x5d\xf1\xc3\x47\xab\x70\x0c\x85\x60\x21\x04\x00\x76\xe3\x04\x0c\xa3\x4c\x2e\x40\xeb\x8e\x23\x45\xa5\x7e\xbc\x0a\xf9\x1d\xde\x92\xc5\x72\x77\x01\xea\xa0\xd7\xea\x44\x54\x0a\x61\xee\x02\x7d\xde\x62\xd4\x9f\x2a\x13\x21\xbb\x1e\x58\xb4\x06\x16\x9d\x03\x0b\xaf\x5f\xdd\x6e\xe0\x02\xc0\x51\x38\xac\x6c\x0d\x2b\xeb\x61\xd5\x10\x05\x50\xac\x61\x18\xe2\xe7\xa3\xe1\xb9\x95\x27\x52\x90\x1e\x42\x52\xdc\x40\xc8\x04\xfb\x6c\x9d\xc4\x1b\x36\x27\x50\x94\x57\x94\xa8\x76\x02\x4a\x5b\xba\x5c\x14\xbe\x34\x10\x6e\x21\xd7\xaa\x73\xa8\x54\x67\xf5\x50\xa9\x89\x74\x0d\xe5\xbe\xdf\x72\xa8\xf5\xab\x3a\x8a\x86\x22\x32\x4f\x0c\xa3\xbf\xa6\xa7\x6c\xf2\x0b\x36\xe7\x6b\x3e\x76\xf5\x92\x9a\x8d\xed\xe5\xc8\x8a\xfa\xcc\xc7\xa6\x28\x1a\x20\x0d\x2d\x92\x8e\xf7\xd2\xa5\x85\x30\x77\xe1\x9f\x8c\x5e\xc6\xc2\xbb\xe8\x2a\x45\x8a\xf9\xc6\xe5\x35\x8a\xe4\x35\xd7\x17\xd3\x86\xb8\xd0\xc3\x84\x28\x3a\x6d\x13\xbf\x7b\x59\x60\xbb\x51\x0b\xa2\xb5\x80\x4d\x2c\xfb\xe9\x03\x91\x92\xa2\x49\x3f\x93\xe3\x46\x46\xc5\x68\x4a\x90\x56\xd1\xa6\x0d\x75\x14\x49\xe7\x1a\x6b\x7a\xc5\xaf\xb0\xd9\xa0\xc7\xfa\x22\xeb\x52\x0f\xb4\xf9\x04\x21\xbf\xf2\x46\x6a\xe2\xa8\x27\xe3\x3e\xe1\xb3\xfd\x42\xe8\xdf\x0c\xf2\x68\xf3\x48\x86\xdd\x9a\xf1\xf1\x16\x50\xbe\x15\xf0\x3e\xdc\x31\xcc\x33\xb7\xfe\x46\x7a\xc8\x5f\xe3\x60\xed\x24\x60\xa4\xf6\xc1\x49\x17\x5e\xde\x7c\x4f\xa9\xdf\x42\x04\x1d\x79\x00\x37\xcd\x79\xdb\x33\x56\x2d\x5f\x60\xd5\x3c\x0d\x6b\xc0\x1f\x7e\x7a\xcc\x43\x56\x81\x66\x63\x3e\xf9\x34\xba\x64\x6a\x26\x96\x6a\xc8\x1b\xc2\xf4\x98\xae\x45\xd8\xbb\x30\x1e\x3f\x0e\x66\x3e\x0e\x25\xbe\xbd\x36\x90\x67\x3e\x39\x70\x03\xb6\xbc\x61\xdc\xeb\xb7\x20\xdb\x71\xa3\x82\xf9\xe8\xab\xbc\x61\xdc\x19\x93\xb5\xf5\x6b\x41\xa1\xd7\x5f\xdc\x86\x9d\xf1\x01\x41\x4c\x1e\x11\xd9\x23\x45\xe6\xd7\x64\xfb\x93\xf4\x24\x5c\x9f\x3c\xd0\x3c\xfc\x6e\x43\x1c\x97\xd8\xc3\x9b\x06\x75\xd6\x0c\xcc\x82\x12\x6c\x56\xcb\xe0\x84\x49\x93\x3f\xe2\x49\x31\x67\x7c\xbd\xed\xcd\x57\x15\x11\x03\x80\x5d\x30\xf7\x98\xef\xaa\x77\xc9\x92\x64\xba\x9e\x59\xb5\xec\x9f\x1f\xd4\x5d\xbd\xa4\x98\x3b\xdc\xd8\x18\xdb\x26\xb1\x1f\x5e\xa3\x4a\xf3\x59\xb8\xa2\x67\xd7\x91\x36\xcb\x5a\xf5\x98\xb9\x85\xd6\x3e\x81\x97\x7b\xf3\x23\x64\xb5\xb5\x03\x05\x8a\xba\x4d\x38\xfb\xb8\xcd\x70\xc4\x73\x4f\xa8\x65\xa2\x8d\x0f\x6a\x27\xf4\xfc\xa9\xcd\x40\x1d\x49\x77\x9f\x25\xc2\xe5\xde\xff\x19\x1b\x04\xb2\x9d\x46\xb1\x09\xae\xb6\x0c\xb4\xbb\xb5\x13\x34\x16\xf7\x05\xbc\xe4\x56\x79\x55\xfb\x82\xa7\x69\x25\x96\x8b\xee\x7a\xa6\x38\x8c\x75\xd4\x59\x33\x88\x73\xb4\xc9\xf1\x79\x9d\xf5\x23\x2d\x98\x02\x40\xa7\xff\x72\x51\xc7\xf4\xdf\xd6\x98\xa8\x06\x8a\x50\xad\x11\x2c\xa9\x9f\x7b\xcb\x52\xd2\x4a\x4e\x3e\x7c\xbc\x45\x2a\x4c\x17\xda\x67\x3b\xaf\x8e\x75\x01\x5c\x82\x94\xc8\xfd\xdf\x41\x7d\x6f\x69\x32\x28\x84\x7f\x64\xcb\xf9\x9c\x54\x57\xeb\x3a\x56\x86\x46\x6d\x87\x5b\xf9\x64\x83\x66\x0c\x15\xbe\x0e\x02\x54\x84\x39\xe1\x54\x94\x19\x5c\x22\x93\x8c\xf1\x68\x87\x47\xbd\x89\xfd\x09\x1d\xe5\x62\xc9\xd5\xca\x71\xe3\xbd\xbb\x36\x07\xa5\xbb\x65\x93\xa3\x1d\x19\x75\xcb\x82\x6e\x31\x8d\xe3\xa5\x49\xcd\xf9\xbb\x8f\xd0\x07\x66\x1d\xe1\x33\xdc\x4e\xf5\x8c\x9d\x63\xb2\x34\xb5\x42\x7b\xf8\x34\x29\xd4\x48\x6f\x54\x24\xbd\x69\x4b\x49\x6c\x88\x1a\x62\x7d\x52\x77\x9b\x35\x6c\x54\x1a\x8d\xc6\x6a\x2c\xfc\x96\xe6\xa2\x2a\x1c\x45\x64\x03\x8a\xe8\xc1\xb0\xa8\xa6\x51\x56\x3b\x98\xb4\xf9\x1a\xbc\xdd\xa8\x8a\xb5\xf7\x74\x4f\x07\x10\xd1\xe5\x4c\xe8\x4a\xfa\xff\x31\xc5\x9a\x5b\x1f\x73\xdf\x5c\xb3\xa9\xe3\xdd\xe3\x55\x14\x63\xc5\xbc\x65\x94\x8d\xb8\xa8\xe6\xa4\x64\xbf\x04\x80\xe0\xa0\x9e\xb9\x91\xc3\xb4\x51\x8f\x6d\x6b\xa2\x6f\x48\xf0\x2e\x02\xb4\x9a\x32\xd5\xaa\xe1\x4b\x83\x07\xd8\x09\xe4\x7e\xc9\x5d\xf6\xd9\x17\xb0\xca\x30\x8f\x08\x83\x27\x85\x31\xcc\xa1\x2d\x83\xc5\x96\x90\x2c\x00\x33\xe0\xc9\x63\x4c\xb7\x78\x77\xa6\x45\xf4\x0d\xa7\x97\x1e\xbd\xf4\xcb\xd7\xdf\xca\xf7\x9f\xea\xa2\x33\xf4\x88\x0f\xfc\x15\xd9\x19\xf9\x59\x6b\x5c\x6d\xa5\x70\xfe\xcd\x8d\x39\x6e\xe7\x44\xac\xaf\xfc\x6a\xa7\xeb\xbd\x90\xa2\x18\x8a\x16\x85\x00\x30\x2e\x49\x10\xb8\x69\x0c\x88\x75\x4e\xf3\x82\x09\x47\x49\xb5\x8c\x2e\x3b\x0f\xbc\x5e\x1f\x60\x0b\x84\x83\xf7\x16\x2e\xdf\xa1\x10\x5f\xa1\xee\xb3\x59\xed\x99\x53\x39\xbb\xae\xa4\xfb\x92\x4c\x0f\xe8\xce\x44\x37\x6d\x99\x45\x60\xf4\x8d\xf9\xee\x6b\x31\xeb\x8d\x57\xd3\xa1\xb7\x5d\xb0\xc3\x7c\xa9\x25\x27\x27\x68\x93\xa4\x26\x2d\x37\xec\x54\x42\xd3\x0f\x9f\x01\x30\xd9\xbe\x1b\x7e\x42\xb5\x56\x02\xd7\x17\x35\xdc\x6c\xde\x92\x95\x37\xcf\x4c\x08\x1f\xfc\xc1\xd5\x4f\xcd\xb9\xad\x34\x9f\x48\xbc\xd3\xbd\x9e\x19\xde\x3d\x6e\xbd\xef\x8e\xcd\x8f\xa7\x64\x96\xb3\xc3\x13\x18\xd8\x7e\xab\x6f\x4d\xa3\x65\xf2\x32\xb5\x36\x3b\xb8\x4d\xed\x60\x44\xc9\x85\x6e\xc8\xb3\x99\x38\x29\xa9\x77\x9c\xaf\x3f\x94\x99\xb8\x7c\x62\xde\xed\x1b\x96\x9f\xd3\xaa\xcd\x2e\xb9\xd7\xfc\xc4\x21\xb0\xa3\x6c\x27\x0e\x28\xd7\x8c\x9e\xd6\xe7\x72\x37\x70\x12\xc2\x3c\x11\xb7\xed\xea\x4d\xc8\xe3\xaa\x16\xf7\xe4\xf1\x79\x50\x6f\x13\x59\x95\x0c\x36\xa7\x9b\xb4\x91\x2f\xf4\x72\x39\x13\x75\xae\x59\x83\x35\xeb\x9f\x36\x28\xed\x4e\x3b\x0c\xdd\x71\x86\xa3\x68\x6a\x7c\x03\x45\x12\xae\x20\xf4\x23\xd8\x30\x71\xbf\xc1\x30\xb1\xc6\x34\xd7\x90\x23\x51\x28\xb5\xd5\xe6\xbd\xb7\x4a\x21\xd8\x0e\xec\x16\xbe\xb2\xb7\xe8\x9d\x98\x4e\x4b\x0a\xe8\xb5\xd9\x7d\x4b\x24\x6a\x5a\xfc\xbd\x22\x5c\xc1\x95\x6a\xb1\xba\xad\x1b\x97\x60\x76\x6b\xed\x5a\x27\x9d\x83\xd2\xb7\x32\x5c\x57\x67\x70\xb9\x4e\x64\x28\xa9\xd2\xc4\x11\xad\xe4\x30\xa2\x60\x83\xbf\xd7\x3c\xb8\x98\x7f\x95\x5b\xf2\xaf\x00\x67\x7b\x72\xaf\xdb\xca\xdd\xbe\x14\xf3\x7a\x3f\x92\xb7\xcd\x96\x0d\x0d\x75\x8a\xe5\x2b\x8d\x5c\xc2\x71\x9e\xc9\xd8\x25\x3d\xe8\x45\x7b\x17\x43\x90\x10\x27\xdd\x8a\x87\x42\xd9\x8e\x98\x18\x05\x80\x51\x04\x08\xfb\x7f\xcb\x49\xc7\x67\x3d\x37\xfd\x6f\x83\x05\x02\xe0\xd8\x42\xd6\x2d\xa0\x68\x83\xfb\x75\x2b\x9e\xf2\x92\x92\x2a\x52\x3c\xf9\x6d\xef\x29\x11\x93\x28\xcb\xc6\x7d\x16\xb7\x1e\x97\xdf\xf1\xf9\x24\xc3\xb5\xff\xf1\x7e\xcc\x41\xb2\x7c\x9d\xd8\x5a\x97\xde\xea\x91\x7d\x1d\x02\x6c\x19\x3e\xf2\x1e\x61\xec\x65\xfd\x52\xa1\xed\xbb\xab\x85\x33\xc4\x88\xed\x9c\x5c\xe1\xf8\x08\x97\xc6\x9f\x54\x43\x11\xef\xd3\x69\x0c\xa5\x74\x95\x97\xec\x8c\xe6\x57\x79\xd9\xdd\x89\xaf\x01\x0e\x01\x7a\xc3\x5f\x32\xa9\xda\x15\x5f\xe4\xe0\x9b\x6b\x7e\x3c\xa3\x32\xf7\x3f\x6c\xf2\xc9\xbe\x62\x31\xa0\x61\xed\x38\x21\x09\x6b\xaf\x42\x20\xb7\x7d\x61\x6b\x0d\xb7\x76\x43\xed\x17\x7d\x04\x70\xfb\x75\x4e\xf2\x19\xfd\x24\x97\x67\x67\xec\xf3\x18\x3d\xbe\x98\x7c\x7b\xfc\x10\x59\x95\xa1\xa8\xc6\xe8\x1b\x00\x15\xa0\x91\x77\x6e\x43\x9f\x96\x55\x69\x36\xda\x7a\x00\x7e\x92\x0b\x5a\x96\xf9\x8c\xe6\xe7\xe3\xdd\x23\xf0\x4b\xfd\xac\xe6\x94\x2f\xcd\x69\x18\xbf\xa2\x53\x52\xe9\x1f\x8c\x97\x8c\x9b\x40\x37\x0b\x22\x15\xfd\x54\x10\x45\x3e\xb1\xb9\xf1\xa5\xde\x3d\xc2\xf0\xd7\x27\x88\x4e\xf6\x69\x06\x5e\xad\xe3\xa6\xb2\x4a\x83\x77\xa2\xc8\x18\xed\xd3\xd1\x69\x29\x4e\x87\xd9\x48\x5d\x2d\xe8\x3e\xfa\xfe\x94\x48\xfa\xdd\x23\x6c\x0a\xcc\x9f\x66\xfb\x4c\xaf\x9f\x48\x71\xa1\xc8\xa9\x1f\xe5\x53\x6e\x0d\xe5\x76\x8f\xf0\x9c\x16\x8c\x7c\x2a\xf5\xd2\xe8\xfc\x94\x16\x66\x2e\x6a\x46\xf5\xed\x95\xac\xbc\xd0\xbb\x26\xcf\x19\x1f\x23\xf1\x99\x15\x14\x61\xca\x15\x53\x57\x9f\x28\xcf\x45\xc1\xf8\x74\x8c\x2a\x72\x89\x30\x80\x0c\x5a\x7c\x32\x30\xf4\x13\x85\xc3\x92\x63\x74\x8a\x19\x3e\x3d\x94\xaa\x12\x7c\x8a\xd9\x21\x9d\x23\x7c\x26\xb8\x92\xec\x17\xfa\xe9\x4c\x54\x73\xa2\x2b\xfd\x65\xf1\x79\x70\x7c\xa4\xff\x79\xa0\xff\x79\xa4\xff\xf9\x4e\xff\xa3\x0b\x1e\xe8\x82\x07\xba\xe0\x81\x2e\x78\xa0\x0b\x1e\xe8\x82\x87\xba\xe0\xa1\x2e\x78\xa8\x0b\x1e\xea\x82\x87\xba\xe0\x91\x2e\x78\xa4\x0b\x1e\xe9\x82\x47\xba\xe0\x91\x2e\xf8\x56\x17\x7c\xab\x0b\xbe\xd5\x05\xdf\xea\x82\x6f\x75\xc1\x77\xba\xe0\xcf\xfa\x9f\xbf\xe8\x7f\xfe\xdb\xcc\xe5\xe8\x68\xf1\x59\xcf\x16\x26\x79\x7d\x2a\xca\x62\x7c\x6d\x4f\x11\x9d\xa2\x15\x66\x8a\x94\x2c\xaf\xbf\x31\xb4\x5a\xe1\x45\xb9\x9c\x32\x2e\xc7\x1f\x10\x29\x2e\x4a\x26\xd5\x80\x2c\x95\x28\x19\x3f\x37\x7f\x54\x26\x34\xdd\x40\x17\xc8\x81\xf9\x6a\x8e\x64\x90\xcf\x48\x35\x27\x8b\x81\x89\x20\x3a\x98\x55\x83\x05\x99\x52\x63\x49\x82\x30\x92\x94\x54\xf9\xac\xa2\x8b\x92\xe4\x74\x70\x29\xaa\xc2\x08\x27\x07\x17\x4c\x2e\x49\x09\x7a\x0b\xfb\x43\xf7\xa3\x11\x0d\x33\x8f\xa6\x20\x8a\x2a\x36\xa7\x03\x73\xcc\x03\x2e\xb8\xe9\x92\xf1\xe9\x40\x33\x6b\x03\x13\xab\x74\x50\xb0\x0a\xf4\x27\xa4\x34\x96\x1d\x48\xd1\xf9\xa2\x24\x8a\x0e\xcc\x4d\x1d\xe8\x2b\xbd\x20\x4a\xd1\x8a\xc3\x6c\x95\x10\xa5\x44\x1f\xb1\xb9\xe7\xd7\x2b\xf3\xbf\xbd\xe5\xba\x48\xff\xf9\x01\xd9\x8d\x33\xef\x69\xe0\xce\xdc\xfe\xbc\x19\xe8\xdd\x1c\xc0\x06\x0e\x96\xfa\x71\xea\x2d\x1c\x48\x55\xb1\x73\xaa\x66\x95\x58\x4e\x67\x03\xf3\xc4\x65\x5e\xb1\x85\x1a\xd8\x50\x45\x0b\x35\x30\xcb\xfd\xf7\x52\x28\x3a\xb8\x19\x9c\x89\x8a\xe6\xa2\x14\xd5\xe0\x94\xe4\xe7\xf0\x97\xd9\x55\x1b\x97\x18\x23\x1b\xf3\x62\x00\xd1\x40\x06\xa7\xcb\xd2\x1c\x0a\x5f\xce\xcd\xff\x37\x03\x52\xb2\x29\x2f\xe9\x99\x82\xbf\x72\xca\x15\xad\xe0\xef\x8a\x4d\x67\xf6\xf3\xcf\x4b\xa9\xd8\xd9\xd5\xe0\xc6\xee\x19\xbc\x53\x38\x3b\xf8\xd7\x6c\x31\xfa\xb8\xda\x41\x4b\xc7\x01\xa1\xc9\x44\xbf\x4e\x71\x36\x50\x8c\x5f\xcd\x73\xfa\x38\x0e\x45\x64\x16\x34\x44\x87\xb6\xd4\xfd\x3f\x9a\x33\x3e\xfa\x59\x3a\x90\x14\xe0\xaa\x4b\xc6\x0b\x71\x39\x72\xf5\x0a\x31\x1f\x3d\xd7\xc4\xa2\xfe\xeb\xa5\x89\x1c\x38\xd1\xcf\xd7\x16\x6b\x38\xf0\xfe\xed\xcb\x09\x3a\x3c\x44\xfb\xb6\x69\x69\x9d\x02\x47\x33\x21\xd5\xbe\x1f\x1a\xf9\x46\x00\x10\x27\x48\x4f\xa2\xfe\x6a\x80\x3c\xcd\x56\xd9\xb8\xf5\x65\xfb\x28\x54\xb6\x87\xe7\x05\x53\xa2\x02\xc4\x59\x8d\xe8\x67\x9a\x3f\x15\xf3\x39\xe1\xc5\x10\xcd\x73\x0a\x11\x19\xa1\x8e\xe6\x91\x30\x0a\xe0\x71\x76\xc7\xf0\x5e\x1d\xf1\xdc\x1c\x97\xc7\x43\x59\xc3\x4e\x64\xb1\x01\x06\x94\x27\x0e\x13\x8f\xde\x54\xec\x82\x28\x8a\x4b\x40\x87\xf6\xe7\xe0\x60\x70\xc1\xe8\xa5\xb9\x29\x82\x97\x57\x83\xd3\xab\xc1\x9c\xa2\x55\x86\x37\x74\x66\xdc\xc9\x68\x51\x77\x67\x3f\x0c\x0e\x06\x20\xd1\x1f\x30\x39\xa8\xf4\x5e\x33\xf3\x59\x89\x81\x63\x24\x07\x5e\xa1\xb1\x7e\x8c\xe5\x69\xc9\x72\x3f\x80\xf9\x35\x38\x18\xe4\x84\x0f\x4e\xe9\x40\x52\xca\xf5\x64\xe9\x05\xad\xae\x04\x37\x53\x0e\xb8\xe5\x06\x75\xd2\x10\xa3\xf8\x62\x84\x79\x2c\xea\x0a\xb6\xd7\x94\x67\x91\x90\x34\x08\x4b\xe1\xaa\x86\x91\x2a\x42\xba\x3f\xfc\xfe\xb8\xee\xa1\x8c\x1a\x97\xb6\xdd\xb8\x55\x01\x3d\x63\x85\xa1\xf4\x06\x33\x5a\x2e\x06\x57\x62\xf9\x18\xb5\x56\xd0\xcc\x09\x04\x2c\x4c\x3b\x21\x90\xa7\x89\xda\x95\xe1\x92\xb6\x2a\x1b\x9a\xa9\x5d\xdb\x9c\x05\x08\x50\x9a\xa6\xac\x96\x7d\xca\xbd\x3f\x20\x98\x1f\x8b\x6c\x6f\x6f\x28\x26\x74\xa4\x69\x25\x13\x3a\xf6\xc9\x62\x21\x5b\xe3\xe9\x52\x84\x45\xdb\x60\xd4\x1d\x44\x43\xfc\x56\x9f\x9f\x35\xee\xb3\x55\x3d\xb9\x98\xa8\xef\xcb\x82\x46\x7a\xdc\x44\x55\x98\x8e\xaf\x65\x76\x23\xd5\x23\xec\x12\x0d\xa5\xb8\x71\xd0\xa5\xd8\xd8\xa3\x33\xf2\x12\xbc\xe6\x1d\xda\x5a\x5d\xa3\x8e\x79\x17\xcc\xef\x7f\x08\x11\xc2\xfb\xe6\x3a\x72\x97\xed\x71\xc0\xc2\x42\x8d\xb1\xd3\x83\xb4\xd8\xf5\x28\x0d\xd3\x0e\x3b\x1b\x1e\x99\x00\x1e\x60\xce\xe5\x16\x60\xfb\x07\x53\xd6\xda\xae\x39\x09\x2e\xeb\xae\x2d\x44\xd4\x5f\x9e\x42\x58\x94\xa1\x9f\xaa\xb9\x38\xcd\xe5\x9a\x63\xc8\x6a\xc5\xa6\xb9\xc1\xb5\x4e\xd3\xdd\xc6\x66\x33\x38\x96\xac\x83\xf1\x37\xb2\xdf\xb6\x61\x47\x43\x55\xa3\x4f\x13\x34\x34\x77\xe3\xad\x23\x5e\x6e\xbb\xe0\x4f\xfd\x0d\x2f\x9a\x2c\x39\x44\x5b\xd5\xa0\x97\x4f\x13\xfc\x38\x96\x98\xdd\x17\x4f\x4e\xb6\xe1\xc9\x65\xcd\x9d\xf7\x34\xb9\xe8\xcb\xa6\x2f\xd7\x86\xa3\x5f\x42\x2c\xfa\xf5\x12\x81\xbb\x18\x6c\x98\x69\x06\xf2\x53\x60\x56\x0d\x9a\x83\x3f\x81\x2e\x7e\x47\x3f\x2b\x60\x44\x2f\x98\xa2\xcf\xe7\x84\x95\xf5\xcf\x57\x54\x4a\x32\xa5\x2e\xd9\xd5\x89\xeb\xf2\xf9\xe7\x45\x49\x18\xf7\x11\x99\x5c\x30\xcb\xb8\xe8\xeb\x10\x28\x30\xf9\x5a\x00\x20\x36\x0d\xb7\x9c\x48\x87\x9b\x4f\x38\x91\xdb\x58\xdd\x59\xb9\xbb\x3b\x00\xb0\xd7\x8a\x9d\x8e\xa2\x13\xf0\x1e\x30\xd6\x36\x4f\xb6\x6b\x78\xc8\x62\x65\x9f\x2f\x74\xa9\xa1\x56\x6d\x0d\x9f\x86\xce\x59\xca\x58\xcb\x17\x80\xfc\xa1\xf0\xa2\x2b\xc4\x4e\xfd\xd5\x3d\x95\xda\x40\xc6\x02\x2f\x1e\x19\xc3\x98\x6a\x40\xe8\xd4\xa6\x27\xdc\x67\x5d\x49\xab\x72\xd4\xe8\x5f\x33\x61\xb0\xca\xdf\x75\x73\xcc\x43\x71\x7d\xac\xca\x11\xd6\xf7\x06\x92\xa1\x20\x57\xec\x7e\x1b\x30\xdd\x48\xd4\x62\xf1\xc2\xee\xf1\xce\x76\xfa\x29\x6b\x2e\x18\xc8\x62\xf5\x3a\xd8\xd9\xb0\x5e\xd8\x90\x63\xa9\x61\x37\x0f\x74\x51\x26\xde\x50\xb4\x9e\xc7\x34\x65\x84\x6e\x95\x40\x3e\x2e\x95\xfd\xbd\xb7\x67\xf0\x8a\x05\x85\x8c\x4a\xa3\x9b\x1a\x0f\x79\xa3\xd5\x44\x69\x56\xc6\x10\x9d\xef\x25\xad\x5e\x14\x7b\x7b\x2e\xdd\x12\x20\x44\x34\x40\xfb\xf1\xe6\x61\x61\x42\xa7\xd2\x58\xf1\x65\x6c\xf7\x44\xb6\x56\xd7\x56\x2f\x48\x8f\x85\x9b\x43\x9b\xb1\xe2\x8f\x1a\x81\x6b\x8c\x15\xeb\xd8\x1a\x94\x4b\xa4\xc3\xa2\xeb\x74\x58\x9b\x4d\x6f\x58\x1d\xdd\x93\x9c\xd3\x17\xc5\xf0\xf8\xbb\xac\x65\x8d\x63\x8f\xd4\x99\xe3\xb4\x0d\x2e\x82\x33\x4f\x9b\xe0\x98\x26\xd6\xfe\x06\x07\x80\xc7\xff\x04\x90\x63\xf2\x52\x78\xbf\xc0\xf0\xa7\x09\xd4\x17\xfc\x06\x55\x46\xf8\xe5\x95\xb8\x88\x7e\x3f\x15\x8b\xab\xf0\xf7\x3b\x2b\x6d\x88\x06\x81\x90\xd4\xe1\xa7\x5a\x66\x19\x7c\xfc\x27\xad\x4c\x5c\x93\x1e\xc6\x43\x40\x2c\x6d\x6d\x39\xb4\x16\x1c\x59\x10\x8b\xfe\x41\xaf\x06\x6a\x46\x2b\x8a\x07\x2f\x06\x64\x3e\x90\x33\xa2\xa9\x04\xfd\x6d\x10\x26\xb1\xb0\xc7\x01\x57\x61\x1f\x0d\xcc\x9c\x06\x43\xc6\xa3\x5a\x2e\x1d\x84\x62\xaa\x34\xf5\xb2\xc1\x25\x53\x33\xcd\xae\x0c\xa4\x18\x5c\x52\xe0\xd6\x84\x9a\x0d\x72\x51\x96\xe4\x54\x54\x9a\xe7\x14\x7c\x50\xbb\x79\xa2\x15\x9e\x13\x95\xcf\xf4\xdd\x95\x29\x93\x90\xd6\x85\x6d\xb2\xbd\x75\x55\x4b\x06\xa0\x6c\x14\x75\xb9\x4e\x57\x2c\x3a\x75\xc5\x2c\xa1\x28\xd6\xec\x4c\xc3\x2f\x22\xe2\x3b\xcf\xac\xc7\xd3\x7b\x30\xb7\xe3\xb1\x11\xb6\x32\xda\x60\x8f\xd9\xdb\x0a\xde\x26\xd2\x47\x61\x6e\x90\x64\x05\xcf\xba\x25\x0a\x9b\x69\xa1\x46\xf5\xc5\x32\x6e\xe3\x33\x71\x39\x6c\xa9\x9f\x1a\x95\x66\xac\xa0\x1a\x7f\xc1\xd4\x43\xe2\x23\xe1\x3d\xd5\x26\x4d\x5a\x0b\x48\xd5\x09\xd7\x90\x28\x6f\x2d\xc3\x7b\xff\x6f\x58\x49\xab\x9e\x5b\x0c\x58\x77\xbc\x00\x94\xde\x15\xf9\x05\xf6\x01\xf0\xfe\x81\xbe\x58\x29\x13\xa7\xa8\x12\xd5\x04\x5d\x6d\xe4\xf4\xa4\x28\x36\x74\x4e\x8a\xa2\xb3\x67\xf3\x1d\xa8\x16\x74\x37\xfe\xb2\x1b\x28\xb4\x45\x4a\xcd\x67\xd6\x04\x08\x46\x81\x7b\xed\x48\x55\x8a\x43\x9a\x57\xc5\x80\x2d\x14\x5d\x31\x67\x19\xaa\x30\x9d\xfc\xd0\x44\xc3\x13\xd9\x46\xa8\x34\x98\x94\x06\xfa\xc8\x04\x16\x8a\x3c\xa1\x8c\xdb\x77\xeb\xab\x0b\x7f\xde\xf8\x5c\x7b\x67\x37\x0a\xc0\x1d\xbb\xf5\x59\x83\xfe\xc4\x67\x87\x01\x52\xd3\x71\xb9\x09\x5a\x25\xb5\xe0\xa1\x5d\x66\xd1\x82\x91\x33\x91\xc9\xd1\x4e\xd2\x6b\xce\xee\xd4\xee\x1f\x3b\x65\x76\x6a\x6f\x6f\x48\xf6\x27\xc7\x1a\xf2\xc6\xd0\x99\x65\x8f\xc9\x0f\xc7\x8f\xf9\x68\x4e\xaa\xf3\x27\xf2\xad\x97\x3e\x0e\xb3\xb1\xfb\x68\xe5\x9e\xe1\x17\x23\x59\x1c\xae\x11\x17\x74\xd8\x20\xe1\xb6\xf1\x67\x5a\x8a\x10\xb9\x00\xbe\x6d\x06\x89\x3c\x31\x8f\x7c\x18\xa6\x24\x28\xe8\xa9\x58\xf2\x1c\xcc\x13\xd6\x45\x1b\x0b\xd8\x1a\x2f\xb3\x39\x32\x01\xc5\x80\x85\x01\xc9\x4f\x84\x0c\xc7\x9d\xd8\x2a\xf4\x5a\x5c\xe1\x07\xdf\x82\x73\xa4\x35\x0f\xee\x85\x95\xd3\xaf\x7f\x7b\x14\x1b\x67\xeb\x4c\x53\xc6\x3c\xa6\x8c\x43\xa3\x23\xfb\xf7\xd9\xb2\x2c\x2d\x2d\xdb\x12\x38\x26\x0d\xe8\x6a\xcf\x79\x00\xbb\x70\x3c\x86\x54\x35\x10\xbe\xc3\xec\x05\x82\xe2\x35\xb9\xc9\xe7\x80\x0d\xec\xa9\x8c\xac\x4e\x6c\x78\x38\x38\x9c\x1a\x0e\x54\xac\xe1\x3f\x63\xe9\x9b\xf0\xfc\xe8\xf0\x4e\x0c\xa9\xe8\x81\x12\x32\xac\xaf\x8f\x97\xf7\x5d\x83\xdd\x85\x87\xf8\x02\xbf\xa5\x39\x5b\x30\xa3\x32\xfd\xf0\x71\xb5\xc3\x4d\xf0\xfa\xcf\x3f\x9d\x0d\x11\x46\xd9\x0f\x07\xc7\x7b\x7b\x43\x39\xaa\x2b\x4d\xb8\x0b\x4f\x83\x35\x9e\x0f\xaa\x7f\x6f\xab\x1f\x19\x04\x50\xb7\xa8\x17\x9b\xee\xe7\x7b\xdd\x4f\x67\xa3\x30\x77\x66\x54\xc1\xa5\xb7\x6c\xee\x20\x1c\x53\x23\x9e\x65\xf8\xfe\x67\xa4\xa2\x69\xde\x14\xcb\x4d\xef\x1f\xae\x8d\x1c\x48\x70\x79\x6d\x5a\xfa\xa4\xa8\x87\x4d\x76\x4c\x91\xd1\x6c\x17\x8d\x12\x0b\x1f\x20\xb6\x68\xaf\xc1\x37\xd8\x19\x61\xc1\x7f\x5c\x96\xe7\xf5\xe3\x01\x37\x85\x50\x6e\x6d\x50\x90\x7e\x51\xe1\x47\x2b\x22\x6a\x7e\x06\xa1\x4e\xf0\x35\x8a\x1a\xd3\xfe\x0c\x21\x19\xdb\xdf\x2d\xca\x4a\x94\x18\x9c\x95\xf8\x6e\x90\x56\xe2\xbb\xc7\x5a\xa9\x49\x59\xb4\x95\x28\x0a\x54\x0b\xed\x42\x87\xb8\xda\x6e\xc5\xa4\xa7\x30\xd9\x9c\x94\x4d\xb2\xd5\xc3\xa9\xf8\xcb\x85\xfd\x54\x64\x0a\xe6\x44\x05\xbb\x40\x38\x0a\x8f\x35\x27\x52\x69\x8a\xd6\xae\xe2\xe3\x06\x69\xec\xd6\x01\x44\x61\xaf\xd6\x57\xbf\x83\x55\xe4\x8c\xc8\x3a\x39\x77\xd3\x3c\x6a\x1a\x25\x5a\x76\x81\x8b\xf0\x51\xed\x76\xf4\x92\xf1\x73\xd8\x19\xf7\x14\x00\xc4\x58\x35\xc1\x17\x34\x01\xb3\x3a\x59\x08\xd5\xb1\x95\x95\xd4\x72\x61\x13\x76\xbe\x37\x81\x49\xfa\x4b\x63\xa1\xa1\xfd\xa3\x1d\x40\x35\xc8\x58\x8d\x53\xae\x21\xd6\x9b\xcf\x85\x9b\x48\xb1\xf4\x9e\xdb\xb8\x6e\x3a\xe7\xe1\xb4\xa7\x9d\xc9\xbe\xd4\x4a\xb4\x74\x34\x16\xe0\x5c\xb7\x53\x3f\xe9\xa7\xfa\x37\xc2\x32\xc3\x52\xe3\x18\xf0\x80\x4a\x05\xb3\x68\x19\x8e\xbb\xac\xee\x6d\x8b\x72\x77\x3b\x34\x5d\xe4\xd0\xd7\x63\x77\x53\xc6\xc8\x90\xef\x3d\x4d\xc6\x8c\xc5\x6c\x7b\xcf\x5c\xcc\xa7\xc7\x11\x9d\xe3\x98\x6d\x1f\x62\xaa\x76\xe7\xe8\xee\xc2\x13\x90\x1d\x7d\x80\x32\xb3\x9d\xd2\xc1\xee\x4b\x9c\x09\x31\x6a\xbc\x3e\x3c\xb9\x5c\x93\x0a\x3d\x95\xf2\xdc\xa5\xed\x46\x61\x7e\xf3\x46\xe0\x21\xbf\xde\x31\x99\x7c\x1a\xcd\xc9\x62\xe8\x9d\x32\x65\xe4\x94\xa9\x56\x59\x1d\x71\xeb\x05\x48\xc7\xc3\x6b\x17\x64\xe9\x26\x11\x71\xbb\xb7\xc7\xd6\x88\x8b\x9a\x31\xbe\x54\x1c\x43\x88\xbb\x35\xfe\x42\x8b\x7a\x8a\xf2\x76\x33\xb9\xb9\xd9\x66\x26\x08\x45\x53\x81\x43\x1d\xc7\x43\xdd\xa1\x3f\x67\xb7\x85\xc6\x61\x27\xa1\x0e\xc0\xd5\x90\xb1\x75\xc2\x86\x7e\x8b\x8a\x9c\x29\x34\x66\xa9\xfb\xf3\xcc\x94\x6d\xd1\x59\xc9\x2e\x68\x47\x5f\x90\x7c\xa4\x7f\x57\xa4\x28\xe2\x9e\x2a\x9a\x3b\xc6\xbc\x7f\x2f\x10\x01\x2a\xd5\x11\x80\xe0\x4d\x7d\xad\x44\x43\xba\xd0\x70\x49\x09\xae\xcb\x64\x32\x51\xf1\x89\xc6\x98\x22\x0d\xc9\x0c\x88\x13\x31\xbf\x1b\x04\x81\x62\xdb\x06\x2c\x8e\x08\x20\x6b\xb0\x77\xc7\x20\x05\xdb\x9b\xaf\x63\x79\x5f\x24\x14\xbb\xa5\xb2\xdc\xd2\x0a\xf7\x44\xda\x64\xd8\xbd\xad\xf5\x5d\xfa\x37\xba\x55\xc2\x77\x4f\xb8\x75\xd6\x0d\x88\xb6\x0d\xe9\xdf\x37\xa8\xe4\x17\x8c\x73\x5a\xac\xd5\xc9\x3b\xe3\xf6\x5c\x2c\xae\x6a\xed\xcd\x91\xf9\x5d\x73\x31\xee\x8b\x43\x47\x5e\xa5\xf4\xe5\xe9\xb3\x84\x37\xce\x8c\x48\xb7\x94\xf6\xc4\x6a\xb0\xb9\x76\x5a\xbe\x5a\x90\xd5\x75\xb5\x9e\xca\x8d\x1f\xf9\xba\xce\xdb\xa4\xb0\xef\xbd\x19\x16\x35\x08\xe9\xbf\x2e\x9c\x65\x02\x02\xc7\x5d\x1b\x07\x85\x67\x22\xf7\xb1\x32\x82\xdf\xe0\xd1\xb0\x7b\xec\xaf\x7d\x50\xaf\xf1\xc9\x57\x75\xc0\xce\xdf\x19\x84\x70\x61\x93\x86\x5b\x4f\x84\x5e\x64\x32\x9b\x6b\x40\x15\x84\xb6\xd2\x94\x48\x50\x72\x62\xec\xee\xfd\xc7\xbc\x14\x9c\x16\xe6\xb4\x8d\x6a\x15\xa1\x15\x14\x2c\x18\x3f\x81\x6c\xb4\x4c\xbe\x81\x6b\xbf\x7b\xac\x1f\x80\x8f\xff\x61\x57\x74\xc7\x74\xb2\xf7\x13\x9b\xb3\xf8\x9b\x81\x46\xde\xf6\x32\x72\x50\x85\x57\x8b\xb2\x91\xd5\x5d\xc0\x72\x42\xa7\xc1\x30\xc8\x84\xef\xd7\xed\xc0\xc8\x2c\x3a\x94\xd9\x85\x85\x6e\x77\x10\xc4\x92\x4b\x57\xb2\xbb\x85\x1a\xce\xaa\x29\x3f\x54\x06\xd9\xa9\xda\x48\x13\x30\xd0\x49\xe8\xd7\xba\xba\x55\x2e\x32\x83\xa7\x5e\xf0\xc5\x52\xfd\xcd\x08\x59\x6a\x6f\x8e\xd0\x67\x3d\xe9\x15\xb6\xbe\x03\x2b\xd9\xf1\x1d\xa4\x55\x55\x5b\x5a\x44\xfb\x40\xa0\xc1\x8b\xb4\xcf\xc2\x90\x98\xc9\xef\xa3\x02\x06\x88\xa2\x32\xf8\x62\xac\x9f\x53\xe6\x18\xc2\x17\x73\x1b\x8a\xef\xd7\x1b\x29\xb8\xf4\x6d\x05\x18\x08\xf6\x42\xfe\xc3\xe9\xb8\x29\x2f\x16\x82\xd9\x34\x49\xc8\x67\xce\xe2\x18\x1d\xc2\x5b\x76\xd4\x0a\xca\x5c\x99\xd2\x8c\x09\xa7\x97\x83\x67\x76\x0a\x43\xf4\x0d\xd4\x3d\xf0\xba\xc9\xd3\xa5\x52\x82\x23\x7c\x3d\xa3\xa4\xa0\x95\x1c\x5f\x3f\x59\xaa\x99\xa6\xf9\x6d\xba\xc1\x1f\x29\xa9\x68\x35\x40\xfb\xde\x5f\x18\x12\x76\xbb\xff\x6d\x86\xb9\x38\x81\xf7\x48\x89\x73\xca\xf5\x01\x2f\xab\x72\x2c\xf0\x9c\xaa\x99\x28\xc6\x68\x21\xa4\x42\x78\x41\x2a\x32\x07\x80\x41\x7c\x06\x78\x84\x49\x9e\xd3\x05\x50\x78\x54\x8e\x8d\xfe\x14\xeb\x7f\x3e\xe3\xd1\xbc\xc0\x46\x5b\x52\x88\x4b\x8e\x47\x33\x35\x37\xff\x94\x08\x9b\xc4\x72\x2e\x35\xc1\x9c\x7c\x36\x6d\xd9\x2f\x74\x7c\x7c\x64\x86\x29\x4b\x5a\xbe\x37\x1e\x08\x72\xfc\x10\x83\x2f\xc2\xab\x65\xa9\xd8\x02\xcc\x23\x48\x51\x80\xfd\xbc\xe6\x81\x8d\xbf\x12\x59\x2a\xf1\xa6\x12\x39\x95\xf2\xff\x96\xd4\xd0\x53\x06\xd8\x86\x49\x0f\xcc\xe9\x08\x3e\x44\x72\x69\x5d\xa1\xe3\x9c\xff\x4d\xe6\xf4\x85\x05\xc3\x08\x2b\x63\xd2\x80\x6b\xda\x56\xf7\x42\x35\xd8\x47\x51\xc4\xf1\x5c\x70\x29\x4a\x3a\x2a\xc5\x74\x88\x9e\x0a\x7e\x01\x42\xbc\xc1\x19\x61\x25\x2d\x06\x67\xba\x3e\x98\x5a\x63\x1a\xf5\x65\x42\x7b\x9c\x31\x4d\x0f\xf6\x99\x13\xe3\x53\x37\x29\x63\x6c\x9a\xed\x40\x37\x1a\x31\x82\x50\x33\x9c\x95\xb4\xd2\x61\xbd\xcb\x4d\x8e\xab\xbe\xe6\x8d\xb8\xbb\x10\x1d\x31\x8c\xba\xe4\x41\xf0\x52\x17\x19\xd7\xd5\xa8\x30\x04\xb4\xed\xd0\x15\x5d\x10\x37\x0e\xcd\xd9\x84\xd7\x5e\xc0\xee\xb3\x7a\x2f\x20\x7d\x96\xa9\xea\x92\xb7\xae\x7c\xb8\x47\x27\x18\xba\x5e\x30\x3e\x4e\xcc\xce\x01\xf1\x9a\xe2\x04\x54\xb8\x3e\x94\x4b\x9b\x3e\x73\x5b\xe1\x36\x82\x26\x23\x4d\xa5\x96\x7b\xb4\x6e\xb9\x21\x3a\xeb\xb5\xee\x20\x7e\xeb\x73\x4b\xbc\x74\x5a\x0f\x18\xea\x46\x83\x90\x64\xd4\x15\x5f\x08\x58\xc2\xea\xf0\x5c\xa7\x3d\x5d\xb7\x43\x02\x0a\x02\x90\xd4\x36\xfd\xdc\x19\x1a\x04\x41\x50\x5b\x04\x17\x6c\x50\x2a\x24\x50\x73\x82\x4e\xbb\xb0\xb3\xbe\xb7\xe8\x76\x45\xd3\xab\xef\x56\xa4\x1c\x69\xee\x52\x88\xde\x1b\x1c\x90\xa6\x46\x80\x1e\x23\x17\x35\xd1\x97\x74\x0e\xc7\xe8\x08\xf9\x48\x06\x34\x4e\xff\x97\x76\xf5\xae\x63\xfc\x27\xfb\x6b\x7e\x74\x81\x0f\xdb\xfa\x4c\x28\x09\xe2\x93\xbc\xab\xa9\xd7\xe8\xae\x34\x05\x28\xeb\xb9\x7e\x43\xba\xb4\xa3\xe7\xb8\xf6\x5d\xf7\x2c\x2a\xaf\xaf\x1a\x90\x44\x7e\x0b\xe9\x1d\xa6\xd4\xfe\x7c\x94\x12\x48\xd4\x3a\x1b\x9b\x56\xca\xdc\xf7\x60\x6f\x7a\x5e\xf9\x06\x2f\xd0\xe7\xd6\xa7\xd8\x87\xee\x8b\x9f\xd8\x31\x7f\xf7\x5b\xee\x34\xcd\xc5\xc5\x4e\x35\x4d\x9b\xa8\x6f\x2e\x59\x31\xa5\xca\xa4\xd1\x38\x58\x98\x80\x35\x9d\xda\xbc\xf1\x70\xe3\x02\xa2\xb7\xd6\xdc\x97\x8e\xe7\x96\xb8\x2f\xf7\xf4\xe2\xc4\x97\x7e\x6f\xb5\xc9\xd8\xdc\x86\x6f\xee\x04\xcd\x35\x79\xd7\x0e\x37\x15\x28\x40\x1c\x99\x1b\x3e\x3b\x33\x42\xba\x8f\x80\xf4\xe9\xa7\x06\x70\xf1\x67\x5a\xc4\x46\xca\x94\x23\x64\x45\x1b\xc4\x6f\x8b\x7f\x35\xe1\xa4\x03\xb1\xaf\xa5\x8d\x74\xd7\x83\x3a\x9b\x2c\x46\xa3\xd1\x08\xf4\xfd\x46\xef\x1e\xc9\x0a\xa3\xe1\x62\x3e\xae\x3d\x1c\xe6\x89\x75\xd0\xa4\x45\xca\x96\xcb\x60\x67\xb1\x95\x09\xb2\x5a\xfb\xb3\x65\x59\x5e\x0d\x72\x58\x16\x2d\x06\x61\x8e\x5c\xbd\x1e\xb1\xb8\xdb\x72\x70\xe4\x50\x95\x08\x3b\xd6\x3a\xfe\x6e\xfb\x21\x4f\x31\xb8\x00\xe6\xad\xfb\x08\x5c\x1f\x70\xab\xe9\x00\x68\x8d\xe0\xe7\xd7\xeb\x08\x28\x6c\x5c\xfa\x3f\x7c\xc4\xa0\x24\x31\x11\x1e\x10\x4a\x44\xc8\x8b\xf9\x66\x08\x17\x39\x4d\xf0\xcd\xc6\xe8\x5e\x77\x0a\xf7\x44\xc5\x2a\x34\x5b\xe4\x55\x62\x74\x54\x8f\x3b\x09\x94\x37\xc3\xb8\xc0\x6a\xa0\xa2\x8e\x13\x8b\x89\x1c\xc4\x02\xb1\x25\xca\x46\x30\xcb\x36\x2d\x68\xaa\xd6\xc2\x50\xcd\x70\x8a\x4b\xae\x79\x1a\xa0\xc8\x3b\x80\xcb\x3e\x02\x6e\x29\x1d\x15\x10\x0e\x00\xbc\xcd\x3a\x6d\x3c\xa2\x13\x6c\x8a\xd1\xd9\x06\x31\x7a\x49\xae\xc4\x52\x1d\x6a\x4e\x91\x30\x1e\xe7\xb9\xfb\x6d\x13\x2d\x6d\x36\x10\xa8\x27\xb9\x5d\x66\x30\xbb\xc6\x69\xc5\x8a\xdf\xc7\x42\xf5\x4c\xef\x6d\xb5\x8d\xfc\x8d\x5f\xdb\x5a\xdd\x14\x6f\xbf\x48\x6b\x37\x72\x90\x2f\xa5\x12\xf3\x03\x62\x13\xb1\x7e\x85\x4b\x8e\x67\x78\xf7\x15\x4f\xc5\x81\x12\x8b\xaf\x72\xa9\x53\xa1\x60\x72\x1f\x43\x79\x03\x24\xb3\xcf\xda\x10\x13\x65\x23\xe9\x13\xd0\x03\x40\xdc\x32\xcf\x42\x62\x7f\xbe\xca\x8d\x69\x18\x3b\x61\xc4\x05\x3f\x30\x01\x53\xc8\x69\x49\x6f\x77\x29\x4a\x31\x15\x07\x33\x4a\x0a\x23\x32\xfa\x52\x8b\xde\xa0\x92\x63\xb9\x4b\xdd\x6c\x32\x9f\x9b\xbf\xf4\xc4\x8d\x27\x54\x4b\x2f\xe1\xb2\x1f\x6e\xc8\x98\xa0\x3b\x40\x99\x23\x50\xf6\x8d\x40\x95\x28\x1a\x06\xcd\x24\xf9\x8c\xfe\xb8\x94\x56\x31\x7d\xbb\x5b\x65\x0f\x8d\x93\x0b\x36\x25\x4d\xf0\xb2\x51\xd3\xfc\x9b\xa7\xeb\xe0\xdb\x98\xdd\x85\x8b\x6a\x5e\x46\xaf\xec\x7a\xa1\xe8\x7c\x8c\xd0\x76\xa6\x74\x9b\xdc\xa6\xd7\x6b\x78\xd7\x7a\x55\xaf\xd7\xef\x52\xae\xa7\xff\x52\x4c\xc5\x52\x8d\x77\x8f\xf0\x8c\xc8\x37\xac\x95\xf2\x4f\x13\x5b\xc0\x34\xa3\x05\x33\x56\xea\x33\xe2\xf5\x4e\x6b\x2a\x4b\x57\x05\x45\x7a\xcb\xf5\x8d\x8a\xa0\x16\xb4\xfb\xd7\x8c\x28\xf9\x1a\x7c\x16\x39\xbd\x94\x36\xee\x81\x51\xe3\xb2\x82\xbe\xf6\xc7\x02\x71\xb7\x7a\xa5\x0d\x0d\x88\xed\xc0\x5f\xd8\xbd\x25\xbd\x4a\xaf\x4f\x8c\x14\x18\x64\xa9\x66\x6f\x2a\x71\xc1\xcc\xc1\x19\x27\x81\x27\xc1\xa7\xd1\x33\x7b\xaf\xdb\x26\x79\x61\x0f\x4f\x05\x3f\x63\x53\x94\xed\xd0\xc9\xff\x9c\xfc\xf4\x7a\xb4\x20\x95\xa4\x31\x47\x14\x9e\x8c\x89\x73\x5a\x30\x59\x7f\xb1\xbe\xa8\xa1\x2e\x03\x65\xa3\x60\xaf\x86\x49\x09\x6c\x50\x01\x12\x5f\xb4\xe4\x37\x6e\x96\x17\xce\x51\x24\x32\x17\xf3\x6a\x9c\x82\x41\xa6\x99\x91\x12\x2f\xc5\x25\xad\x9e\x12\x69\x6e\x22\x28\x84\x58\x08\x5f\xbc\x63\x2b\xf9\x99\x7c\x1e\x5e\x2f\xab\x72\x8c\x66\x4a\x2d\xe4\xf8\xf0\xd0\x41\x81\x91\x7c\x78\x40\x97\x07\x97\x54\xaa\x83\xe3\x11\x99\x93\x5f\x04\x27\x97\x52\x5f\x8f\x43\x7d\xe2\x87\x9e\x7f\x14\x18\x05\xba\x21\x8e\x81\x29\x78\x9c\x9f\x4e\xea\xaf\xcc\xc5\xfc\xff\xfb\xf3\x77\xc8\x70\x5b\xc0\x63\x81\xb2\xc5\x6a\x3b\xc6\xb1\x4a\xc0\x3a\x82\x59\x2d\x1e\x35\xae\x3e\xcd\xaf\x1a\x67\x98\xcf\x2e\x22\xba\xbb\x89\x00\x2e\x6f\xa5\xb9\x8c\xb4\x51\x91\xf6\xc9\x64\xf7\x8a\x85\xde\x36\x2a\xd6\x29\x0d\xc5\xde\xa6\x1f\x8c\x8c\x44\xc4\xbe\x99\x5a\x44\xa2\x3f\x0c\x5b\xc2\xf3\xa0\x1f\x60\xa3\xde\x4b\x63\x38\x67\x3a\x5a\x80\xda\xe8\xb5\xb1\xe5\x81\xe8\x51\xb7\xd0\x71\xc6\x03\x2e\xf9\xf6\x43\xae\xeb\x62\xed\xea\xd9\x2f\xec\x9d\x20\x52\xd5\x7a\x4c\xab\x16\x85\xcd\x08\x48\xaa\xc6\x79\x27\x0a\xec\x91\x27\x54\x1d\x36\xcf\x03\xf4\x99\xe2\x70\x7b\x77\x3e\x8c\x14\x20\x4d\xf3\xd6\x1a\x86\x62\x1a\xc4\x13\xb6\x7a\x7f\x23\x27\x8d\x14\x58\x21\xf4\x6c\xb4\xf0\x19\xd3\x4c\x23\x70\x4c\x6f\xef\x3c\x18\x90\x36\x3d\x24\x83\xb5\x44\xa9\x64\xe3\xc5\x64\x56\xd8\x5b\x1b\x00\xab\x2c\xfb\x9e\x96\x92\x0e\xac\xd1\xa8\xb2\x46\xa3\x8c\x9f\x09\x34\xf6\x47\xa5\x7f\x0e\xaf\x8d\x07\xb4\x06\xeb\x73\xe7\x1b\xb9\x8a\x0d\x28\xad\xa2\xb2\x6e\x67\xbf\x6c\x6e\x7a\x49\x2a\x1e\xb4\xd3\x3f\x19\x9f\x6e\x6e\x07\x5a\xcd\xba\xa1\xf9\x9d\x6e\xb6\x0a\x14\x86\x3f\x2f\xe7\x8b\x77\xc2\x66\x5c\x03\x19\x5b\xe8\x62\x08\x26\xa7\x93\x86\x73\x9e\xc9\xab\xd4\x14\x97\xb7\xbd\xd5\x9c\xcb\x3a\xa5\xe7\xd6\x8b\xcb\x11\x12\x58\x85\x7e\xdc\x6b\x83\xe6\x22\xac\x9a\x12\x5a\x7d\x4c\xf7\x3e\x5a\x20\x47\x8e\xc7\xc3\x1c\x07\x46\x6c\x46\x08\x67\xd0\x56\xf0\x82\x02\x08\x1b\x18\x2a\x39\xa8\xd8\xc0\x7d\x92\x52\xdd\x81\xf5\x13\x89\x6c\x17\x22\xac\x17\x67\x81\xec\x98\x35\xd8\x88\xba\xe4\x9a\x3f\xb2\xb2\xd4\x97\x25\x9c\x9b\x03\xd9\x4c\x26\x72\x90\x75\xf4\x0a\x4c\xad\x46\x77\xa7\xd0\x23\x28\x7b\x80\x18\x58\x56\xb4\xb8\xc7\x11\xe4\x5c\x2d\x5a\x9c\xa1\x58\x65\x3b\xfd\x69\xf8\xa4\xa9\x68\x1f\xba\xfd\xeb\x72\x96\x59\x47\xb5\x6f\x65\x47\x6b\x77\x67\x41\xa6\x2e\x4c\xec\x17\x67\x9a\x17\xe9\x25\xd7\x53\xbc\x15\x93\x6c\x9a\x7f\x71\x26\xd9\x2f\x72\x76\xbc\x66\x95\x6e\x9a\xdb\x2d\x54\xf0\x53\x41\xaa\xe2\xd0\xf8\x25\x1e\x38\x78\x96\x60\x54\x7f\xe3\x8b\x7d\xbd\x15\xd7\x28\x69\xc5\x48\x59\x33\x9b\xd6\x76\xa3\x5c\x4e\xf5\xff\x16\xb5\x33\x3e\xf5\x72\x03\x5e\xd0\x2a\x72\x16\x6a\xa5\x09\x92\x4a\x6f\xea\xf1\xc1\x19\xab\xa4\x8a\xb5\xab\x6d\xc7\xcb\x66\x5d\x3c\xf0\xdf\x4a\xe2\x9b\x9f\xd3\xab\xe5\x62\x18\x28\xdf\xfa\x8c\x79\x41\xca\xa1\xa6\x7f\x3b\xaa\x06\xdd\x9b\x9a\xad\xe8\x16\xba\xf0\x40\x5a\x2d\xd6\x88\x28\x55\x0d\x91\xac\x72\x84\xd1\x21\x91\x92\x2a\x79\xc8\xe6\x53\x7f\x0d\x16\xb4\x92\x82\x1f\x4c\x2b\x4a\xf9\x68\xa1\xe1\x72\x2b\x0c\xc6\xad\x3a\xac\x68\x01\xdd\xad\xba\x77\x8f\x83\xdb\xb9\x38\x3b\x1b\x22\x63\x07\xa6\x7f\x70\xf7\x77\xdb\x8c\xb7\xf7\xee\xb5\x03\xfe\xa7\xaa\x76\x3b\xca\xf6\xdf\xfb\x1e\x35\xbb\x87\xb1\xf6\x09\xf5\x6d\x05\x14\x9d\x50\xfd\x8f\x6c\xbf\xfa\x4a\x92\x82\xfe\xb4\x34\xb4\x84\xb8\x8c\x36\xc9\xd2\x18\x41\x77\x9a\xc2\x4e\x0d\x72\xd4\x5a\xa2\x1d\xe0\x81\x1d\xe0\x05\xef\xbc\xf4\x0f\x0e\x16\x44\xca\x4b\x51\x15\x1b\xdf\x47\x5d\xf5\x20\xd7\x88\xbe\x9a\xf7\x7f\x13\xd1\x30\x66\xb3\x2d\x1d\xf4\xd7\xef\x6e\x6e\xb6\x6c\xf2\xc3\xb7\x47\x37\x37\x1d\x47\xd5\x6e\xb4\xcd\x62\x4c\x03\xa3\xe0\xcf\xb2\x71\x9f\xcb\xb0\x09\xa0\x04\x55\xd3\xc6\x17\xc9\xdb\x71\xb7\x17\xba\x6e\xea\xb7\x02\x86\xbf\xe9\xe4\x3b\xe1\xcb\x83\xad\xe1\xcb\x6e\xdf\x2b\xb2\xf5\x0d\xbc\xdd\xa5\xed\x02\x2f\xc9\x27\x98\x32\x18\x4a\x54\x4f\x1f\x4c\xe7\x0d\x88\xda\x6e\x0b\x30\xbb\x9f\x4c\xcb\xfc\x68\x53\x83\xdd\xc9\xa4\xef\xfe\xf5\xda\xb5\xfe\xf7\x73\xdd\xd4\xbe\xf8\x66\xde\x23\x6e\x79\xb0\x16\xb7\xb0\xb3\xe1\x6e\x02\xbf\xf8\xd0\x0d\xfd\xd0\xcb\xc3\x00\xbd\x58\x6a\xf0\x4f\xd7\x03\xe4\x77\x65\x3c\x40\x7f\xda\xef\x7b\xce\xfb\x7f\x42\x78\x80\x80\x10\x84\x96\x7a\x2e\xfa\x17\x94\xd4\xe0\x68\x4d\xb7\x09\xe2\x01\x5a\x7b\x40\xbc\xb6\x71\x93\x20\xd8\xff\x13\x1a\xac\xfe\x84\x45\xef\xcb\xba\x43\x43\x1f\xe7\xda\xb6\xcd\x82\xbb\x21\x1d\x39\xfa\xd6\xdb\xb0\x85\x56\xe1\x20\xc2\xbe\x76\xbd\x8e\x05\x36\x8e\x19\x63\x35\x32\xff\xaf\x76\x68\x53\x56\x10\xca\x59\x87\x28\xf8\x25\xaa\xb1\x63\x17\x50\x9c\x69\xab\x15\x4f\xbf\xa2\x67\x6b\x23\xed\xcb\x43\xb4\x5f\x4f\x7c\x1f\x99\x9f\x9a\x36\x5f\x65\xab\x44\x8c\xff\x66\xc7\xc8\xd8\xb1\xf7\x78\x45\xc1\x43\xd8\x06\x0a\x6e\x7e\xc0\xd6\x92\xbe\x3f\x7f\x0c\x61\x94\xec\x7f\x07\x15\x95\xcb\x52\xc9\x2f\xc7\x3f\x6e\x1f\x9e\x02\xa6\xfc\x66\x56\x11\x09\x11\x84\xcd\x4a\xfe\x4f\x33\x82\x2d\x4f\xbb\x73\x7a\xa5\xb7\x31\xe9\x68\x67\x92\xa5\xd0\xf7\x6f\x5f\xf8\x49\x05\x12\x2b\xdf\xd0\x60\x6d\x88\x19\x3a\xbe\x36\xe1\x39\x77\x8f\x70\x5e\x51\xa2\xc0\x2f\x0d\x64\x50\xe6\x4f\x22\x73\x5d\xa8\x39\x7a\x13\xfa\xf2\x2e\xce\x69\xee\x5c\x32\xac\x26\x1f\x3e\x62\x3e\x41\xaf\x85\x9a\x31\x3e\x1d\x9c\x89\x25\x2f\xd0\x0e\x3b\x1b\xd6\x01\x14\xb2\x6b\x35\xf9\x34\x5a\x72\xf6\xef\x1f\xf5\xd9\x84\xe7\xe7\x16\xdb\x96\x61\xfa\x98\xb5\xc7\x93\x20\x88\x16\xaa\xe8\x19\xad\x28\xcf\x29\x1a\xd7\x7f\x4b\x84\xa5\xa9\xa7\x7c\x3d\x2f\x15\x8c\x42\x4e\x30\xdf\x13\x26\xbe\xf2\x0e\x0f\x9c\x88\x18\x46\x83\x5a\x09\x24\x30\x1a\x30\x1e\x7c\x20\x51\xb1\x0c\xa3\xb9\x86\x07\x1f\x86\x62\x0f\x94\xe7\x51\xce\xb2\x29\x55\x51\xc6\x32\xb8\x28\x36\x00\xac\x35\x32\x36\x6e\x57\x22\xbb\xb9\x69\x06\xc4\xb0\xaa\x80\x3a\x4c\x96\x3a\x11\x95\x32\xe1\x49\x21\xa5\xf5\x6d\x86\xfd\xa9\x32\x22\x81\x7a\x64\xd9\x1a\x59\x76\x8e\xec\xa3\x8a\x88\x4a\xbd\x85\xeb\x31\x54\xd9\x0a\x87\xbf\x13\xa6\xa2\x8d\xd7\x13\x05\xc1\x6f\xed\x04\xd5\xf4\x22\x37\x74\xee\xde\xde\x90\x4e\xea\x70\xb9\x81\x27\xb3\x1a\x19\x71\xf3\x9a\xbd\xf5\x71\x75\x31\x1f\xd9\xb7\xd2\xe8\xce\x7e\xed\xd9\x9b\xaf\xad\x3b\xb4\x2f\xae\xd1\x61\x45\x2f\x98\xec\xdd\xa1\xed\x03\x3a\xd4\x0f\xf6\xb1\xe9\xac\xa2\x17\xb4\x92\xd4\x45\x68\xd8\xd8\x17\x9c\x27\x46\x36\xb3\xc4\xb8\x67\x75\xa2\x6b\x27\xb4\x41\x46\xa9\xd4\xce\x0b\x01\xe6\x99\xd7\x8d\x78\x1e\x80\xf1\x03\x0d\x94\x59\x1b\x44\xb1\x6d\x7a\x0f\x40\x91\xdb\xc5\x86\xcd\xbb\x2d\x75\x5b\x62\x32\x6d\x06\xaa\x15\xd7\xaa\x73\xa8\x54\x67\xf5\x50\xa9\x89\x74\x0d\xe5\xbe\xdf\x72\xa8\xf5\xab\x3a\x8a\x83\x54\xc8\x3c\x31\x8c\xfe\x9a\x9e\x32\x48\x92\x1b\xf3\x35\x1f\xbb\x7a\x49\xcd\xc6\xf6\x72\x64\xad\x99\xe1\xea\xfa\x5c\x1b\xe1\xbb\x6e\x19\xeb\x1a\x4c\xb4\x9d\xad\x4f\x8c\xe9\x2f\x4c\xb0\xb2\x2f\x85\xe6\x61\x12\xdd\x81\x12\x5c\xf4\x57\x8b\xdd\xe3\xec\x78\x86\xd6\x81\x40\x85\x1a\xc1\x3a\xdc\x6c\x14\x7b\x44\xe5\x33\x1b\xd0\xc9\x58\x60\xdd\x2e\x64\x7e\x4d\x27\xd4\x3b\x7f\xe6\x82\x00\x05\xf5\x82\xe1\xc2\xaa\xe1\x67\x57\xff\x8c\xea\xd7\xaa\xa9\x48\xf8\xc3\xd9\x9c\xfb\xd9\xa7\x88\x0d\x5c\x88\x7c\x9c\xec\x17\x02\x5b\x3e\x13\x1a\x72\xd4\x8e\xac\xeb\xea\xfe\x8d\x95\xc6\x71\x9a\x4c\xd7\xd5\x7a\x47\xa6\x28\xc3\xd6\x68\x75\x5d\x45\x67\x44\x91\x61\x59\x8a\xae\x2e\x75\x11\xca\x34\x2d\xef\xd6\x34\xa9\xff\xb4\xa1\x1e\xf1\xd1\x6e\xf8\xd1\x87\x40\xa4\xa3\x42\xe4\x37\x37\x74\xa4\xc8\x54\xff\x67\xe7\xa4\xff\xac\x17\x9c\x3d\x0e\x55\x6f\xf6\x4e\xd9\x1c\xd3\x1d\xfe\x8c\x9e\xc4\x85\x4c\x59\xed\xef\x71\x2c\xd0\x08\xf8\xda\x68\xa5\xa9\xa3\x72\xc1\x2e\xad\xd4\xe4\x61\x90\xf8\x28\xb8\xaf\x06\x10\x84\x5e\x48\x71\xd9\x51\x7c\x59\xb6\x7f\xe1\x66\xb2\x87\x84\x55\x46\x55\x76\xa8\xae\x16\xd4\x64\x15\x17\x5f\xd0\x58\x14\x72\x21\xa2\xae\xa7\x08\x28\x8f\x28\x12\xbd\x20\xaa\xc8\xa8\x22\x97\x3f\x8a\xe2\x0a\x45\xc7\xc0\xe4\x33\xa6\xe7\x97\x08\x90\x11\x37\x8a\x82\x81\x99\xfe\x41\x6f\x4b\x78\x4e\x63\x77\x41\xf7\xd1\xf8\x95\x60\xc1\x9f\xf8\xad\x69\x12\x4f\x8b\x36\xd1\xa4\x07\x35\x9e\x41\xe0\x30\x66\xa2\xc1\x07\x19\xe1\xdd\x74\x70\x73\x2e\xb1\x67\x0b\x0c\x89\xb2\xa1\xc2\xfc\x7e\x4e\xbd\x32\x7a\xa3\x2f\xe9\x07\x70\xab\x45\x9c\x12\xe9\x6e\xec\x01\xa4\x6c\xbc\x63\xd0\xa3\xaf\x2e\x39\xef\xe9\x52\x9a\xcc\x0a\x73\xb1\x94\x54\x55\x64\x61\xd3\xe4\xcc\xc4\xe5\x4b\xc6\xcf\x8d\x7b\x9d\x2e\xef\x91\x94\x56\x5f\x47\x97\x80\xc0\x98\x6a\x52\x99\x6f\xac\x4f\x3f\xe7\xb4\x5a\x68\xc0\xad\x7f\xbe\x28\xda\x01\x7e\x4c\x90\xc6\x35\x91\x97\xe1\x15\x58\x87\x72\xf3\xcb\x9d\x58\xed\x30\x66\xdc\x51\x33\xbc\xd0\x74\x38\xbd\x84\xec\x3f\x6f\xe0\x07\x32\x03\xbf\x73\xb6\x38\xb7\xc3\xd0\xbe\x8b\xf0\x65\x85\xfb\xe1\xb2\x0f\x5a\xed\xe9\x26\x56\xdb\xd1\x55\xba\x23\x6b\x29\xf7\xe3\xd5\x8b\x42\x63\x15\xb3\x0d\x7e\x85\xfb\x91\x0d\x2a\x78\xb0\xbc\x00\xce\x21\x84\x0a\xee\x70\x43\x6e\x8a\x67\x26\x58\x22\xa7\x97\x83\x57\xae\xdc\xba\xd6\x9d\x6a\x7c\x85\x0c\x39\x38\xcc\x26\x3f\x0c\x23\x96\xcf\x41\x27\x8d\x3b\x7c\xe5\x0f\x28\x57\x55\xb9\xaf\xdf\x44\x0e\x19\x19\xf7\xf5\x03\x6f\xb7\x76\xa0\x05\x5a\x07\xb4\x8b\x9f\x22\xe6\x6d\xc9\x6d\xb8\x4e\xb8\x27\x28\x73\xb2\xaa\x4e\x0d\x98\x6e\x92\x8d\xc0\xa6\x7a\x78\xab\xac\x93\xb3\x30\xa9\x82\x7f\x0e\xe9\x74\xff\xc9\x3d\xa6\xa0\x38\x5c\xf2\x7a\x47\xf5\xab\xb5\xbf\xd3\x9b\xd6\x40\xf3\x4f\x02\xc9\x71\xe0\xc8\xb1\x94\x26\xd6\x7b\x6d\xe6\x15\x6f\xd0\x3b\x7b\xed\x5c\x22\x82\xa8\x71\x4f\xab\x42\xd7\x36\x8d\x19\x92\xc3\x45\x28\xad\xb9\x43\x16\x57\xa2\x6c\x47\x83\x98\xdd\xc9\x84\x0e\xb3\xbd\x3d\x3a\xb4\x54\x53\xe8\x2c\x59\x30\x99\x93\xaa\x00\x2f\xbb\x83\xe6\xe9\x83\x07\x64\xed\x3c\x39\xee\x46\x9e\xcf\xa0\xa3\x61\xca\xbd\xb3\xc7\x20\x31\x5a\x8c\xbb\xb6\xf0\x23\x05\x91\x6a\x30\x83\xe2\x7c\x31\xb2\x59\x8c\x3d\x18\x9a\x4c\x26\xf4\x31\x7a\x5e\x30\x35\x78\x25\x0a\x8a\x6a\x00\x15\x4f\xc2\x7f\xad\xf3\x67\xf8\x9b\xd9\x4a\x04\x12\xde\x59\x08\x22\x0f\xa6\xc5\xfa\x7b\x20\x7f\x5b\x77\xd1\xa3\xc1\xeb\xd6\x28\x1b\xb6\xdc\x3b\x36\xa5\xe4\x4b\x60\xd5\xdf\x8d\x67\x47\x6e\xce\xde\x66\x30\x37\x37\x08\xd9\x57\x6a\xbf\x9d\x90\x0b\x8a\xb0\x43\xa7\xbf\x3e\xba\x4c\x1b\xe3\xec\x78\x50\x1e\x02\xf1\x84\x78\x39\x05\xce\x57\x19\x6e\x34\xef\x00\xeb\xeb\xfa\x0b\x00\x7c\x42\xa3\x6c\xd0\xb3\x5d\xf4\x16\x9a\x3b\xc0\xea\x6e\xed\xdb\x36\x74\xe3\x6d\x89\x2f\x36\xcd\x62\x6b\xf4\x13\xba\xe6\xdd\x37\x90\x44\xf7\x0c\x0f\xd1\x3a\xd0\xb7\x0e\x27\x05\x18\xa7\x0b\x39\x79\xa2\xc8\xc5\xf1\x48\x29\x9b\xa2\x93\x5b\x1f\x0d\x3f\xc6\x6e\x33\x22\x9f\xbb\x33\xda\xdb\xeb\x9c\x83\x3f\xc7\xcd\xb3\xa8\x8f\x7c\xc3\x3c\x7a\x60\xca\x9a\x20\x6c\x99\xd5\xf6\x87\x9d\xbf\x53\x6e\x2a\x17\xc5\x57\x22\x04\xb0\xaf\xcc\x84\x6e\x24\x53\xaa\x79\x62\x08\x4e\x5a\xd0\x93\x2b\xae\xc8\x67\xe0\x82\xf4\x6f\xc8\xa1\x0b\xbf\x61\xda\x77\x67\x52\x74\xbf\x9d\x4c\x8a\x34\x13\xb8\xdf\x41\xa0\xcf\xf6\x58\x3d\x43\xcc\x9b\xd6\x36\x88\xe4\xe4\xc3\xc7\xae\xb8\x7d\xb1\xc4\xc3\x27\x5a\x41\x7f\x3d\x5c\x54\xf4\x07\x08\x57\xc3\x27\x43\x35\x51\xbe\xec\x4f\x7f\x5d\x54\x74\x60\x2c\x73\x27\x30\xe3\x39\xd3\x38\x70\x90\xcf\x0f\xe4\x81\x14\x25\x31\x31\xb7\xe1\x67\x41\xaa\x73\x34\x28\x88\x22\x07\x25\xe1\xd3\x09\xfa\x93\xee\x32\xf3\x99\x4c\xfe\x84\x7e\xf8\x93\x49\x8b\x35\x17\x85\x75\xd5\x9a\xb3\xcf\xb4\x40\x90\xb9\x10\xfd\xe3\xdd\xab\x97\x68\xf5\xfd\xc1\xf1\x2e\x44\x8a\x17\x13\x65\xdc\x98\x4c\x7a\xde\xe1\x91\xc9\x4c\x1e\x7d\xe2\xfb\x0f\xb2\x26\x9b\x67\xe5\x27\x4e\xd1\xf6\xe1\xe3\xce\xa7\x11\x25\xf9\x6c\xf8\xc9\x69\x7b\x9e\x8a\x82\xbe\x32\xab\xd0\xf0\x95\xbe\xe0\x67\xc2\xa9\x9c\x70\xc2\xe6\xc0\x4c\x56\x99\xaa\x30\x4f\x08\x42\xb7\xda\x91\x71\xe6\x48\x0c\x75\x26\x93\x89\xb0\x09\x32\x87\xa8\xbe\xb0\x90\xe2\x2e\x64\x59\xc2\x43\x33\xfa\xb9\x44\x20\xc7\xa0\x7d\x96\x85\x59\x56\xc3\x8e\xa5\xcf\x19\xa4\xc7\x47\x38\xd8\xd8\x2c\xed\xaf\xa6\x1f\x1f\x9d\x04\xfb\x70\x56\x89\xb9\xa6\x77\x9f\x54\x94\x0c\xbb\x98\xdb\x7a\x5a\xee\x9d\x69\x02\xfc\x5a\xcd\xa8\x3e\xbc\x39\x51\x60\xa1\x82\x4b\xc6\xe9\xeb\xa5\x09\x29\x3f\xde\x3d\x32\x3f\xff\x55\x91\xc5\xc2\x58\x29\x1f\x61\x7d\x1b\xb8\x7a\xcf\x99\x1a\x3f\xc2\x8a\x9c\x9e\xb0\x5f\xe8\xf8\x11\x06\x60\x61\xa2\xc7\x92\xe9\xb3\x4a\x2c\xc6\x9a\x40\xd9\x09\x26\x69\x29\x1c\x69\x32\x4d\x4d\x82\x77\x56\x13\x45\xaa\x62\xd3\x29\xad\x86\x8e\x2c\xca\x56\xad\xf4\xdf\xe1\x96\xee\x34\xfd\x98\x6e\x6e\xc2\xdb\x41\x96\x4a\xbc\x14\xa4\xd0\xf4\xbe\xa6\x68\xcd\xf9\x5a\x8b\x23\x38\x38\xb7\xe5\xb6\x28\x0a\xf4\xed\x61\x13\xe4\x3d\x4f\xf2\xb6\x6d\x3f\x55\xdf\xa8\xcd\xa5\x2a\xe1\x8f\x28\xc3\x74\x62\x20\x5e\x7a\x3c\x17\x28\x74\x4a\xd5\x9b\xb7\xcf\x3b\xc6\x81\x4d\x30\x13\x6f\xe6\x8f\x08\x66\xa1\xbf\x3c\x13\xf9\xd0\xfc\xf1\x4f\x7d\x46\x43\x07\xc1\xee\x08\x1b\xea\x18\x48\x06\x2e\xf8\x50\xa0\xd8\xc1\xa3\x86\x38\xdd\x4c\x17\x3c\x02\x53\xc2\xd6\x68\xeb\xba\x0e\x51\x61\x6a\x0f\x51\xb5\x0f\xd1\x17\xf9\x3d\x75\xc4\x5e\x43\xab\x17\x3e\x3e\x7d\xb4\x6b\x84\xcc\x9e\x5c\xbc\xb9\xd9\x3d\x8e\x32\x29\xa7\x37\x99\xc9\xa7\x25\x25\x7c\xf8\x6b\x0a\x9f\xbb\x64\xcd\xe6\xaa\xd8\x9d\x09\x65\xd3\xf6\xc3\xa9\xa9\x6c\xb3\xba\xd5\xc2\xf6\x7b\x17\x4c\xd7\x54\xc8\x97\x27\xa3\xf4\x5c\x12\xc4\x47\x88\xba\x6e\x1d\xac\x61\x4b\x29\x4f\x9a\x98\xb0\x94\x7d\x37\x42\xbf\x4f\x4c\x8e\xd5\x84\xc6\xc8\x1c\x70\xb5\x8a\xf2\xad\x45\xaf\x23\xc2\xdf\xaa\x05\x20\xe1\x02\x86\xb5\x94\x46\xe9\x1a\x17\xf6\xc7\xd9\x2e\x9b\x8d\xb2\xb8\x9a\x06\xb8\x9a\x5a\x5c\x4d\x1d\x6e\x4e\x23\x82\x2e\xd4\xaa\xba\x62\x55\xff\x96\x67\x8c\xd5\x04\xc4\xe6\x11\x79\x88\xd1\x41\x6e\x40\xb7\xb5\x2f\xdd\x1a\x9b\xff\xba\xa8\x1b\x57\x94\x14\x3f\xf1\xf2\xca\xbc\xbb\x96\xb1\xd5\x1a\x2c\x2c\xd6\x61\x61\x8e\x85\x85\xd2\xbc\x0d\xc0\xc5\x7a\x2c\xcc\xb7\x96\x30\x27\xe2\x48\x6c\x87\x9f\x3b\xa7\xa2\xcb\x6e\x07\x1e\xcf\x4a\x71\x99\xcf\x48\xa5\xbe\x0e\x4e\x6d\x63\x54\x13\x33\x93\x75\xa6\x1b\x4e\x1e\x15\xf0\x7c\x97\x84\x29\xef\xd3\x46\xa6\x15\x99\x83\xea\xc7\xfc\xf9\xff\x5e\xbd\x34\x09\x09\x9c\x46\x48\x5f\xb4\xab\x77\xe2\x84\x40\x6e\x71\x2b\xbd\xfd\xd1\x44\x0b\x7f\x4a\x16\x10\x1b\xdc\x2b\x93\xf4\xf6\x3d\x25\x65\x79\x4a\xf2\xf3\xfb\x65\x1a\xfd\xc1\x74\x72\x8e\xb7\xd3\x5d\xd9\xcd\x68\x1a\x05\xd9\xdd\x58\xa3\x06\x0f\x23\x93\x6e\xd6\x7d\xf5\x8f\x69\xd1\x2f\xb0\xa6\x1b\x7c\xb9\x80\x4b\x7f\x7b\x0d\x8f\xa2\xa4\x2a\xc4\x25\xf7\xfd\xe0\xa8\xdb\xeb\x88\xdb\x0d\x19\x38\x63\xe5\x9a\x82\xc3\xcd\xaf\x21\x10\x36\x62\xa6\x41\x14\xd5\xbc\xa8\xc8\xe5\x88\x89\x81\x7f\x8d\x83\xa2\xee\xcd\xe5\x1e\x55\x61\x08\xc6\xcd\x7d\x71\x31\x30\x61\x2f\x06\xa0\xdf\xb7\x31\x5a\xba\x80\x35\x6d\xf1\x5d\x56\x30\x1e\x44\x96\x81\x09\x64\x2e\x73\x97\x80\xb0\x1a\x3e\x14\x03\x53\x68\xec\x63\xe0\xff\x0b\x0c\xd2\x17\x42\x2a\x97\xd0\xd4\xf4\x04\x48\x98\x9d\x5d\x0d\xaf\x81\xf4\x1e\xa3\x52\x90\x02\x99\x58\xf3\x9a\xed\x1a\x1f\xe3\xcf\xf3\x72\xc1\xa7\x2e\xad\x85\xbb\x86\xfa\x7e\xa3\xff\x6a\xe4\xc2\x22\x17\x14\x8d\x69\x74\x5f\xff\xdf\xab\x97\x1a\x50\x7f\x9e\x97\x1a\xd4\x30\x7e\x21\xce\xa9\x0b\xac\x19\x99\xd8\xd9\x01\xd7\xb4\x8f\x32\x50\xe9\x59\x8e\xc3\x98\x0e\x9f\xf5\x82\x41\xec\x6d\x89\xe4\x80\x78\x8e\xa2\x3f\x98\xd1\x9b\xe3\xe8\x41\xcc\x7e\x3a\x07\x93\x00\xcc\x58\x23\xbc\x1d\x6b\xd6\x4f\x8a\xe2\xf9\x85\xc9\x6d\x29\x15\xe5\x9a\xfb\x9c\xfb\x64\xb3\x51\xca\xfb\x00\xf4\x18\xd2\x02\x37\x6f\xb6\x73\x14\x00\xf9\x79\x67\xa7\xb5\x91\x59\xd8\xa3\x7e\xc7\xf1\x7e\x5e\x77\xc8\x78\x83\xad\x8c\xa5\xab\x83\xd0\xbe\x29\x5e\xee\xce\x56\x52\x81\x5b\xdc\x33\x7b\x0c\xf8\x4c\x54\x73\xa2\xc6\x08\xae\x19\xd2\xd7\x6d\x9c\x9e\x3a\x96\x0b\xc6\xc7\xc8\x64\xf4\xd2\x2f\xd8\xde\xc0\x15\x9e\x02\x32\x00\x38\x25\x4e\x35\xae\xd1\x1b\x18\x2d\x29\x76\xf9\xa9\x07\x08\x2b\x25\x02\x73\x78\x8a\xac\xc9\x55\x45\x8c\x96\x7f\x14\x3b\x61\x98\x0f\xa3\xce\x5f\x03\xad\x1b\x6c\x19\xf7\x57\xaf\x05\xbd\x1d\xe0\x5e\x8b\x25\x9a\x2c\x99\xc9\xe5\xb0\xca\x7a\xd9\x46\x05\x6c\x6b\x62\x55\x91\xad\x54\xbc\x8c\x36\xdb\xda\xbc\xe3\x9b\xd5\x16\x34\xd4\x92\xd6\xeb\x3a\x4a\x20\x34\xc7\xad\xc7\xf7\xfe\x96\x8c\x67\x83\xb2\xfa\xf2\xdc\xe7\xed\x56\x51\x91\xf9\x57\x22\xc5\xff\xc3\x94\xef\xb7\x31\xe5\x0b\x8e\xfc\x77\x7a\x69\xa7\x74\xce\x38\xeb\xba\xb5\x6b\x0c\x0f\x1c\xfb\xf0\x25\x4d\x0f\xfe\x3f\xf6\xfe\x7d\xb9\x8d\x1b\x69\x1c\x86\xff\xf7\x55\x8c\xb0\xbf\x4f\x21\xd7\x43\x8a\x94\x4f\x09\xb3\x8c\x7f\x8a\x64\x3b\x7a\xd6\x07\x3d\xa2\xbc\xfb\xe4\x91\x55\x2e\x70\x06\x24\x11\x0d\x81\xc9\x00\x23\x89\x91\x59\xf5\x5d\xc4\x7b\x85\xef\x95\xbc\x85\x06\x30\xe7\x21\x87\xb2\x64\xcb\xd9\x24\x55\x16\x07\x68\x9c\x1a\x8d\x46\xa3\xd1\xe8\xb6\x67\x9c\x95\x0e\x3d\xd6\x9d\x73\x72\x6e\xe1\x9a\xf8\x38\xd4\x54\x14\x0b\x12\x0d\xaf\x4d\xec\xb3\x4b\x1e\x9d\xeb\xd0\x63\x69\x9c\x34\xf0\x3b\x34\xbc\xae\x8c\x76\x66\x6c\xca\x97\x0f\x64\xb4\xb8\xce\x79\x29\x2c\x2c\x2d\xcf\xb8\x32\x6c\x2f\x3d\xac\x64\x4b\xd6\xbe\x5e\xa6\x3b\x1b\x69\xc3\x6b\x9a\xeb\xbd\xa3\xc3\x7f\x12\x50\x95\x69\xe3\xf7\xc1\xf5\xd2\xa5\x92\xcc\x21\x10\xf0\xa0\x07\x01\x96\x10\x72\x55\x97\x0f\x7d\xf5\x2d\x48\xc4\x4c\x78\xb9\xa4\xeb\x90\x93\x7c\xd9\x58\x6d\xf9\x73\x34\x74\xc6\x25\xed\x8c\x6e\xdf\x2e\xc3\xf2\x76\x61\x8c\xbd\xb3\x53\x84\xda\xc6\x64\xba\xb4\xbe\x15\x60\x44\x64\xce\x92\x3f\x19\x7c\xe1\x55\xaa\xda\xa6\xaa\xf6\xde\x6c\x2f\xbb\x1a\x27\xc8\x25\x5d\x1c\xd2\x73\xb2\x28\xe6\xc7\x51\xa0\x32\xe3\x28\x28\xe5\x18\xec\x40\xb6\xf9\xdd\x4e\xea\xc9\x04\xef\x87\xd2\xf9\x6f\x03\x9e\x49\x94\xc6\xfe\x03\x82\x7a\x66\x1f\xa7\xd6\x8e\x62\x5a\xe8\x8b\x92\xeb\x2a\x6a\xd2\xb7\x0c\xff\x4e\x28\xaf\xf6\x98\xec\xda\x89\x5a\xb1\xb5\xaf\x9a\x2b\xe2\xa2\x84\x2c\x1a\x4e\x8f\xf1\x7b\x99\x1b\x4a\x86\xd0\x90\xe2\x54\x29\x8a\x7a\x69\x7c\xea\xd3\xde\x59\xf7\xd0\x2f\xce\x48\xb6\x28\xdc\x45\x9a\x61\x24\x63\x4f\xb4\xe5\x01\xf1\x52\x94\xb4\x58\xd3\x23\xb3\x91\xfe\x13\xd7\xcf\xbd\x24\x62\x53\x77\xcc\xfd\x85\xc9\xf8\x85\xd0\xe9\x4c\x87\xe5\x2a\x4f\x5c\xf5\xcc\x66\x7a\x78\x7a\x56\x5d\x4e\xcf\xe3\xa1\x24\xf3\x3b\x9d\x42\xc5\x0f\x9a\xaf\xae\x4a\x1d\x6a\xd5\xd9\xfd\xd3\xa7\x96\x19\x94\x69\x80\x14\x27\x2f\x61\x44\x69\xe8\xf0\x4a\x44\x94\x30\x78\xf3\x3e\xd4\xa0\x1a\x70\x5d\xa4\x91\x9c\xc8\x91\x13\x33\x32\x93\xd7\x7e\x90\x86\x95\x4e\x3a\xc9\x6c\xa4\x13\xd5\x10\x73\x33\x41\x80\x58\xf7\xd0\x1f\x0e\x87\x20\x92\xe8\x5f\xdb\xdb\xad\x3c\x56\xcc\x2b\x25\x97\x75\xf5\x13\x9c\x95\x24\x5f\xc2\x69\x8e\x4d\xab\x4a\xc0\xcc\xb4\x10\xd3\x3d\x4b\x7c\x2c\x25\x12\x43\x69\xcd\xe4\xbb\xe4\x38\xb2\x84\x7d\xb2\xfe\x64\x9b\xe1\xaa\xab\xed\x86\xb4\xc0\xd1\x01\xc0\x06\xd6\x4b\xab\xda\xb2\x7c\xba\x59\x83\x09\xf4\xe7\xb5\x6a\xf6\x95\x46\x6d\xea\x1d\xa3\xa1\x75\x54\x69\x73\xaa\x46\xae\x79\xbf\x54\xde\x97\x33\xfb\xd6\x0a\x54\xd5\x17\xb7\x1b\x66\xed\x88\x6d\xd1\x2a\x1f\xcf\x49\xf7\xf4\xbd\x54\x7a\x59\x85\x76\xd2\x65\xdf\xe9\x17\xae\x7b\xb2\x1b\x71\xf6\xba\x2a\x53\xa0\xec\x43\xd9\x70\x44\xfe\x79\x1c\x91\xb9\x7a\x1f\x6d\xc6\x10\xb9\x6e\x22\xef\x41\x18\x1a\x32\x39\xb1\x30\xf1\xc6\x79\x69\x4a\x74\xa8\xbd\x9f\xb1\x20\x2f\x98\xa4\x72\xd1\xa5\x7e\x02\x96\xdb\xf9\x79\xb7\xb0\x9f\xe7\x19\x62\x4d\x1f\xfa\x85\x3e\xe8\xcb\x8f\xea\x6e\xf4\x2a\x1b\xd6\x31\x76\x92\x86\xd3\x8b\xfe\xd5\xd7\xf1\x45\x36\xfa\x35\x4f\x7a\x05\xd5\x56\x86\x7f\xc1\x86\xd0\x6e\x27\x45\xac\x0c\x5b\x5b\x22\xa1\x82\xa4\x88\x3a\x77\x44\x0c\x07\x23\x1e\x47\x1e\x29\xd2\xd7\xea\x83\x64\x53\xe3\xc5\xec\x31\xec\x5b\x3d\x49\x52\x39\x8b\xc7\x37\x38\x49\x26\x2f\xbf\x9a\x1f\x32\xbf\xc0\x9b\xb0\xf4\x25\xd8\xad\x1c\x38\xad\xf9\x7b\xe9\xb4\xc9\x2f\x19\x89\xc4\x26\x01\xbb\x1b\x9c\x2c\x65\xd1\x00\x51\xaf\xad\x1f\x8b\xee\xa3\x8b\x2c\xdc\x0b\xa8\xf1\x32\x52\x72\x70\x51\x86\x35\xea\xef\xf7\x7a\xcb\x57\xc7\x9f\x95\x27\x3e\x37\x59\x7b\xd7\xcb\x22\x8b\x65\xba\xe3\x5c\x1d\x89\xf9\xf0\xda\x76\x63\xc0\x6c\x8f\x0e\xdc\x4c\x73\x03\xed\xcb\x3d\x09\x40\x6c\x15\xf1\xef\x8f\x5f\x6b\x74\x6a\x6c\xc2\xcf\x8f\xf6\x9c\x1b\x50\x21\xc5\xe0\xf4\xcc\x1d\x47\x98\x79\xb3\x11\x65\x1e\xa4\xeb\xcf\xd7\x94\x11\x31\x40\xfd\x5e\x2f\x39\x26\x23\x64\x1f\xde\x65\x42\x7e\xc1\xf3\xbf\x37\x34\x20\x42\x72\x55\x62\xab\x0f\x29\x87\x42\xc4\xe9\xd7\x3e\x9f\xcf\xa9\x14\x8a\xea\xe0\x80\xaf\x19\x5d\x36\x14\x41\xd5\x09\xff\x01\xef\x42\x8f\x87\x52\xff\x75\x79\x17\xfa\x3c\x94\xfa\xaf\xcb\xbb\x99\xae\x0f\x65\xf6\xcb\xe5\x86\xc7\x0f\xa5\xf9\xe1\xf2\xae\xee\xfd\x50\x9a\x1f\x8a\xf5\xe7\x3a\x3f\x94\x85\x04\x03\xa1\x07\x63\x72\xf5\x87\xc9\x31\x03\x33\x59\xe6\xcb\x68\x26\xa8\xd1\x4c\x64\xcc\x09\xb2\x50\xed\xed\xed\x7c\xc2\x50\xb1\x51\x92\x67\xca\xbc\x90\x62\x7a\x8e\xdc\x6c\xd0\x35\x63\x5e\x5a\xf4\xec\xa4\x5f\x95\x2b\xe1\x4d\x0c\x45\x6a\x90\xf3\x1c\xac\x4f\x14\x3f\xd2\x56\xb6\x65\xaf\x2d\x25\xa7\x2e\x5a\xf0\x53\x5f\x08\x0d\x87\x43\xd1\xb6\xc8\x05\xc1\xc6\xd0\x78\x3e\xc0\x75\x3e\xb0\xb5\x82\x86\x47\x52\xdb\xdb\xad\xdc\x15\xa4\x66\x91\x8e\x82\x76\x2e\x23\xce\xa6\x8e\x02\x75\x0e\x0f\x5c\xe3\xc0\x1d\x8e\x33\x05\x1c\xa4\x32\xc4\x26\x4d\xb7\xd3\x10\x91\xf5\xeb\x71\x46\xbc\xf3\x3d\x90\x82\xc8\x6a\x11\x28\x0d\x0e\xad\x9a\x1b\x49\x3c\x25\xbb\x39\x65\x86\xcc\x87\xa3\x96\x7a\x10\x59\x6d\xc5\x83\xc4\x01\x3a\xcb\xce\xcf\xb6\xa7\xe6\x07\xe6\xe6\xc1\xda\x0e\x0b\x7c\x41\x46\xa0\x27\x42\xee\x35\x84\x0f\x1f\xb0\x12\x2f\xb9\x85\xbe\x2e\x97\xb5\x81\xb6\x89\x3d\xb0\xbf\x53\x6b\xf4\xb5\x5a\x98\x39\xad\x3a\x3c\xf5\x80\x6b\xbb\xa2\x94\xac\x19\x7d\x41\xc0\x31\x73\x0c\x79\xf9\x27\xa8\x45\xfe\xcb\xda\xcf\x49\xea\x74\x41\xab\x4a\xca\x42\xbc\xae\xc8\x65\xed\xac\xc7\x84\x7c\x1e\x49\x8c\x96\x29\x1c\x55\xa9\x9f\x3b\x0d\x24\x35\x24\x32\xce\xbb\x68\x7a\x4c\x42\x2e\xcc\x60\xdd\xba\x7d\x41\xed\x5e\x07\x58\x92\x13\x3a\x27\x47\x26\xbe\x2b\x44\xd9\x48\x62\x94\xf8\x58\x12\x49\xe7\x44\x47\x7f\x55\xed\xbd\xe6\x1e\x0e\x48\x0b\x11\x56\xf1\x44\x49\x33\xb8\x8e\x50\x1c\x0e\xb5\x0b\xa5\x73\x3e\xe8\x2b\x9a\x76\xd1\x81\x8e\xc3\xaf\x67\x2b\x3f\x86\x35\x13\x56\xb1\x75\x3e\x58\xaf\xd2\x74\x11\x8f\xa6\x91\x6a\x65\xed\x7a\x4a\x6c\xdc\x33\x3e\x2c\x1e\xc8\x5c\xc0\x61\x96\xb5\x71\xd7\x60\x46\xe2\xd1\x9e\x73\x5a\x70\xdc\x37\xe6\x5d\xb9\xe6\xf4\x76\xa1\xed\x23\xd4\x46\xa8\xed\xe2\x5b\x7c\x78\x7a\xa6\x64\xda\xd4\xf9\x98\x1e\xf0\x56\xaf\x4a\xb9\x91\xf4\x70\xab\xaf\xe5\xa4\x2a\x5b\x31\x31\xe4\x39\x62\x92\x9a\x98\xca\x3c\xb6\xa5\xd6\xbc\xd5\x8f\xb8\x64\x68\xd5\xb5\x3a\x01\x7c\xdf\x11\x45\xd5\xa7\xbd\xb3\x34\x75\xab\xd7\x5e\xe6\x59\xa1\x1e\x58\xe6\x7e\xd6\x4c\x5e\xbf\xb0\xbc\x8b\xb9\x16\xbc\xe2\xec\x94\xe7\x04\xcb\x9b\xa9\x45\x34\x93\xc9\x3f\x37\xbc\x15\x26\x5e\xd7\xf1\x5e\x11\x03\xbd\x76\xc9\xdc\xde\xd0\xed\x5a\xa6\x6a\xf8\x52\x03\x92\xad\x43\xab\xad\x41\x9a\x3d\x27\xcb\x1a\x6f\x65\x62\xd0\x7b\x08\xd7\xe4\x48\xee\x40\xb7\x9d\x84\x97\x56\x4c\x9f\x56\x53\x55\x2c\xf0\x0c\xbf\x28\xb7\x67\x56\x7f\x12\x3b\x49\x6f\xd5\x10\x22\x29\xe0\x53\xca\x76\xb8\x2a\xb3\x63\xe5\x4e\xf2\x5c\x0b\xa6\x1f\xa9\x3f\x2c\xb8\x1a\xc8\xcb\xd1\x0f\xd1\xb6\xf0\x78\x48\x86\x8a\x31\x6c\x47\xc4\xa7\x11\xf1\xe4\xc7\x38\xa2\x43\xf4\x70\xa5\x2b\xc3\x4a\x31\x5b\x55\x27\xb1\x24\xd5\x85\xab\xbc\x5d\xb6\x1f\x54\xfa\xc0\x24\xea\x2c\x0e\x13\xd5\xf4\xbc\x5f\xde\x48\x2a\xb2\xcc\x0a\x05\x05\xac\xdd\x3e\x72\xd4\xc0\xd9\x48\xf5\xbf\xaa\x51\x53\x05\x8c\x4f\x9b\xf7\x6f\xa8\x50\xa8\x63\xea\x15\xba\xdd\x9c\x12\xa9\xca\x46\x3f\xd5\x35\xf0\x82\xae\x41\x49\x91\x7c\x73\x65\x02\x6f\xa2\x4c\xa8\x57\x56\x25\x11\x54\x37\xd1\x57\xd5\xe9\x47\x48\x6a\xf4\x92\x2e\x45\x09\x8e\xb1\x45\x37\xc1\xa8\x3a\x65\x57\xde\x6a\xac\x2b\x73\xd3\xd7\xef\x59\x0d\xc2\x37\xaa\x04\xf9\x8d\x46\xb8\x5e\x05\xd2\x4c\xbd\xf1\x25\x03\xbc\xdc\xd1\x0d\x3a\x1c\x1a\x5f\x45\x14\x4e\xd1\xfa\x4b\x71\x80\x4d\xb4\x1c\xb9\xfb\x75\x7d\x5b\xd2\xf0\x72\xbd\xb6\xe2\x07\x37\xbe\x76\x97\x95\xd7\xee\xbf\xfd\x0e\xd7\xea\x99\x9b\xf6\x9a\xeb\xf2\x4a\x6b\xb1\x9b\x5d\x93\xaf\x51\x5a\xe7\x5d\xa8\x55\x88\x0d\xab\xed\xd6\x18\x89\xb0\x24\x89\xff\x8e\xa5\xbb\xba\xbe\x7e\x5d\x7d\xfa\x8c\x54\xa8\x6d\xa5\x6d\xd9\x66\x58\x30\xa6\xe6\x5a\x39\xd1\x18\x1d\x29\x21\x16\x26\x65\x63\x3c\xd5\xf6\xf5\x84\x5c\xc9\xfa\xfe\xaa\x15\xb1\x61\x6f\x75\x11\x62\xa6\x22\x7f\x12\x75\xab\x81\x91\x36\x0e\x68\x00\xaf\x51\x91\x6c\xd6\x9b\xcf\xf1\x86\xb2\x72\xd6\x35\x4c\x1d\xc5\xdd\xc7\x4b\x84\x14\x59\x5f\xef\x26\x61\xbd\x7f\xf0\xe2\x0e\xf4\x8d\x6e\xa1\x73\x1c\x9d\xfb\xfc\x92\xdd\x0f\x4b\xca\x80\xb2\xf3\xda\xe0\xbf\x19\x07\x09\xea\xb7\xa1\x62\xf5\xa9\xba\xfd\x86\xfb\xda\xeb\xf8\x17\xf2\x9d\x60\x11\xb7\xce\xc9\xdb\x2d\xb6\x64\x6a\xdc\xdc\x7d\x82\xd9\x8a\xeb\x54\x49\x7a\xc9\xb6\x9f\x23\x34\x28\xec\xcc\xa9\x13\x05\x7d\x1b\x9d\xb9\x00\x4e\x7d\x10\x90\x15\x0f\x6b\xb4\x4f\xd2\xf4\x45\xcb\xe6\xaf\xc3\xd3\x64\x3b\xcb\xa0\xe9\xbd\xc1\x33\x34\x77\x4a\xa4\xea\x71\x15\xdb\x5c\xf7\x14\xdc\x8c\x7f\xe9\xe6\x07\x74\x27\x1e\x06\xcc\x8a\x41\xae\x76\x1f\x61\xa7\xbf\xf0\x6a\xb1\xff\x59\xaf\x16\xc9\x95\x8c\xf0\x3f\xc9\x42\x0c\xae\x5f\x30\x49\xa2\x01\x62\xe4\x52\x55\xb8\xc7\xfc\x43\xa8\x67\x9f\x33\x49\x59\x4c\xde\x98\xe6\x81\x21\x2f\x6f\xc1\x53\x41\xad\xef\x80\x5b\x74\x61\x90\x22\xad\xd2\x8d\x41\x26\x3b\xff\xf8\xbe\x4a\x7a\x4a\xc8\xce\xdd\xaa\xa2\xc5\xa6\x46\x6f\xb9\xd7\x17\x99\xe2\x15\xcb\x44\x2b\xef\xab\x96\x9a\xad\x41\x93\xb1\x5d\xd7\x46\xe5\x60\x07\x45\xa5\x66\xa4\x74\xb2\x80\x30\xe8\x72\x1e\x00\x33\xee\xea\x2d\xaa\x55\xac\x24\xdf\x50\xf2\x82\xd0\x84\x81\x2e\xba\x6a\x2b\x79\xce\x07\x27\x6c\xdd\x71\x4c\x03\xdf\xc0\x3c\x68\xb8\xbc\xcc\xb5\xc4\x08\x54\x90\x5a\x67\xe5\x6e\xf5\xca\x7e\x06\xee\x8d\x47\x81\xc6\x36\xf0\x06\xb5\xb7\x6e\x01\x9f\xdf\xad\xbf\x51\x91\x23\xc4\xaa\x1b\x11\xa6\x41\xf3\xb3\xfb\x0d\xac\x16\xbe\xa0\x69\xfc\xdd\x1f\xf1\x37\x33\x55\x30\x8f\x85\x24\x99\x8b\xdb\x36\x89\xaf\x3e\x9b\xef\x1d\x1d\x9e\xc0\x05\x21\x42\x2e\x18\x9e\x68\xaf\xf3\x57\x83\x7e\xcf\x9d\x46\x3c\xb6\xde\x7c\x17\x42\x92\x39\xfc\x5e\x73\x76\xcf\xda\x70\xfb\x54\x84\x01\x5e\x80\x4f\xc2\x8a\x0b\xc2\x1b\x5a\x56\x36\x78\xf1\x66\xc7\x6e\x58\xc1\xe7\xd8\x03\x1b\x45\x42\x51\x79\xc8\xdb\xd7\xac\xf6\x50\xcc\x72\x56\xb6\xbc\x70\x14\xea\x5a\x9c\x23\x17\xfd\xdd\xfc\xa7\xba\xba\xae\x27\xdc\x7a\x62\x2a\x75\x86\x24\x9d\x49\x60\x52\x16\x97\x3d\x8b\x9a\x6b\x30\xd3\x94\x05\x6e\xbb\x8a\xd8\x1e\x88\x61\xea\xdf\xa9\x0b\x73\xdf\x7e\xce\xf5\x0f\x71\xda\x3b\x1b\x7c\xd4\x5e\xe8\x6d\x92\x7b\x4d\xc1\xe4\x43\x7d\x74\xa9\xbf\xac\xba\xcf\x4a\xed\x7e\xa5\x8b\x00\x12\xb9\xa2\xa0\x2c\xad\x41\x63\xbf\x72\x00\xf5\x98\x04\x0c\x16\x08\x2e\x7f\x39\x32\x55\x63\xd7\x43\x76\x3c\x1c\x04\xce\x04\xd3\x80\xf8\x5a\x0b\xf0\x55\x7a\x04\x06\x0e\x70\x3f\xef\x24\xc6\xae\x7a\xe7\x7e\x05\x28\x5e\xe5\x4b\x28\x47\xe0\xab\x2d\x3e\x57\xdf\x52\x98\x69\xf9\x0c\xed\x1b\xab\x5d\x25\xa9\x8a\xbd\x60\xc1\x99\xb7\x84\xaf\x34\xe0\x2c\x94\x28\x20\x52\xa3\x69\x04\x6c\xe9\xcb\xe0\x49\xb3\xc0\x6f\x14\x51\x37\x14\xab\x3e\xf3\x2e\xa8\x42\x8f\x53\x8a\x2e\x95\xcc\x10\x1d\xf6\x7b\xc6\xb0\x43\x71\x8d\x16\x6c\x6a\x87\x4c\xb6\x44\x77\x8e\xaf\xc0\x42\x82\x0e\x8b\x89\x6e\xca\x61\x84\x3a\x1c\x5c\x21\x97\xde\xc6\xfc\x34\xb9\x3c\x2a\xbe\xe7\x80\xa1\x61\xfb\x9a\xc7\x58\xd4\x3e\xc0\xda\xcb\x81\x0d\x04\xf2\x13\xdd\xde\x6e\xd9\xb4\x61\x92\x29\x02\x25\x5e\xf4\x5c\xda\x5e\x77\x69\x26\xda\xe5\xab\xb6\x02\x08\x6e\x57\x3e\xeb\xd8\xe0\xe6\xaa\x4a\xb9\x59\x51\x61\xc9\xe0\xe7\x66\x46\xbd\x45\xb1\xf2\x5b\x95\x8e\xfd\xc9\xfd\xd0\xc5\xd5\xf8\x26\xbd\x2d\xfd\x59\xe8\x4f\xea\x55\x67\xfe\x44\x1f\xd8\xb5\xd8\x18\xfa\x13\xf3\x40\xb2\xa1\x20\x9c\x94\xff\x32\xd2\xef\x0c\x5e\xaa\x0d\x9e\xf6\x7a\xae\xa0\x3e\x19\xe3\x68\x80\x18\x67\x04\xb9\x42\xe2\x48\x1e\xe1\x29\x19\xf4\xdd\x09\x0d\x08\x18\xba\xe6\x44\xdf\xa4\xab\xb9\x2d\xe1\xe8\xe0\x65\x4b\x6b\xd5\xc0\xeb\xc3\x06\x7e\x74\x4c\x49\xfb\xab\x34\x09\x69\x90\x20\x63\xb3\x94\xeb\x8a\x7e\xe0\x84\x50\x65\x0f\xbb\x7a\x04\xa9\x65\xe7\x5e\x14\x61\xb8\xde\x9e\xf0\xa8\xa5\xd9\x7d\xef\x47\xf9\x0f\x6b\x38\xf7\xa3\x7c\xf8\xb0\x0d\xcf\x7b\x08\xf3\xc5\xbf\xa9\x9c\xb5\xc8\xa9\x3c\x33\x1a\x10\x45\x65\x3a\x84\xa9\xab\x9a\x40\xed\xed\xed\x34\xd7\xc6\x56\xc8\x9d\xfb\x53\x6f\xf8\xd7\x15\x9d\x4e\x0b\xab\x6e\xda\xc8\x7a\xab\x86\x91\x96\xd0\x96\xae\xe0\x2b\x65\x59\x0a\x2c\xa7\x67\x34\x6f\xf1\x90\x56\x66\x26\xbc\xb9\x83\xc4\xcf\x57\x4f\x24\x14\xb3\x42\x1e\x59\xbd\xb1\x9a\x84\x71\xe5\x45\xcc\xda\xbd\x43\xae\xdf\x3b\x64\x9d\xee\x03\xf6\x8a\x9b\xe9\x3e\x12\xc6\xf8\xf5\x19\xfb\x5a\x67\x60\x60\x67\x56\x7b\x91\xe1\x4f\xde\xeb\x27\xe2\x17\x94\x5c\xea\x67\xae\x83\x67\x8a\x79\x64\xb8\x85\x9a\x4d\xb8\xd2\x30\x9c\xe4\xcb\xba\x5f\x5c\xcd\x1a\x61\x21\x8e\x8d\xe3\x8a\xbc\x3d\xfa\x0d\x18\x63\x3d\x3b\x2c\x29\x84\x0d\xde\x15\x3f\x09\x39\x85\x30\x6b\xac\x22\x9b\x47\x53\xc5\x3c\x72\x4b\xa1\xb4\xfc\x0b\x2f\x0f\x79\x0e\x03\x62\x88\x50\xce\x06\x55\x1b\x0e\xce\xb0\x18\x11\x2f\x8e\x88\x3e\x9c\xb5\x9f\x8b\x21\x7a\x2e\x20\x25\x67\x97\x96\x1a\x1c\x66\x80\x07\xe5\xfc\xbc\x80\xa4\x90\xa6\x2a\x84\xa3\x5c\x65\x7d\x0a\xde\xd4\x56\x40\xda\x7b\x78\xd6\x57\xb6\x51\x4b\x23\xca\x4a\x17\xed\x84\xf1\x38\xa0\xde\x4e\xba\x07\xec\xa4\x41\x64\x99\x8b\x32\x5f\x3c\x13\x5c\x76\x63\xc7\x69\x5b\x35\xd4\x67\x9e\x23\x56\x50\xdf\xa6\x0e\xd3\x6e\xc8\x41\x02\xcc\x64\x3c\xaf\x55\x3b\xde\x33\x26\xa2\x0f\x17\x9f\xeb\x51\x50\x07\x99\x4a\xbc\x0a\xda\x5b\x53\x2d\x58\xad\xf6\x21\x78\x6b\xa2\x9e\xc1\xfb\xdd\x5f\x95\x26\x2d\xd5\x5e\x95\x42\x10\x93\x03\xe3\x6c\xb1\xd8\x5a\x06\x65\x55\xc1\x4a\x56\xf8\x18\xd3\x31\x76\x54\x03\x9b\x19\xe2\xe8\xf5\x5b\x31\x0d\xc8\x45\xaf\x74\x4d\x94\x4d\x1d\x03\xd1\xed\x76\x51\xc1\x72\x5e\x3b\x1f\xaa\xe9\xcf\xf2\xc1\x06\x3e\x0c\x73\x47\x5a\x1d\x2e\x72\xb5\x3d\x50\x85\x02\x22\x35\x3a\xce\x93\x1b\x72\x65\xde\xcb\x5c\xee\x00\x48\x56\xa2\x21\x09\x34\x54\x69\xdc\x5c\x6c\x47\x5f\x03\x7f\x4e\x2b\xd6\x15\xee\xad\xbb\xb0\xd4\x64\x55\x77\xc3\x5e\x6f\x15\xf6\xb9\x8e\xcc\x34\x2d\x6c\xe4\xcc\xac\x52\x24\x6d\x62\x4d\xb4\xce\xb5\x59\x8d\xdd\xfc\x26\xee\xbb\x8b\x6b\xae\xc2\x91\x77\xdd\xad\x5b\x9d\x6d\x55\x72\xc9\xa9\xa0\x2f\x28\xa0\xb8\x66\xfa\xbe\xfb\xc0\xfe\x2f\x08\x2f\xf1\x3c\xf8\xc0\xa0\x4d\x67\x44\xa2\x0b\x35\xae\x7d\x1b\xf9\xee\x03\xfb\xc0\x5a\x7f\x6f\x3b\x9d\xce\x87\xab\x47\xc4\x41\xfb\x01\xf5\xce\x0d\x54\x77\x86\x99\x1f\x90\x63\xf2\x7b\x4c\x84\x6c\xb5\xd1\x07\x66\xc1\x18\xb9\x74\x94\x4c\x84\x54\x79\x3a\x71\x90\xfa\xe8\xaa\x53\x88\x17\x47\x54\x2e\xf6\x67\xc4\x3b\x47\x8e\x5a\x72\x1f\x98\xe3\x38\x4e\xe7\xa7\x53\x19\xc5\xe4\x2c\x81\x3c\x84\xe3\x31\x94\x57\xf9\xaa\x0e\x2a\x5e\xf2\xe8\x12\x47\xfe\xf3\x42\x49\xc6\x55\xb9\x88\x7b\x44\x08\xc7\xe3\x4c\x46\x3c\x10\xb9\xa2\x9e\x31\x01\x70\x42\x0d\x45\xd9\x34\x57\x09\x54\x04\x7d\x3f\x5d\x10\x71\xe6\x0c\x87\xc3\xe3\x17\x6f\x0f\x5e\x1c\x1f\xbe\x7d\x35\x1c\x0e\x35\x10\x09\x04\x29\x81\xab\xb6\x01\xfa\xe0\xf0\xf8\xc5\xfe\xc9\xc7\xfd\x5f\x5e\xec\xff\x33\x2d\xc2\x7c\x3a\xb1\x1d\x49\xcb\xaf\x6f\x2a\x5b\x4e\x8f\xdd\x39\xe2\x42\xe6\x47\x9e\xa9\xc5\xa2\x4d\x01\x01\xda\x52\x80\x24\xcf\x06\xb7\x42\x0e\x16\x8e\x3e\x7a\xe4\xe0\x56\x0c\xa3\xd8\x73\x8d\x71\x5d\xed\x2b\x52\x6a\x31\x5b\x79\x32\x94\x52\x25\x13\x1c\x08\x52\x87\xbd\xa4\x98\x1a\xfd\x01\x77\xec\x0b\x88\xe2\xdc\xeb\xd1\xdb\x5c\x27\xd2\xc4\x88\x0a\x03\xfb\xf9\xc5\xcb\x77\xc7\x2f\x3e\x1e\xbc\x18\x9d\x1c\xbf\xfb\x55\x37\x90\x74\xc7\xb4\x50\x49\x5c\x01\x99\xc8\xa4\x15\x03\xb1\x41\x23\x05\xe4\x45\xea\x10\x61\x09\x56\x4f\x87\xa3\xd8\x86\x23\xc9\x3c\x0c\xb0\x24\x4d\xab\xd4\xc8\x49\x70\x54\x98\x68\x23\x7d\x66\x56\x64\xeb\xef\xed\x0f\xec\xff\x12\xe6\xc7\xf3\xe0\xbb\x7a\xfe\x6c\x99\xc7\x48\x0d\x90\x29\xe1\xad\x8e\x79\xa0\x1c\xf3\xc0\x9e\xe4\x91\xf3\x33\x1f\x3b\x7f\x8b\x88\xff\x81\x7d\xe7\x9c\xcc\x88\xc3\x59\xb0\x70\x7c\x3a\x99\x90\x48\x55\xe6\x8c\x89\xbc\x24\x84\x39\x00\xfd\x81\x7d\x87\x99\xef\x84\x38\x92\xd4\xa3\x21\x66\xd2\xa1\x42\x61\xde\xf1\x23\x7c\x49\xd9\xf4\x03\xcb\xe6\xed\x05\xd4\x23\xf9\xa4\x0f\xe8\xd0\x99\xe1\x0b\xe2\x60\x27\x22\x38\x08\x16\x01\x67\x53\x87\xe1\x39\xf9\x00\x14\xfe\xda\xf9\xdb\x0f\x3f\xbc\x7c\xf9\xc3\x0f\x1f\xd8\xce\x77\xce\xaf\x3c\x76\x3c\xcc\x1c\x1c\x08\xee\xf8\xc4\x0b\x70\x44\x06\x1a\x9b\xd9\x4a\x5f\xab\x92\xa5\x9a\x9d\x6c\xd5\x69\xb5\xaa\xf0\x77\x3b\x6a\x02\xa0\x7b\x9d\x9f\x7e\xe6\xe3\x81\xb3\x97\x1e\x85\x28\x67\x8e\x61\x8f\x1f\xd8\xcf\x7c\xdc\xf9\x09\x00\x2b\x60\x44\xc8\x99\x22\x13\x00\x7a\x3d\x70\x5e\xf3\xa9\x23\x23\xcc\x84\xde\x32\x93\xc9\x43\xeb\x27\xef\xbd\x20\xfb\x58\xac\x98\xbb\x3c\xe3\x1f\xbc\xc1\x94\x39\x7b\xfe\x9c\xb2\x81\x1a\x3c\xfc\xfa\xc0\x5a\xef\x05\x81\xe9\xc0\x61\x18\x98\x7e\xb6\x55\xbe\xca\x68\xab\x31\xbf\x17\x24\x72\x3a\x3f\x39\xad\x91\xaa\xab\x6d\x13\x34\x29\x26\x50\x50\x9d\xd3\x29\x26\x33\x2e\x89\x03\xcb\xc1\xe1\x13\xdd\xa6\x33\x70\x4e\x66\x54\x28\x32\xc0\xcc\x21\x57\x78\x1e\x06\xa4\x5b\x06\x36\x75\x28\xe4\xef\x39\x90\x65\xe7\x55\x27\x8e\x15\xe5\x39\x82\x5c\x90\x08\x07\x4e\x40\x19\x11\xb0\x54\x00\x36\xa9\x0e\x41\x5b\xf0\x93\xc2\xa6\xc1\xe0\xf1\xa0\x23\x79\x52\x94\xc3\xb1\x49\x74\x81\x9a\xde\xee\x7e\x60\x66\xa4\x4e\xb7\x0b\x9f\x6f\x77\xd5\x2f\xd3\x1d\x33\x3f\x1f\x58\x83\xe5\xa5\x5d\xfa\x34\x5c\x5b\x10\xff\xc1\x79\xc9\x79\xdf\xb9\xd6\x03\xb4\xa4\x1c\x5b\xbe\x52\x18\xab\x4a\xea\x76\xf5\x5f\x2c\x9c\x05\x8f\x9d\x4b\xcc\xa4\x49\x60\xbe\x03\x37\x9c\xfa\xd3\x72\x14\x39\xa3\x6c\x2a\x1c\xc9\xa7\x44\xce\x48\x64\x4a\x7f\xfc\x98\x6f\x51\x2f\x0a\xe1\xcc\x31\x5b\xe8\x5a\x44\x4d\x33\x9d\x8e\xfe\xfb\x82\xf9\x6a\xce\x60\x10\x1f\xd8\x52\xa1\x5f\x0f\x08\x88\xe5\xda\x76\xd6\x19\x51\x35\xdb\xce\x2b\x22\x25\x89\x92\xde\x3f\x74\xa6\x44\xbe\xc5\x73\xd2\x6a\x67\x12\xf6\x7c\x3f\x22\x0a\x81\x69\x69\x3e\x27\x8e\x28\x96\x15\xf9\xb2\x1f\x3f\x3a\x61\x44\x2f\xb0\x24\xe0\xc1\x3b\x19\x1c\x65\xd2\xc1\xd3\x64\x6b\x72\x08\xf3\xa2\x45\xa8\x68\xc1\x0e\x62\x04\xda\x40\x27\xc4\x42\x5c\xf2\xc8\x37\xe3\x68\xbe\x22\xad\x2c\xf6\xb6\x70\x88\x5a\x31\xeb\x1f\x18\xfc\xfe\xc0\x06\xab\x24\xae\x1f\x3f\xb0\x81\x12\xb5\xd4\x1e\xf2\x23\x6c\x95\xad\x2a\x41\xab\x0d\x3b\x9a\xd3\x52\x12\x96\x41\xc6\x20\x27\x66\xfd\x98\x6c\x84\xad\x54\xc8\xb2\xa5\x18\x4f\xca\x14\x44\xac\x4c\xb1\x2a\x01\xab\x54\x01\xd0\xaa\xe4\x61\xb5\x8c\xd3\xa2\x02\x44\x1c\x5b\x6c\x41\x44\xa6\xdc\x20\x27\xe0\xfc\x98\x6e\xad\x85\xfa\x07\x59\xa9\xe4\xc7\x5c\x4b\xd9\x6c\x2b\x0b\xe5\x21\x74\x7d\x20\x97\xb4\xf3\x22\x48\xcb\xcf\x88\x20\xe5\x1e\x0e\x12\x01\xc4\x8c\xff\xc7\x82\x80\xa1\xca\x4f\x0a\x88\xcd\x14\x2f\x48\x16\xd5\xc3\x1b\x54\x49\x0c\x3f\x56\x4b\x04\x1a\xcd\x9b\x10\x69\xaa\x69\x6b\xb8\x71\xa8\xdd\xd8\x3b\x57\x7d\x41\xb0\xfe\xc0\x44\x03\xd9\x35\xfd\xcb\xc9\xc9\x91\xd3\x71\x4e\x5f\xd2\x48\xa8\xf3\x84\xa9\xfc\x4c\xe7\x9e\xee\x31\xae\xf8\x4c\x2e\x63\xa9\x99\xb3\x4f\x1c\xf4\x0e\x32\xb5\xd1\x47\x52\xe5\x4b\x5d\xe3\x88\x78\x9c\xf9\xe5\x2a\x8b\x2d\xd9\xad\xe8\xe5\xc9\x51\xc2\x79\x78\xec\xdb\xda\x4e\x5f\xe8\x1d\xc6\xe9\xdb\xa6\x3f\x30\xc5\x17\xc6\x58\x10\x07\xbd\x59\x8c\x7e\x0f\x92\x96\x27\x3c\x50\x88\x47\x76\x7f\x9a\x2f\x4c\x52\x02\x71\xfa\x52\x83\x3c\x32\xbd\x59\x9a\x82\x11\x9e\x13\x25\x38\xf2\x0c\x24\xa4\x3d\x4e\x01\x4d\xe3\x15\x38\xb1\x43\xc8\xf5\x35\xf3\x91\xe4\x67\x5a\x4f\x7f\xa7\xb9\x49\x8b\x1b\x09\x81\x12\xcb\xc6\x52\x84\xf0\x70\x40\x9c\xa7\xbd\x9e\x73\x49\x7d\x39\x83\xf1\xfc\xfd\x4c\x89\x07\x50\x4d\xff\x83\x7e\xbe\xdb\xb7\x7d\x82\xaf\x5d\x67\xe0\x8c\x62\xcf\x23\xc4\x57\x52\x63\x1e\x42\x15\x1f\x38\x7b\x63\x1e\xc9\x24\x73\x37\x57\xfc\x51\x45\xf1\xdd\x9a\xe2\xf0\x38\xd8\x16\x33\x33\xa1\xd3\x34\xf1\x42\x8e\x03\xf7\x6f\x6a\x33\x53\xf2\x5e\x5f\x43\xc1\x4f\x67\xe0\xfc\x57\x2c\xa4\x83\x1d\x09\xb2\x1c\x4c\xe4\xdf\x13\x0c\x97\xc0\xb3\xe9\xce\xc0\x79\x4b\x2e\x9d\x03\x2c\x71\x05\x88\xe1\xa9\x2a\xd7\x19\x38\x2f\x18\x8f\xa7\x33\x03\xbb\x34\x63\x7a\x54\x1a\xf5\x4b\x30\xd4\x2a\x66\xeb\x21\x27\x18\x71\x76\x9c\x91\xda\xaf\x8f\x89\x88\x03\x59\x0d\x9c\xe0\xa7\x01\x61\x94\x34\xd5\x0f\x36\xd7\x54\x7f\xfd\x0b\xaf\x1b\xa9\xdb\x25\x1e\x07\xb5\x1e\xda\x13\x0f\x65\x5f\xf8\x35\xee\x5d\x9b\x35\xc0\xa0\xeb\x23\xe3\xe8\x9e\x9e\x28\xa0\xc1\x77\xff\x00\x60\x1b\xab\xec\x72\x21\xe8\xe5\x62\xda\x81\x44\xe4\x08\xb9\x08\xc8\x10\x01\x63\x18\x38\xfd\x5e\xef\xff\xf7\x23\xfa\xe9\x1f\x72\x46\xb0\xff\xd3\x3f\x64\xa4\x7e\xfe\xf4\x8f\x71\xf4\xd3\x3f\x76\xd4\x8f\x86\x1f\x3b\x52\xff\xd2\x95\x8c\xb9\xbf\x30\x75\xf9\x85\xf6\x76\x9f\x74\x7b\x3d\xd3\xa6\x2e\xed\x7f\x0d\x28\xe8\xef\x5f\x1d\xfc\xdc\x0e\xee\x98\xa9\xd6\x4b\xf2\xa7\xef\x6e\xa8\xde\x2e\xbf\x43\x29\x2b\xb1\xeb\xe2\x5c\x9b\xfc\xac\x47\xd2\xaa\xea\xb2\x0b\x64\xe3\x88\x4d\xd6\xab\xc8\xdf\xb2\x77\xa7\xe9\x0b\xab\x1f\xf3\x1e\x8f\x48\xbb\x3b\x89\x38\x0e\xb0\x79\x76\x73\x2d\x39\x0f\xc6\x38\xd2\x37\x03\xe0\xbc\xce\xa4\x1c\x32\x75\x46\x1c\x6c\xf5\x5c\xc0\xdf\x31\x11\xf4\x0f\x12\xbd\x9b\x4c\x04\x91\x83\xbe\xe2\x41\x6b\xaf\x59\x6a\xa3\xb3\x93\x76\x97\xb3\x16\xca\xf6\xc4\x06\x95\xd1\xf6\xa8\x7e\x21\xce\x54\xde\xc0\x74\x79\x93\x68\x53\x45\xcf\x4f\xd5\xe8\x6a\x77\xf9\x64\xb2\xba\x67\x37\x79\x93\xbc\xb1\xed\x4b\x23\x1b\x17\x57\x0c\x9b\x8e\x2a\x37\xe9\x10\xe1\x52\xc1\xe8\xdb\x89\x92\xa5\x4c\xd6\x43\x1d\x5c\xcf\xd7\x92\x6a\xc9\x24\x46\x34\x37\x81\x69\xfa\xda\x38\xb3\xa3\x7e\xbb\x32\x41\x1c\xe0\xe8\x06\x7e\x4b\xe7\xdc\xc7\xc1\xaa\x97\x41\x5f\xc1\x6b\x69\xfa\x02\x28\xf5\x5f\xba\xee\x5e\xbf\xe9\x13\xe7\x5b\x14\x48\x14\xc6\x6b\x45\x12\xc0\xeb\xad\x37\x03\xb5\x56\x3c\x54\x9e\xab\x79\x3e\x30\xf1\x72\xf4\x57\xd6\xd2\xf3\x2f\xf9\xe8\xcf\x28\x7e\xdc\xfb\x0e\x7e\xb3\xf2\x51\xd6\xc7\x48\x66\x31\x21\xf7\x5a\x91\xb0\x89\x6e\x0b\xe6\x7b\x27\x8b\x10\x5c\xe6\xd6\xc4\xf9\x5d\x33\x3c\xec\xfb\x6b\xde\xf0\xaf\xa9\xc0\x44\xfa\x4b\xea\xc8\x54\x78\xdd\xcc\x46\xc5\x18\x26\x7a\xd8\x9b\x91\x8f\x22\x9e\x4c\xe8\xd5\x00\x3d\xbf\x18\x3e\xe9\x3f\x42\x26\xcc\x04\x8f\x06\x75\xdb\xbe\x1b\x91\x00\x4b\x7a\x41\x3e\xc6\x51\x00\xaf\xe7\xc7\x11\xbf\x14\x24\xfa\x28\x42\x12\x04\xe0\x9b\x55\xe1\x4a\x48\x2c\x63\x31\xc6\x91\x7e\x75\x69\xe5\xbe\x10\x0b\x49\x3e\xfa\x58\xe2\x8f\x74\x8e\xa7\x04\xf0\xaa\x7f\x7d\x8c\xc3\x80\x63\xff\xa3\x56\x32\x47\x83\xe2\x23\x54\x13\x0f\x6b\x80\x1e\x92\xee\x38\xe0\xe3\x56\xbb\xab\x36\xbf\x87\xe8\xc7\x31\x16\xe4\xe9\x63\x17\x32\xe0\x67\x0b\x42\x1b\xaa\x5a\x3f\x62\xff\x42\xe2\xb1\x6a\x65\x4e\x7c\x8a\x3f\x06\xaa\xeb\x64\x3e\x26\x3e\x34\x6d\x3c\x05\x08\x1a\x5c\x28\x04\x89\x73\xca\x06\x88\x5f\x51\x08\xef\x0e\x7e\xef\x3f\x82\x31\x20\x65\xd3\x81\x92\x48\x90\xab\x77\x2c\xe2\x7f\x84\x07\x62\x1f\x89\x9e\x38\x31\x40\x63\x97\xba\xe3\x1d\x35\x9b\x6c\xea\xd2\x1d\x32\x47\xee\x84\x33\xa9\x44\xdc\x8f\x3a\x46\xa1\x18\xa0\xef\xc3\x2b\xa7\xdf\x53\xff\xec\xaa\x7f\x1e\xab\x7f\x9e\xa8\x7f\x9e\xaa\x7f\x54\xee\xae\xca\xdd\x55\xb9\xbb\x2a\x77\x57\x65\xec\xaa\x8c\x47\x2a\xe3\x91\xca\x78\xa4\x32\x1e\xa9\x8c\x47\x2a\xe3\xb1\xca\x78\xac\x32\x1e\xab\x8c\xc7\x2a\xe3\xb1\xca\x78\xa2\x32\x9e\xa8\x8c\x27\x2a\xe3\x89\xca\x78\xa2\x32\x9e\xaa\x8c\x67\xea\x9f\xef\xd5\x3f\x3f\x40\x87\x7a\xbd\xf0\xca\x46\x53\x14\x83\xeb\x31\x0f\xfc\xc1\xb5\x99\x39\x34\x46\x4b\x97\x4a\x1c\x50\x2f\x4d\xa3\x68\xb9\x74\xc3\x20\x9e\x52\x25\xe4\x23\xec\x5f\x04\x54\x48\x07\xc7\x92\xab\xbd\xd9\x01\xa7\x7a\x0e\xfc\x84\xb9\x70\xbc\x19\x8e\xe6\x38\x74\xc2\x88\x32\xe9\xcc\xb4\x2a\x19\x8c\xc5\x91\x8b\xb4\x23\x64\xf3\x92\xdd\xb9\xe4\x91\xef\xf1\x98\x49\xe7\x82\x8a\x18\x07\xe3\x80\x7b\xe7\xc2\x7c\xa8\x7a\x84\xe3\x71\x9f\xc0\x3f\x42\xeb\x23\x27\x71\x10\x08\x2f\x22\xf0\xd8\x8f\xc2\xb2\xb4\xae\x57\x1d\x98\x7b\x87\x71\x06\xad\x51\x36\x75\x04\xbe\x20\x8e\xde\x16\xb5\xea\x9c\x72\x86\x03\xaa\x4e\x03\xc8\x2a\xb7\x1d\xa0\x56\x47\x92\x2b\x19\x62\x29\x49\xc4\xf4\x40\xd4\x69\x46\x09\x89\x73\xc2\xe2\xc1\xf5\x12\xfe\x1a\x4a\x87\x1a\x3f\x9a\xe3\x0e\x44\x1d\xd6\x3f\xfb\x03\xad\xd0\xd0\x4d\xfa\x24\x20\x92\x38\x9f\xf4\x57\x18\xf1\x50\xe8\x9f\x11\xbf\xcc\x7c\x79\x24\x08\xf4\xa7\x81\xd4\xa3\x8a\xf8\xe5\x98\x4c\x78\x44\x0a\x89\xb0\xd4\xb3\x0d\x44\xfc\x32\x5f\xd2\xe3\x41\xb9\xa4\xc7\x83\x52\x49\x8f\x07\x49\xd7\x77\x07\xc8\xd2\xb1\xe6\x0e\xce\x27\x47\xd5\xe1\xf1\x80\x47\xce\x18\x7b\xe7\xfa\x17\x4c\x74\xcc\xe0\xcf\x27\x47\x91\x8f\xa3\x29\xc6\x89\x15\xf7\x51\x34\xe3\x08\x19\xd1\x73\x22\x67\x11\xe8\x19\x3f\x39\x38\xa0\x53\x16\x90\x89\xd4\xbf\x3c\xc2\x54\x47\xe0\xb7\xbe\x70\x85\x9f\xbf\xc5\x42\xd2\xc9\x22\xe9\xd1\x47\x21\xa9\x77\x0e\x3e\x19\xd4\x34\x7e\xe4\x4c\xfd\xb1\x1e\x27\x07\x0d\xdd\x67\x2c\x1f\xa0\xd8\xbe\x8e\x45\xc3\xa1\xe2\x25\x7c\xe2\x48\xca\x16\x73\x8f\x3c\x4f\xbd\xff\x4e\x89\x1c\x79\x11\x0d\x65\x0b\xed\x98\x5c\xfb\xb7\x3b\xa7\xac\xfb\x9b\xb0\xcc\x33\xd3\xb0\xf1\x24\x61\xe1\x7c\x3e\xef\x42\x74\x56\xf5\xeb\x35\xc7\x3e\xf8\x89\x75\x6d\xb6\xe2\x5a\xef\x8f\x5f\x0f\xd1\xce\x0e\x7a\x58\xf2\x7b\xc9\x85\x7c\x98\x34\x8d\x92\x42\x9a\x75\x0f\x91\xea\x44\x9a\x0a\xef\x7a\x48\x7b\xd9\x1e\x94\x52\x96\x6e\x7e\xf3\xb8\xb6\x10\x3a\xe1\x0d\x66\x78\x4a\xa2\x2e\xb9\x22\xde\xbe\xf6\x47\xd2\x42\x73\x8f\x1c\x67\x0a\xa9\xc3\x9d\x5b\x79\x1a\x4c\x1d\xa7\x1d\xc2\xfe\x09\x1b\xab\x3a\x3d\x19\xe3\xf0\xf4\x21\x32\x69\x7f\xfa\xd4\x1b\x0e\x87\xa4\x22\xfe\x71\xc9\xaa\x2d\xb7\x19\xb7\x5d\x36\xfc\x3c\x59\xf6\x3b\x78\xa8\xd3\x35\x7b\xfa\xf6\x76\xe6\xf1\x4d\x17\x04\x8c\x09\x25\x81\x2f\xda\xed\xdc\x67\xde\xc1\xf1\x90\x3d\x44\x4a\xd8\x55\xdb\x8d\x76\x66\xf3\x10\x81\xd0\x8b\x8c\xb7\x70\xc7\xbe\xe2\xe1\xc3\xfe\x8f\xfc\x1f\x66\xa0\xa7\xbd\x33\xfb\x9c\x87\x3f\x7c\xd8\x4e\xaa\xd9\xe7\x41\x3c\x67\x0e\x7a\xc8\x6d\x35\x0f\xd8\xc3\x21\xca\x49\xd0\xc8\x85\x24\x2d\x5c\x21\xd7\x60\x2e\xdb\x2b\x3a\x69\x69\x90\xe8\x27\x94\x7f\x52\x44\xaa\x7a\xef\x17\x7b\xef\x27\xbd\xb7\x47\x3d\x38\xcb\x09\x50\xee\x34\x2d\xbf\x4c\x3a\x8e\x96\x6d\xd7\x7c\x98\x3e\x9b\x2f\x10\x0b\x53\x6a\xcd\x53\x9e\x9a\xf1\x6a\x55\x83\x20\xe0\x46\x47\x49\x48\x2c\xef\x68\x66\x34\xe3\x97\x9a\xe2\xde\xa8\x93\x92\x15\xa0\xe0\xd8\xf4\x2e\x24\xac\xa0\xbf\x30\x87\x34\xd4\x76\xaf\xc5\x8c\x5f\xaa\xb3\xaa\x8b\xfe\xe6\x89\x8b\x4e\x1a\xf7\x53\x57\x57\x71\x50\x4b\x0f\x5d\x05\xff\x06\x79\x2a\x4d\x1e\x83\x41\x63\xfb\x01\x17\xa4\xae\x17\x59\x31\x96\xe4\x1e\x4e\xb0\xe1\x11\x0e\xb1\x0d\xbc\x60\xc5\xd0\x41\x42\xbb\xae\xbf\x60\x78\x4e\xbd\x93\x05\x78\x2d\x92\xdd\x54\x38\x55\x52\x4c\x08\x75\xea\xf0\x10\xea\x3c\xfe\x20\x77\xab\x92\x5d\xa2\xac\xde\x35\xcd\x66\x93\xe4\xb2\xa1\xf5\x8d\xad\xd8\xd6\x34\x9d\xb2\x7c\x54\xe3\xac\x1b\x02\xe2\x5a\x15\x11\xb3\xce\x10\xd2\xba\x57\x39\xc4\xe9\x52\x73\x6b\xac\x5b\xe0\x45\x7f\x37\x66\xea\x36\x1b\x81\xa9\x7d\xab\xe0\x21\x49\x57\xd2\xde\xde\xde\x2a\x32\xb2\xed\x6d\xd2\x4d\xda\xbc\x3b\x77\x39\x2e\xdf\x78\x24\x6b\x1d\xec\xf0\xdc\x04\x35\x77\xb0\xd3\xd4\x29\x6e\x4e\x3f\xf5\xad\xea\xd8\x22\x12\x04\xfc\xaf\xd0\x40\x1b\x86\x06\x1a\x73\x1c\xf9\x26\x34\x10\xe3\x3f\xeb\x2f\x05\x18\x86\x26\xdc\xab\x46\xec\x3e\xbc\x8a\x8c\x23\x52\xd6\x99\x69\xd0\x8a\xa7\x23\x5b\x55\xc7\x7e\x03\x0d\xaf\x46\xa0\xf1\x91\x12\x03\x4a\x95\x1a\xc7\x11\x00\xb1\x52\x21\x97\x03\x4c\x9e\xb7\x81\x27\x16\x52\x0a\x70\x91\xb0\x6d\xf4\xb7\xc7\x9e\xfa\x1f\x19\x21\x86\x74\xc3\x88\x4c\x44\x57\xc9\xa4\xd3\x88\xc7\xcc\xdf\x57\x72\xb2\x65\x61\xba\x77\xda\xb6\xab\x3b\x93\xf3\x60\x84\x27\xa4\x85\x52\xe8\x0e\x88\xd5\x03\x07\x3d\x94\x4d\x5c\x13\x6e\x14\x64\xa9\xc0\x70\xae\x97\x89\xf7\x8d\x68\x71\xcd\x36\x78\xc7\x2d\x72\xcf\x15\x4d\xc8\x7a\x13\xe3\xc4\x84\xee\xd5\x84\x00\xc8\xd4\x3f\x6d\x48\xa3\x4a\xcf\x45\xac\x99\x1b\xa0\xfa\x98\x4c\x99\x90\x73\x86\x88\x48\x57\xff\x2a\x86\x97\x93\xda\x31\x0c\xd1\x3f\x6c\xc4\xbe\x92\xf8\x8d\x05\x84\xe7\xd9\x2a\xc6\x35\x31\xfb\x81\x89\x7b\x62\xb1\xcb\xd2\x18\x31\x7f\x33\xef\x0f\x21\x48\x4c\x76\x9f\xff\xf4\xa9\xba\x23\xed\x25\x42\x5b\xc3\x21\xcf\x53\xf5\xf6\x76\x36\x35\x57\xa4\xfd\x9c\xe7\x5c\x3c\x0d\x2a\x4f\x2d\x36\x36\x00\x0e\x69\x57\xaf\x3c\x88\x0f\xd0\xdf\xd1\xee\xfe\xd5\x01\xe6\x9c\x2c\x86\xe8\x61\xa1\xe1\xec\x12\x39\xd1\xe5\x7c\x92\x44\x12\x68\x95\xfc\xf4\x54\xc6\x9b\x81\xe5\x7f\x83\xf0\x25\x9a\x89\x54\x87\x9d\x31\x0b\x33\xff\x2c\x55\x2b\xd1\x53\x97\x49\xe5\x48\x60\xe6\xdc\x21\x8d\x18\xfe\x3c\xed\x8d\xe5\x52\xd0\xa3\x41\xab\x32\xa3\xaf\x65\xb5\xfa\x30\x37\x32\x1b\xe6\x46\x56\x86\xb9\x31\xac\xa7\x32\xcc\x8d\xc9\x93\xb5\x61\x6e\x56\xad\x08\xee\x22\x13\xc2\xa0\x69\x04\x97\xea\xd0\x2b\x26\xee\x8a\x8e\x6a\xac\xc3\xd1\x96\x42\xac\x24\x92\x0b\xcb\x75\x95\xe8\x00\x91\xc3\xad\x5e\x95\x87\x49\x3e\x54\x22\x9b\x17\xc4\x3e\xf1\xd5\xbe\x65\x7f\x83\x53\x92\xca\x68\x29\xf2\x8e\xa2\xa5\x94\x82\x72\x00\xe2\x1d\x83\x81\x52\x64\x8e\x9b\xdc\xcc\x2a\x72\x07\xcb\xd7\x31\xbf\xaa\xf7\x82\x64\x91\x9e\xc7\xa2\x9e\x83\xad\xe1\x50\x6e\x6f\xe7\xdc\x75\x59\x8c\x21\x77\x2b\x83\xca\x6c\x7c\x5b\x08\xfb\x55\xb1\x2b\xea\xce\x16\x6f\x75\x35\x27\xe8\xe0\x30\x2c\xc6\x7a\x25\x51\x04\x1e\x21\x4d\x98\x57\x17\x64\x8b\x94\x5e\x6b\x83\x90\xc8\x6a\x0f\x45\x0f\x8a\x21\x5f\xdc\xcf\xe3\x52\xe5\x11\x56\x30\xaa\x94\x4d\x5d\x2b\xf1\x6d\x90\x3c\xd1\x41\x2e\x65\x92\x44\x6a\x4e\x2f\x40\x23\xad\x03\xed\x1d\x18\x31\x0d\xb9\x10\xf6\x64\x70\x1d\x11\xec\xab\xec\xcb\x88\x4a\x32\xd8\xea\x2f\x5d\x72\x15\xd2\x08\xeb\x97\xbd\x8c\x80\xba\x38\x24\x91\xa0\x42\x82\x22\x2a\xf6\x3c\x22\xc4\xa0\x10\xcf\x6b\x65\x10\x9c\x3c\xfb\x37\x3d\x87\xaf\x56\xbb\x1c\x29\xc7\x02\xcc\x09\x38\xae\xb5\x9b\x32\xaa\x5a\x14\x99\xf0\x3d\x6a\x25\xad\xe6\xd3\x6b\x22\xae\x31\xd7\x32\xe3\xcf\x88\xb5\x63\x6b\xb0\xb1\x76\xb2\xdb\xc2\x1d\x2e\xeb\xea\x58\x3b\x40\xe0\x83\xdb\x89\xbc\xb4\x34\x1e\xbd\x60\x40\x9b\xc7\xa4\x31\x5c\xbf\x61\x4c\x9a\x3c\xd6\xfe\x0a\x33\x93\x86\x99\x31\xd4\x55\xae\xfa\xcf\x12\x64\x26\x7b\x16\xfd\x46\x8f\xd3\x46\x57\x7b\xef\x0c\x59\xef\x99\x9d\x89\x55\x69\xd7\xd9\x99\x08\x2f\xe2\x41\xf0\x92\x5e\x69\xdf\x14\x77\x74\xbf\xbe\xe1\xe5\x36\xd2\xbd\x52\x12\x48\x41\xd0\x50\x47\x5b\xd4\xee\x7a\x4a\xb2\xe0\x17\x24\x9a\x04\xfc\xb2\xb3\x40\xed\xe7\x19\x31\x3b\x19\x92\x5e\xf1\xcd\x6a\x70\x51\xcc\x04\x91\x28\x27\x4c\x67\x6b\xea\x37\xf5\x28\xfe\x65\x6e\xc4\xc1\xe4\xef\x4a\xc2\xa5\xe1\x56\xbf\xfa\x82\xbc\xff\x35\x2f\xc8\xf5\xb7\x67\xbc\x97\xdc\xe7\x1b\xf3\x6f\xf5\xb2\x3c\xbd\xad\xfe\x68\x0c\x40\x3f\x7a\x42\x0c\x56\x5d\xfb\x85\x11\x15\x73\xfd\xaf\x5a\x01\x28\x5b\x47\x80\xd9\x34\x06\x1a\x39\xbd\x96\xe0\x9d\x66\x6f\x74\xd4\x7d\xfb\xe2\xc4\x69\xed\xff\xad\x8d\x6c\xc0\x02\x2c\x42\x46\x24\x5a\xba\x06\x68\x3f\xc9\xf1\x32\x89\x7f\x4b\x53\xc5\x0c\x47\x61\x26\xeb\xe1\xc3\x34\x2f\xcc\x66\x8c\x46\x99\x42\x22\xcd\x38\xe0\x3a\x96\xa9\xc9\xf3\xf5\x67\x92\xfd\x22\xa0\x57\x34\xcd\x26\xfa\x33\xcd\x8e\xd4\xc0\xd2\x6c\xfd\x99\x64\xbf\xd4\xdd\xb3\xd9\x93\x42\x6f\x5f\x51\x99\xe4\x4d\x69\x66\xd8\xaf\x78\x9a\xce\x33\xc9\x11\x0e\x67\xff\xfd\x3a\xcd\x53\xdf\xbf\x07\x29\xc0\x2f\x58\x9c\x93\x20\x48\x00\x66\xe6\x3b\x05\x38\x79\x93\x16\x9f\xe3\xe8\x3c\x0e\xb3\x99\x27\x47\x69\x51\x29\x33\x59\xff\x85\x2f\x70\x92\xf5\x9b\xfa\xc8\x65\xe9\x83\x51\x0e\x40\xe8\xa4\x14\x6c\xf4\xee\x6d\x0a\x20\x38\x4b\xb3\x5e\x13\x45\x2c\x26\x2b\x20\xd9\xd9\x79\x83\xcf\xc9\x84\xaa\x4d\x33\xe9\xb3\x49\xc8\x80\xd8\x50\x19\x99\x61\x41\x42\x02\xc2\xa6\x94\x5d\x25\xf9\xfa\x2b\xc9\xd4\x5b\x36\xbd\x20\x4e\x4a\x6c\xdc\xa6\x65\xa8\xee\x88\x44\x29\x62\x43\xf5\x91\x66\xfd\x92\xe2\x2d\x9c\x65\xd0\x76\xc4\x2f\x49\x24\x66\xd9\x29\x09\xd3\xa4\x14\x6c\x21\x67\x3c\x1d\x40\xa8\x3f\x93\xec\xe3\x78\xbc\x48\x32\x23\xf5\x91\xc9\x12\x32\x93\x25\x32\x08\x1f\x61\x21\x9c\x51\x96\xee\x45\x8e\xf0\x47\xb9\x6e\x8d\xb1\x98\x65\xf2\x32\x44\x26\xb2\x04\x36\xba\xa4\x93\xb4\x41\x01\x5f\x49\xe6\xc9\x22\x24\x05\x4a\x50\x4c\xbd\x48\x09\xff\xb3\x82\x04\x7f\xdd\xcb\x64\x2e\xf0\x3c\x40\xcb\xb3\x55\x76\x3b\xea\x47\x04\xa6\xf9\xff\x99\x26\x3c\xc6\x78\xe7\x14\x19\xf6\xae\x8d\x5e\x4a\x36\x30\x4d\x2c\x5c\x40\x54\xd2\x73\xe5\x88\x78\x6c\x7e\x01\x26\x7e\x8f\x39\x98\x00\xad\x31\xa5\x41\x2e\xe2\xb1\xf4\x09\x93\x8e\x0e\x4b\xe3\x8c\xe3\x00\xe6\x8b\xc5\x73\xf8\xbb\xa1\x15\x8d\xb5\x08\x72\xb4\x34\xa1\xa7\x55\xff\xab\x51\x9c\xce\x07\x3a\xfb\xcb\xe2\xe6\x33\x2d\x6e\x36\x35\xf1\xbc\x45\x8b\x9c\xec\xc1\x39\x91\x8a\x21\xb0\x79\x9d\xb4\xdc\x54\xee\x36\xb2\x7e\x21\xe4\xcf\x5f\x26\x04\x7f\x99\x10\x34\x32\x21\x68\xfa\x48\x27\xa7\x2f\xf8\xe6\x74\x1e\x32\x0e\x77\x6c\x4e\x07\x3e\x6b\x02\xf3\xc4\x92\x06\x62\x47\x2b\xa0\xea\x94\x20\x5f\x20\x08\xcf\x3a\x35\xc8\x18\x5e\xf3\xbd\xc6\x63\x12\x0c\x90\x2a\x0d\x26\xac\x66\x60\x33\x2c\x4e\x14\x9d\x40\x94\x83\x82\x02\xa4\x0b\x9e\x22\x75\xc4\xb0\xa0\xab\xc9\xa9\xad\x4a\x80\xc7\x04\x86\xe7\x0d\x4a\x4d\x2c\xa8\x2e\xf9\x1a\x37\x2d\x18\xe0\x6c\xb9\x17\x73\x4c\x83\xf5\x85\x88\x02\xd3\x25\x8e\x8c\xd3\x95\xf5\x85\xac\x7b\x16\x5d\xee\x9f\x64\xb1\xbe\x08\x5c\x42\xc0\x96\xa3\xaf\x31\x12\x66\xaa\x36\xd7\xaa\x5b\xa6\x1c\x9a\x51\xfb\x79\xab\x97\x9a\x72\xb4\x5b\xe8\x6f\x30\x1b\x1d\x83\x62\x7b\x7f\x33\xc8\x95\xcf\x23\xbd\xb6\x8e\x0c\xc2\xab\xeb\xc9\x4d\x41\x6d\x35\x29\xfa\xab\x6b\x49\x27\x04\xb5\x3f\x7d\xda\x4a\x45\x00\xaa\xb3\x5a\x39\x9b\xb9\x74\x6a\xea\xda\x33\xd9\xd5\x8d\xe5\xe6\xb2\xa2\xcb\x8c\x5c\x76\xd2\x59\xac\xa8\xc3\x74\xc1\xa7\x9a\xb7\x15\x62\xa9\x31\x21\x31\x38\x83\xef\x1e\x45\xdc\x8f\x3d\xd9\x85\x80\x80\xea\xe8\x0e\x7b\x35\xe5\x2c\xeb\xb7\x37\x43\x24\x15\x7d\x49\x49\xa3\xa3\xaf\xe7\x6c\x6f\x5a\x59\x35\x7e\xb2\x22\x91\x8b\x46\x44\x82\x87\xd3\x38\x74\x9d\x30\x20\x58\x10\xe7\x12\x53\x09\x9e\x4e\x33\x57\x78\x5a\x1e\xc0\x17\x44\x6d\x26\x9b\x47\x88\x50\x5c\x0d\x68\xa3\x13\xc5\x6c\x75\xa4\x31\xfd\xce\xf0\xeb\xc5\x08\x57\xe2\x5c\x30\x92\x3c\xc2\xd3\x1a\xbb\xa6\xf6\x0d\x1e\xf0\x68\xb1\x22\x53\x35\x6a\x77\xa9\x5e\x55\xc7\x31\x6b\xd9\x77\x47\x59\xfb\xd3\x04\x5f\x1d\xf3\xf4\x32\x31\x3d\xcd\x0b\x50\x60\x29\x5a\xb6\x62\xb5\x06\xa4\xc5\x6a\x36\xde\x56\x43\xec\x11\xf3\xa7\x13\x68\xaa\xf9\x5a\x7b\xa9\xc4\x53\x1d\x88\xc2\xa7\x17\xc8\x05\x5b\x6e\xf5\xad\x8e\xa3\xd9\xfe\x9d\xb9\x58\xca\x88\x8e\x63\x49\x7e\xa6\xcc\xa7\x6c\xaa\x20\xbc\x58\x48\x3e\xd7\x36\x5e\x60\xf0\x8d\xce\xdc\x6c\x5a\x51\xff\x6e\xc6\x5a\x76\x43\x9c\x99\x50\x05\xd2\x1d\x4f\xc1\x42\x0b\xb5\x97\x6d\x17\x52\xcc\x5b\xca\x1b\xe9\xd8\x4d\xab\x26\x4a\x57\xa1\x29\x81\xda\x3a\x5e\x57\x3e\xf9\x10\x02\x4e\x6d\xea\x94\x3b\x37\xaf\x3a\x34\xf6\x8a\x65\x09\x96\x42\xf7\x7b\x55\x5e\x50\x72\x79\x40\x98\xa0\x72\x31\x40\xfd\x2a\x97\xfd\xeb\x3c\x17\xd4\x2e\x55\x75\xb4\xd4\x3e\xe0\x0f\x25\x99\xb7\x34\xb5\x89\xae\xaf\x5b\xcb\x1a\x10\x55\x59\xfa\x19\x9f\xc0\x30\xbf\x99\x4e\xea\x98\x15\x59\xa3\xf4\x4b\x2a\xbd\xd9\xbf\x28\xb9\xcc\x5f\xbc\x16\xca\xd4\x73\x14\x21\x79\x44\x56\x75\x14\x82\x8a\x6e\xb4\xfc\x63\xba\x03\xc2\x47\x07\xfc\x0e\x7d\xc5\x68\x38\x1e\x67\x03\x74\x41\x05\x1d\x53\xad\xac\x99\x06\x8b\x50\xce\xb4\x6b\xf5\xe2\x44\x0b\xc0\x64\xb3\xf8\x0c\x9e\xda\x94\xdb\xd7\x1e\x16\x24\x5b\x7f\xe6\x76\x48\xb7\x84\x5c\xa4\x1f\xc2\x7c\x8c\x88\xff\x91\x2c\x08\x32\x21\x4b\x1e\x40\x51\x63\x27\x52\x55\x2c\x51\x33\x89\x12\xf7\x5d\xb7\x4a\x63\xba\x03\x4b\x5c\x5b\x75\x76\x42\xaa\x35\xe4\xf7\xd4\x67\x3e\x67\xda\x94\xc1\x46\xfe\x0e\x78\x24\x36\x66\x86\x66\x2d\xea\x26\xf6\x5a\xa7\x67\x0a\x5f\x61\x2c\x66\x7a\x70\xad\x6b\x7d\xd2\xd7\x46\xc3\x1e\x84\xe8\xf8\xdb\xee\xd3\x47\xbb\x8f\xbe\x47\x30\xa0\x35\xa0\x8f\x9e\x3d\x7e\xf6\x78\xd2\x08\xf4\xf1\x93\x27\xf8\xe9\xe3\x46\xa0\x4f\x1e\x3f\x25\xcf\x70\xb3\x5a\xb5\xb9\x6f\x13\xd0\x67\x4f\xd4\xff\x8d\x40\x9f\xf6\xd5\xff\x8d\x40\xfd\x27\xbd\x5e\xaf\xd7\x08\x74\xfc\xac\xef\xf5\x9b\xf5\xf5\xfb\xef\x7b\xa4\x21\x5e\xbd\xdd\xfe\xf7\x4f\xc6\xcd\x90\x85\xfb\x8f\xbf\x6f\xd6\x81\xa7\xb8\x3f\xfe\xa1\xd9\x14\x3c\x1b\xf7\x27\x78\xb7\x19\xb9\xf4\xfb\xe3\x1f\x9a\x81\xf6\xfc\xc7\xcf\x70\xb3\x29\xe8\x3f\x79\xfa\xc4\x6b\x36\x05\xbb\x3f\x3c\xdd\x9d\x34\xc3\x6b\xef\xd1\x0f\x63\xd2\x8c\x5c\x7a\xbd\xef\x1f\x7d\xdf\xb0\xd6\xde\xd3\x5e\xc3\x55\xd0\xeb\x7d\xff\xc3\xb3\x66\x13\xbb\x4b\x9e\xf9\x8f\x1a\x4e\xc1\xf7\xdf\x93\x47\xcd\x68\xe0\xb1\x87\x27\x4f\x9a\xe1\xf5\xd1\xa3\xa7\x3f\xf4\x49\x33\xd2\xde\x7d\xf6\xac\xff\xac\x11\xe8\xe4\x07\xfc\xfd\x6e\xb3\x29\x98\x4c\x3c\xbc\xdb\x8c\x67\x91\xc9\x53\x0f\x56\xec\x7a\x4e\x38\x9e\x3c\x7a\xda\x6b\x86\xac\xc9\xe4\x91\xdf\x90\x0f\x3c\x26\x8f\x1e\xef\x36\x43\xd6\x53\xff\xb1\xf7\xb8\xd9\x2a\xf8\xde\x7f\x4a\x9e\x3e\x42\x05\x83\x7e\xb5\x69\xe4\x4c\xdb\x40\xba\x6e\x91\xd3\xde\x59\x57\x15\xd4\xd1\xd5\x4c\x62\x95\x95\x2c\x54\xa0\x44\x32\x82\x95\x0c\xe0\xca\xe1\x4f\xd7\x39\x9b\x58\xdb\x15\xe4\x4a\xa8\x71\x38\x1c\x82\x41\xa3\x35\xa1\xcd\x6a\x50\x61\x3f\xcb\x87\xce\x49\x53\x5b\x45\x01\x0e\x2a\xce\x0a\x6f\xb6\x9b\x9b\x6f\xfb\x60\x30\x71\xdf\x37\x7c\x73\x3b\x88\x0a\x3b\xff\xe7\x48\xde\x36\x88\x14\x8c\x1f\xb5\x1f\x94\x72\xb4\x38\x7e\xa2\xb2\x45\xcb\x18\xea\xa9\x29\xce\xcd\xb7\xbd\x0f\x20\xfe\x50\x76\x19\x9e\xc3\x1c\xbb\xda\xd4\x19\xbe\xb7\xb7\x5b\x26\x03\x1d\x68\x84\xc0\xf9\x2d\x25\x44\x68\x1f\x4c\x4f\x97\x75\x93\x5c\x24\x3d\x53\x24\xb5\xc5\xae\x24\xa4\x56\x33\xc2\xb4\x9d\x4e\x7a\x55\xa6\xbd\x1b\x50\x55\x4c\x3b\xf8\x02\x4b\xfc\xad\x28\xc4\x75\x97\xb5\xca\xaa\x33\xc5\xe1\x7d\xd4\x3d\x9c\xa5\x5f\x59\x75\x03\x0e\x3c\xb0\x8c\x47\x67\xee\xe5\x8c\x44\x64\x80\xe0\x56\x15\xb9\x49\x4e\x51\xe5\x50\x52\x35\x20\x7f\xfe\x47\x66\xf0\xa9\x51\x1f\x10\x04\xd4\x0a\x1e\xe8\x6e\x88\xd0\x7b\x80\x4c\xdb\x91\xcd\xf0\x59\xa9\xde\xc1\x81\x07\xdc\x66\xe0\x63\x89\x3b\x3e\x15\x73\x2a\x04\x72\x91\x88\xc7\x73\x2a\x75\x96\x5c\x84\x04\x9d\x19\x2d\x0d\x42\xae\x3e\x55\x22\x7d\x54\x51\x3f\x02\x08\x98\xb7\xd5\x77\x79\x2c\xad\x6d\x1d\x2c\x6b\x5f\x9b\x4d\x42\xa5\x90\x18\xc5\x6a\x26\x88\xb6\xc9\x8b\x88\xf4\x66\xea\x67\x1c\x86\x24\x52\xe7\x41\xb0\x8c\xf3\x38\xd3\x13\x8d\xe0\xae\xe3\xd0\x4b\x82\x12\xa6\x6a\xa6\x04\xa8\x42\xd5\x84\xd0\x96\x66\x22\x09\x90\x79\x3c\xbf\x6c\x37\xa2\xa2\x7c\xd9\xb4\x2a\xeb\xa8\x31\x25\x2f\xf4\x20\xab\xdc\xd2\x23\x7e\x4e\x1e\x0e\x51\x47\xf3\xe1\x01\xfc\x36\x96\x8c\x80\x2d\xcd\x94\x00\x5f\xdb\xdb\x2d\xc8\x86\x0f\xeb\xb4\xdb\x20\xd0\xe6\x99\x4f\x9b\x9b\xe0\xe9\xd3\x27\xc8\x07\x53\x8b\x8e\x4a\xe8\x30\x1e\xcd\x71\xe2\xfb\xdb\xe2\xd9\xd4\xa3\xe1\x6c\x62\x12\x27\x55\x4f\x80\x85\x99\xe3\xab\x0e\xf8\x72\xe8\xf4\x7b\x3d\x5d\x22\x20\x13\xd5\x33\x62\x10\xa7\xa9\x61\xdd\xf2\xd3\xc8\x30\x93\xfe\x5c\x3f\xbf\x47\xb0\xc3\x2d\xdb\x6e\x96\xac\x9a\x55\xa4\x4b\x3c\x37\x04\x99\x54\xe4\x05\xd4\x83\xbb\xef\xc2\xe5\x2f\x20\x91\x81\x23\xfd\xb6\xc2\x52\x37\x8c\x20\xcc\xb4\xd9\xae\x5a\x16\xcf\x1a\x44\x6f\x07\x9b\x73\x02\xcf\x3c\x38\xba\x07\xbc\x40\x84\x98\xa1\x9c\x66\x5b\xf5\x2d\xf7\xfe\x2f\xdd\x20\xb7\xb2\xf6\xfd\x26\xf1\x86\x1b\xa2\x4f\x71\xc0\xa7\xeb\xde\x68\xe7\xee\x5b\xbf\xfc\x35\xab\x31\xfc\x84\x00\xc6\xae\x07\xf7\xfa\x49\xc0\x40\x73\xcd\xef\xc2\xeb\x85\x68\x9e\xa4\xbf\xfb\x27\x72\xe1\x56\x6f\x80\xf6\x75\x16\x72\xf5\x1d\x42\xdf\x15\xf4\x0f\x62\x74\x67\x1b\x5e\x65\xd8\x47\x1a\xba\x3b\xc8\x3c\xaa\x8d\xe6\xd6\xe7\xe0\xc3\xe4\x46\xaa\x3b\xc7\xe7\xe4\xd0\x6f\xf5\x7b\xed\x8d\x82\x29\x57\xfa\x91\x4d\x5b\x4c\x3d\x65\xe8\xe9\x9f\xf1\x4b\xd4\xae\xf0\xeb\x0a\xfd\x51\xf2\x86\x5b\x93\x65\x8a\x3e\x48\xbd\x9c\x96\x5d\xd4\x72\xd6\x42\x33\xea\xfb\x84\x75\xc7\xe6\x66\x25\xc3\xa8\x79\xfb\xda\x98\x37\x40\x55\x15\xe6\x30\x69\x63\x3e\x15\x21\x17\x04\x22\xdc\x91\x40\x90\x3a\xb8\x19\xf5\x15\x63\x5b\x5f\x4d\x6e\xa9\x58\xf3\x8f\x55\x5e\x58\x33\x28\xac\xaa\x2e\x6b\x21\x42\x27\x55\x0c\xc7\xbc\xf3\xac\xb2\xd8\xb0\x4e\x48\x2a\xad\x39\x72\x6e\xf5\x12\x4c\x6d\x78\x8b\xa8\x17\xab\xda\xbe\x3a\x60\x9c\xf2\xf5\x19\x16\x2d\xdc\x41\xa1\xf5\x92\x0b\x08\x1c\x5a\x3b\xda\x60\xff\xce\x9c\x8d\x54\x41\x57\x56\xdf\x1c\x3f\xc8\xc4\xc7\x34\x97\x10\xcf\x11\x1a\xb4\x4a\x01\x81\x65\x57\x89\x20\x70\xbc\xda\x0b\x43\xd1\x76\x91\xaf\x50\xe9\xa0\x87\x37\x94\x23\x03\x2a\xe4\x57\x3f\xa3\xaa\x93\xd2\x4b\x4a\x02\x7f\x80\x94\x50\x30\xe5\x8a\x71\x0b\xca\xa6\x01\xd1\x67\x35\xc5\xef\xe6\xf8\xca\x44\x7a\xee\xb9\xf6\x0c\xa7\x27\x02\xee\x02\xf7\xcb\xf3\x80\x92\x22\x2b\x5f\xe1\xa4\x50\xc9\x3c\x90\x9f\x7a\xcf\x33\xa6\x6f\x03\x47\x5b\xbe\xfd\x08\x82\x89\x89\xc9\xec\xa4\x0f\x74\x5c\x14\x5e\xfd\x88\xda\x3a\x32\xfd\x3a\x7f\x0d\xb9\x55\x7f\xc2\xa7\xd3\xc4\x5d\x56\xc5\xe2\xd4\xc3\x54\xcc\x31\xcf\x31\x33\xb8\x41\xed\x0a\x87\x45\x92\xcc\x05\xbc\xc0\xcd\xfa\x70\xca\xd9\xce\x65\x36\xe2\x7e\xfe\xdc\xac\x0b\xbb\xa4\xbd\xac\x2b\x40\xca\xdb\x36\x78\x90\xaa\xea\xb9\x56\x9d\xdc\x80\x32\xf5\x66\xa4\x85\x5b\x71\x0f\x78\x45\xf9\xc6\x5a\xf7\x70\xc2\xb9\x24\x11\x3a\xbb\xe9\x10\x9b\x58\x87\x7d\xe9\x97\x71\x39\x59\xc5\x08\x20\xe8\x2e\x25\x0e\x59\x2d\x71\x24\x2b\x65\xe3\x2b\xcf\x98\x76\x34\x79\x7e\x3d\xca\xf1\x84\x48\xce\x8e\x61\xc4\xe7\xa1\x61\x57\x1c\x84\xbb\x7f\xa9\x7a\x8f\xb0\x9c\x0d\xe0\xfd\xbf\x4e\x04\x9b\x1e\x9d\x08\xd6\x53\x06\x01\xad\xf6\xf5\xd2\xfd\x98\xd8\xc7\x16\x6d\xcb\x22\x82\x7d\x61\x97\xa3\x76\xd7\x93\x20\xce\xd3\x2f\x93\xf5\xe3\xef\x84\x49\xfc\x1f\x0b\x8d\xda\xa7\xbd\xb3\x44\xd3\x76\xc8\x7c\x72\x55\xdc\xa3\xd4\x9c\xa1\xf6\xe9\x56\x46\x5e\xd7\xa3\x41\xed\xe7\xa4\xd3\x1f\x90\xb3\x07\xe9\x1c\xa7\x9d\x84\x27\xdf\x19\xd5\x5f\x62\x17\x7a\x33\x11\x1f\xae\xc1\xbf\xe2\x16\xb5\x99\x7a\x03\x56\xca\x93\x5e\xaf\x91\x8c\x60\xae\xba\xc1\xed\xce\x21\x33\xaa\x21\x55\x83\xab\x16\x01\x5c\x6b\x3b\xfd\x5e\x6f\x60\x34\x0a\x1a\x13\xea\x60\x8c\xe0\xde\xda\xd9\x2d\xe5\xed\x26\x79\x8f\x4a\x79\x8f\x92\xbc\xc7\xa5\xbc\xc7\x49\xde\x93\x52\xde\x93\x24\xef\x69\x29\xef\x69\x92\xf7\xac\x94\xf7\xac\xd7\x43\xcb\x72\xd7\x6f\x24\xac\x98\x47\x09\x7f\x29\xbf\xd6\x2a\xbf\xfe\xbc\x1a\xaf\xbb\xd2\x76\xfd\xa5\xcf\xba\x27\xfa\x2c\xbb\xc8\x7d\x7a\x41\xfd\xaf\xc9\xf2\x57\x48\x7e\xb6\x6f\x37\x11\xfa\x92\xf1\x45\x3c\xd4\x4f\x2d\xbf\x8d\x3d\x2d\xe1\x3a\x09\xb7\xc1\x51\x04\xe6\xac\x79\xa6\x71\xd3\x45\x5e\xb2\xa6\x56\xac\xa7\xbb\xa7\xda\x18\xcd\x71\x10\x1c\xf0\xcb\x54\xed\x6d\x71\x57\xc1\x06\xec\xfa\xb5\x30\x39\x2e\xf0\x1f\xb7\xe0\x56\x06\xcb\xcb\x13\x24\xd8\xd1\x7d\x35\x62\x8c\x78\x2c\x49\x54\x77\x4d\x5d\xab\xb1\xf1\xa1\xd7\xeb\xa9\x37\x21\x5a\xbb\x67\xaa\x51\x4b\x1a\xc2\xb9\x26\x6b\xd8\x50\x47\xbd\x99\xf3\x6f\x49\x97\xa0\xaa\xcb\xec\x54\xe9\x46\x38\x4c\x29\x4f\x6f\x05\xe9\xf7\x43\xe4\xa0\xb6\xbb\xd5\xb3\x07\x7e\x5b\xbd\xd9\x32\x40\x4b\x66\xd3\x14\xa4\xae\xce\xd4\xa2\x0b\x93\xcc\xce\xda\x80\x82\x9e\x57\xe4\x05\x94\x9d\x9f\x70\x6b\xdf\xaa\xe7\xa0\x0b\x01\xc0\xe1\xdd\xc2\x09\x6f\xe5\xdf\xd4\x9d\xf0\xc4\xed\x46\x4a\x75\x9f\xc3\xe5\xbf\xb2\x3d\x7a\x43\xaa\x2b\xef\x00\xd6\x4e\xbd\x31\xdd\x25\xec\xf3\x76\x09\xef\x56\x88\x4d\x1b\xa8\xa6\xea\x9c\x2f\x48\x59\x06\xec\x16\x49\xea\x7e\xec\xa7\x70\x33\x6b\x7b\x54\x4d\x26\x11\xa6\x82\xf8\x83\x0c\x60\x47\x27\x21\x17\x8d\x79\xe4\x93\xa8\x90\x6b\x13\x91\x8b\xb4\xa0\x9f\xcd\xd4\xc2\xac\x8b\x7c\x1c\x9d\xe7\x32\x54\x02\x3a\x73\x4d\x6b\xe0\xa6\xd7\xd4\xad\x4e\x07\x0a\x7a\xab\x9f\x39\x38\x24\xd4\xb9\xd9\x0c\x08\x12\xed\x4c\x78\x34\xe5\x32\x7d\x4a\x75\x1f\x7c\x3c\xc1\xc3\x30\x58\x6b\x78\x71\x32\xc3\xec\x1c\x4e\x42\x02\x9b\x57\x7a\x5b\x7d\x17\x20\x40\xc9\x5e\xf3\x66\x2f\xf3\x2a\x10\xc0\xea\x1f\x13\xc2\x3b\xed\xb4\x3e\xe4\xea\x8f\x43\x5d\x2e\xab\x96\xd1\xa8\xaa\x50\x46\x9b\xc6\x1e\xd0\x49\xcb\x30\xa5\xa2\x97\x78\x27\x63\x70\x34\xa3\xa2\xd0\x46\x95\x1f\xa5\xbf\x15\x5e\xc7\x3d\x28\xd6\x90\xe0\x26\xeb\x3c\x29\x97\xad\x9f\xab\x55\xe6\x16\x9a\xef\x67\xb5\x3e\x7a\x98\xa0\x04\xd6\x66\x5e\xe0\x76\x69\x55\xf3\xbd\x9a\x06\xc0\xc1\xdc\xb2\xdd\xd5\xde\x87\xeb\xaa\xb1\xdd\xec\x95\xfd\xad\xad\xd5\x19\x2a\x0a\xb6\xa4\xdb\x89\x88\x20\xf2\x5e\x10\xb0\xed\x12\x68\x11\xcd\x6f\x73\x17\xac\x92\xe6\xb1\x90\x6f\xb0\x39\xc9\xdb\xfc\x55\xd4\x9c\x79\xae\x6a\x94\xb0\x4d\xa0\xed\xed\xf3\xfa\xb7\xb1\xb0\x06\x72\x1d\x41\x6e\xf2\x9d\xae\x84\x19\x16\xa6\xce\xfa\x5a\xb2\xfd\xcb\x54\x62\xca\x55\xac\x2a\x98\xb5\x4a\x3f\x6b\xc9\x98\x59\x45\x72\x32\xb8\xbc\x8b\xee\x74\xe5\x3d\x6f\x15\x69\xad\x38\xa0\xca\x65\xc7\xc8\xe5\x51\xe9\x59\x69\x7b\x90\xaf\x9d\xad\xa8\xbd\x30\xd2\xca\x46\x4a\x83\xa8\x68\xe8\xf7\x18\x07\x2d\xe2\xb2\xf6\xf3\xc2\x7b\x50\x4d\xe6\x6b\x96\x67\x79\xac\x15\x5c\xa0\xb6\xcb\xfd\xf6\xb2\x3d\x28\x8d\xb0\xf4\x2a\xb7\x72\xe5\x17\x88\x44\x03\xc1\x10\x8a\x90\xc9\x32\x00\x98\x1b\xad\x7d\xf5\x4f\x27\x8c\xb8\xf6\x90\xd4\xc8\xdd\x3f\x3c\xa9\x6b\x6a\x61\xf2\x45\xa3\x69\xae\x33\xfb\xbd\x5f\xaf\xf0\xf3\x8f\xbc\x57\xde\xd5\x66\x1f\x83\xd7\x2d\xd7\x4f\x9f\xb6\x78\xe9\x41\x39\x98\xe1\xae\x61\x5e\x19\xc6\xa5\xe9\x2d\xf9\x4e\x5f\xf9\xbb\xd7\x53\xe0\x31\x85\xb6\x8f\xd4\x52\x62\xb2\x55\xe6\x2e\xe6\xa5\x77\xfb\xb9\xf1\xaf\x5c\x58\xff\xe5\x02\x19\x8f\x02\xed\xe7\x2c\x0e\x82\x81\x9e\xfb\xe5\x32\xcb\x36\x57\x8f\xc3\xab\x00\x6a\xde\xf5\xca\xd2\x6a\x04\x54\x74\x28\x03\x6f\x7e\x48\x49\x88\x8d\xa3\x13\xd8\x11\x0d\x73\xdb\x99\x69\xc6\xb8\x56\x46\xcb\x65\xc9\x11\x42\x1d\x23\xef\xae\xe1\xe8\xdd\x6c\xd5\x55\xd2\x54\x91\xa2\x32\x14\x5e\xe7\x37\xbb\xc2\x33\xc2\xfa\x7a\xd3\x05\x50\x57\x6d\xd9\x53\xc2\xfa\x5a\xad\x33\x84\x9a\x2a\x8b\xe2\x5e\xa6\x3e\x3b\xd7\xa4\x6d\xbd\x8c\xa7\xfb\x50\x9d\x7c\x59\x4d\x4b\xd6\x5b\x78\x69\x43\x2a\x80\xaf\x1a\x57\xb6\x17\xb6\x67\xf5\xfd\x28\xae\xcd\xba\x0e\x94\x5d\x39\x40\x18\x87\xf2\x6e\x78\x07\x0d\x15\xfd\x10\xa5\x20\x19\xbb\x2a\xe3\x85\x81\x83\x07\x78\x1c\x04\x8b\xd5\xfb\x6e\x86\xf7\x20\x54\xbf\xf3\xe6\x69\x5e\x8b\xcb\x1b\xfa\x1c\xbe\xea\x48\xb0\x47\x29\x6b\x65\x94\x14\x3e\x26\x91\xc9\xaf\x2f\x93\xe6\x7c\xbe\xa0\x5c\x5b\xc0\x0c\x07\xb9\xd7\x84\xc5\x73\x12\x41\xac\xe3\xad\x9e\x3b\x25\x72\x50\xa1\x78\xb5\xc3\x07\x97\xdd\xcd\xc6\xaf\xaf\x64\x37\x44\x80\x2e\xf4\xe7\xc0\xc0\x66\x43\xcf\x8c\xd9\xcd\x56\xcb\x26\x74\xba\x43\xd8\x05\x8d\x38\x9b\x97\x31\x72\x3b\x56\xb7\xda\xb0\x81\x0f\x13\xe1\xe7\x34\xd7\x5f\x74\xf6\xe9\xd3\xf5\xd2\xc8\x4d\xa9\x99\x49\x72\xc9\x03\x5e\x6d\x13\x71\x01\x1e\x25\x7d\xfa\x94\x22\xd8\xfc\x78\x37\x99\x68\x0f\x48\x09\xa4\x4d\xf9\xf4\x09\xbd\x9b\x4c\x06\x03\x3e\x99\xa4\xd0\xac\x08\xcc\x12\x58\x36\x18\xa8\xe5\x29\x66\xfc\x12\xd2\x44\x0a\x35\x4a\xd2\x3e\x7d\xb2\x06\xbe\x69\x26\xfd\x43\x75\x6c\x4e\x7c\x1a\xcf\x51\x93\x65\x6d\x6e\x52\xd2\x5f\x77\xaf\x19\xbb\x4e\xda\x32\x12\x89\xa9\xd8\x62\xfb\x3d\x13\xe4\xf7\x98\x30\x8f\xf8\x83\x1f\xd4\x7f\xee\x28\xc4\x1e\x44\xaf\x1b\x5c\x1f\xc5\xe3\x80\x7a\x83\xbe\x7b\x14\xd1\x0b\x2c\xc9\x60\xd7\x3d\x8a\xb8\xd4\x1a\xd2\x47\x4b\x77\x2f\x96\xb3\xa3\x88\xc3\xcd\xdb\xe0\xda\x06\x6e\x18\x24\x43\x46\xee\x3f\xc9\xc2\x0b\x38\x3e\x1f\xa0\x73\xf3\x0b\xb9\xaf\x0f\xf6\x8e\x06\x28\xf0\x71\x88\xdc\xfd\xbd\xd1\x00\x79\x58\x20\x77\x44\xa2\x0b\x12\xa9\x76\xb3\xf9\x69\xea\xde\xc1\x00\x61\x1f\xb9\x2f\x98\x17\x2d\xc0\x34\x47\xa5\xbe\xe5\x8c\x0c\x10\xe3\x8c\x14\x73\x46\x12\x47\xf2\xe4\xf5\x68\x80\x84\xfa\x25\x03\x81\x96\x2e\x74\x91\x30\xa9\xad\x68\xf5\x20\x8f\x09\xf6\x07\x7d\xf7\x25\x21\x3e\x78\x50\xdc\x75\xf7\x39\x33\xe6\x00\x83\x47\xee\x5e\x18\x46\xfc\x82\x0c\x1e\xdb\x5f\xfe\xe0\x89\x7b\x4c\x7e\xd3\x48\x78\xea\x02\x8e\xc4\x6c\xf0\x6c\xe9\xbe\x17\x24\x52\x35\x5f\x50\xb9\xd0\x75\xef\x47\x04\x42\x71\xf5\x5d\x68\x65\xd7\x7d\xe1\x53\xc0\x9d\x7b\x00\xc1\x5d\x7d\x55\x6d\xe4\xcd\xa8\xae\x36\x69\xe1\xa9\x7b\x4c\x2e\x48\xa4\x00\x9e\xd9\x16\x88\x7f\x62\x3c\x69\x0e\xbe\x4f\xd3\x7e\x0e\xb8\x77\x3e\xf8\x21\xed\x7e\xbf\x97\xf6\xae\xdf\x77\x47\x84\xc9\x11\xf1\xe2\x88\xbc\xa6\xec\x7c\xd0\xdf\x75\x0f\x22\x3c\x91\x83\xfe\x23\xf7\x5f\x24\x12\x94\x33\x05\xf7\xd8\x1d\x81\xc3\x50\xf5\xfb\x49\x5a\xf9\xa0\xff\x74\x69\x67\x3c\xc1\x17\xa0\xbc\xe7\xbe\x56\xed\xaa\x71\x5d\x50\x72\x39\xd8\x75\x55\xb2\x75\x49\x06\x16\x4e\xc2\x09\x49\x34\xa7\x52\x12\xdf\xb9\xa4\x72\xc6\x63\xe9\x60\x18\x20\x0e\x10\x14\x37\xe0\xea\x27\xf1\x5d\xc7\x33\xc5\x18\x97\x69\x51\x64\x5a\x28\x54\x1d\x91\xdf\x63\x1a\x91\xa4\x42\xc7\x04\xd3\x0d\x81\x62\xf5\x86\xbb\x34\xf8\xc4\x41\xae\xe3\x7b\x6c\x31\xe6\xfe\x62\xd0\x77\xdf\xe0\xdf\x78\x44\xe5\x62\xb0\xeb\xbe\x67\x98\xd1\x39\x8f\x85\x9a\x71\x0d\x60\x5a\xb4\x75\xd8\x26\x7d\x67\x12\xf1\xb9\x83\xd9\xc2\x34\x4e\x22\x94\xd4\x64\xca\xd8\xcf\xb4\x7b\x85\xc2\xa6\xa0\x40\x69\xc3\xa6\x68\xf2\x5d\x5b\x36\x08\x32\xe5\x97\xae\xc6\xc8\x48\x2a\xba\xb8\x4e\x67\xae\xe7\x1e\x11\xd0\x6b\x0f\xfa\xee\x7b\xe6\x93\x28\x99\xa8\x84\x3a\x1e\x59\x90\xb7\xe4\x72\xf0\x78\xe9\x1e\xe1\xa9\x59\xf7\x27\x78\x0c\x41\x92\xd5\xfa\xd3\xf6\x6d\x49\xdc\xb9\xa5\xfb\xef\x19\xd7\x50\x8a\xdc\x07\x48\x07\x36\x79\x15\xf1\x38\x1c\xa0\x88\x83\xeb\xe2\x17\x17\x24\x5a\x70\x46\x14\xc4\xa1\x3f\x40\x3d\x94\x4b\xd2\x37\x38\x36\x05\xb9\xaf\xe9\x84\x78\x0b\x2f\x20\x83\x6b\x4d\x9c\x3d\xf7\x35\xbd\x20\x83\x7e\xba\x36\x0c\xd9\x1a\x24\xc1\x6f\x04\x40\x96\x86\xe8\x05\x41\x09\xb8\x9d\x3a\xf3\x89\x96\x96\xd6\xf5\x7a\x7c\xc3\x7d\xd5\x7d\x76\x91\x2e\x00\x77\x3f\x80\x1f\xbb\xae\x5a\x26\x86\xbb\x6d\xca\x24\x70\x70\xac\x78\xa9\x90\x4d\x98\xc5\x48\xf2\x88\xa4\xcc\xf3\xcd\x62\xf4\xdf\xaf\x07\x08\xfe\x20\xf7\x88\x0b\x39\x8d\x08\x24\xa5\xbf\x91\x7b\x44\x22\x8f\x33\x0c\xde\x9a\xd5\x0f\x45\x79\x11\xc5\x07\x3f\x83\x9f\x68\xf5\x03\xb9\xa3\xff\x7e\xad\xb9\x26\xf8\x39\xd6\x3f\x11\x2c\x63\x3f\xf6\xe4\xe0\x7a\x9f\xcf\xe7\x31\xa3\x72\x61\x3c\xa1\x81\x0b\x41\x9d\xa2\x78\x68\xc1\x4f\xda\x00\xa5\x49\xc8\x3d\xc2\xde\x39\x9e\x92\x17\x42\x1d\x0c\x28\x0e\xc4\x00\xa5\xbf\x93\xec\x3d\xff\x02\xc3\x86\x82\xec\xaf\x24\xeb\x28\x22\x73\x1a\xcf\x07\xc8\xfc\x48\x32\x0e\xb0\xc4\xfb\xe0\x2d\x77\x80\xd4\x6f\x47\x7f\x20\xf7\x28\xc0\x6c\x3f\xe0\xb1\x3f\x40\xf0\x47\xa7\x8c\x48\x30\xf9\x85\x0b\x39\x40\xea\x57\x67\xc6\x85\x54\xc4\x8a\xa5\xe8\x0d\x7a\xfa\x47\x5f\xb1\x42\xf8\xb5\x3b\xd8\x7d\xa2\x7f\x3d\x1a\x3c\x31\x69\x8f\x07\xfd\x9e\xf9\xf9\x64\xb0\x6b\x53\x9f\xc2\x1e\xb8\x74\xc1\xc6\xea\x7a\xcf\xf7\x35\x8d\xc3\x95\x76\x07\xfb\x7e\x67\xf7\x19\x72\xf7\x82\xc0\x26\xcd\x09\x8b\x3b\xdf\x23\x77\x8f\x31\x1e\x33\x8f\xd8\x74\x1d\x75\xd2\xf0\x21\x4b\x96\x36\x13\x5e\x86\x81\x15\xc5\xfb\x30\xa9\x5b\x7d\x76\xe2\xb0\xb3\x6b\xb2\x0e\xf8\x25\xcb\x67\x82\xe5\x84\xcd\x7e\x4d\x26\x32\x9f\x1d\x90\x89\x4c\xb2\x8f\xe1\xf2\x28\x97\x0f\x0f\x65\x13\x00\xb0\xdf\x48\x9b\x17\xea\xb3\x13\x87\xd9\xdc\x6c\x0f\x74\xbe\xb6\x8d\x49\x21\xb2\x9d\xd0\x10\x60\x42\x95\x81\xc8\xf5\x43\x83\x98\x07\xbb\x7b\x52\x62\x6f\xa6\xf6\xe2\xa4\x9b\x49\x0a\x72\x7f\xc6\xd1\xfe\x0c\x47\x49\x9e\xa7\x3e\x3a\x63\x1c\x75\x1e\x3d\x42\x2e\xec\x79\x22\x37\x07\x4f\x91\xfb\x33\xe7\xe7\x73\x1c\x9d\x8f\x78\x40\xfd\x14\xd7\x3a\x31\xcd\xde\xf3\x4b\x99\x6a\x66\x53\x00\xbd\x33\x97\x60\x74\x34\x76\xe4\xfe\x0c\xd6\x6e\x7b\x86\x2d\x1a\x20\xfd\x9c\x78\x17\xb9\xfb\xe6\xb1\x84\xcd\x99\x04\x78\x8a\x14\x8f\x4e\x86\x32\x56\x83\x91\x2a\x4d\x3f\x12\x4c\xb0\x33\xc3\xe0\x5b\xd5\x93\x98\x81\xb8\x6f\x01\xe0\x2f\x49\x3a\x6d\x9e\x17\x22\x77\x9f\x87\x49\x33\x1e\x0f\x17\xc8\xdd\x8f\xb8\x10\x29\x9c\xf6\xac\x84\x5c\xb5\x9c\xc6\x58\x24\x43\xf2\xcd\x37\x72\xd5\x14\x07\x1c\x27\x75\xfb\xe6\x1b\xb9\x05\x24\x50\x86\x40\x74\xb1\x09\x21\x81\xd1\xbe\xd0\x57\x79\x3a\xcd\xa8\x0a\x5f\x5c\x85\x98\x25\x35\x12\x16\xe0\x68\x4a\x20\x99\xa7\xf3\x09\x16\x95\xda\xeb\xb5\xcd\xda\xb5\x79\x36\xf9\x25\x0d\x64\xba\xf8\x04\x8f\x24\x5c\xa0\xaa\xbd\x26\x9d\xdf\x69\x44\xfd\x0e\x84\x11\x9b\x60\x8f\x20\xf7\x15\x3f\xe1\x09\x55\xab\xe1\x77\x02\xbc\x20\x11\x90\xf6\x2f\x98\xf9\x62\x86\xcf\x93\x61\xcd\x6c\x02\x72\xc1\xce\xba\xb8\xaa\x0f\x99\x24\x53\x1d\x67\x2c\x41\xeb\x94\xf0\x39\x91\xd1\x02\xc1\x46\x61\x53\xb5\x7b\xf0\xd7\x54\xc8\x9f\xe3\x20\x20\x32\x4d\x17\xb2\x33\x86\x24\x85\x2f\x2d\xe9\x24\x99\x5c\x4d\xe3\x1b\x1e\x91\x5f\x78\x44\xff\xe0\x4c\xe2\x3c\x63\x79\x82\xdc\xb7\x5c\xee\x05\x01\xbf\x4c\x4b\x8d\x31\x43\xee\xd1\xc1\xcb\x64\x2a\xfc\x09\x52\xf2\x79\xba\x90\xc0\x21\x3c\x72\x8f\xe2\x20\x9d\xf3\x50\x7d\x28\xd6\x19\x27\x23\x21\x9a\xec\x8f\x48\x24\x52\x4a\xd6\xcf\x58\x3a\xbd\xbe\xca\xe0\x61\x90\x54\x30\x8f\x03\x49\xc3\x80\x74\xfa\x3f\xa8\xe6\xb4\x30\x91\x34\x08\x9f\x48\x0b\xb9\xd9\x11\x3c\x53\x69\x6a\x1a\xb2\x7c\x54\xaf\xa4\xce\xee\xf7\xc8\x48\x9d\x49\x11\x3c\x65\x26\x58\xef\x88\xa4\x34\x24\x08\xf3\x55\x0a\x38\xd5\x14\x69\xaa\xfe\xee\x4c\x09\x56\x05\x66\x38\x4a\xd9\x2f\x91\x97\x3c\x3a\xef\x78\x9c\x31\x6b\xfb\x3e\xca\x90\x1f\x0e\xc2\x19\xee\xc0\xa5\x3b\x72\x47\x61\x90\x12\xb6\x50\x1f\x9d\x47\xcf\x90\x7b\x82\xa7\x85\x0e\x9f\x93\x05\x72\x4f\xa8\x77\x9e\x72\x25\x58\x88\x2a\x69\x04\x78\xcb\x65\x18\x5c\xea\xfc\x03\x1e\x8f\x8b\xf9\x3e\xa4\xa9\xfc\x39\xf9\x19\xa7\xd5\x4a\x3a\x57\xa9\x11\x05\x46\x50\xc9\xa9\xa5\xc9\x04\xba\xce\x41\x96\xb9\x76\x02\xab\xd9\x77\x0e\xba\xcc\xc1\x13\x68\xcd\xca\x73\xd0\x15\xdc\x3c\x01\x37\x6c\xfd\x3d\xc3\xf9\xcd\x2e\x65\x29\xef\x59\x90\x23\xff\xd8\x7c\x23\x7d\x6e\x12\x82\x4e\x59\x96\x49\x02\x6e\xff\xcd\xa3\x20\x5d\xec\x01\x1f\x2b\xf1\xd2\x3e\xb8\x1b\x5c\xab\x43\xde\x40\x3f\xb8\x83\x07\x8c\x1d\x01\x6e\x38\x46\x71\x68\xb8\x4d\x26\x47\xa7\x21\xf7\x0d\x11\x02\x4f\x49\x2e\x73\xae\xd3\x90\x12\xdb\x44\x2e\x07\x87\xa1\x50\x7b\xc3\x55\x2e\x15\xb6\xf0\x57\x74\x92\x6f\x62\x0a\xc1\x23\x0e\x88\x19\x49\x9a\xe1\x43\x92\xda\x3b\x82\x71\xbe\x9e\x38\x18\xab\x1e\xc9\x88\x7a\xa2\xd0\x23\x48\x43\xee\x11\x25\x76\x2b\x4c\x73\x43\x4a\x60\x4b\xcc\xed\x94\x99\x6a\xd5\x24\x40\xf6\x4b\xca\xb0\x96\x4b\xd2\xdc\x89\x4e\x43\xee\x6b\x9c\xef\x4d\xa0\x24\xfe\x7d\xf0\x23\x94\x49\xf5\xb8\x4f\x90\xfb\x0b\x09\xc2\x5c\xf2\x8c\x04\xa1\x12\x3f\x59\x0c\x62\x60\xb6\xeb\x3a\x0d\xb9\x2f\x03\x7e\x99\x6f\x39\xe0\x97\xc8\x7d\x17\xe7\x7b\xcb\x63\xa9\x78\x6d\x2e\x4d\x6d\x38\x47\x38\x92\x8c\xe4\xe7\x37\xd4\x69\xc8\x7d\x17\x4d\xf3\x95\x44\x53\xe4\xfe\xc2\xe7\xf9\xbe\xcf\xf8\x1c\x98\xfb\x84\x32\x2a\x49\xa1\x05\x9d\x88\xdc\x13\xee\xf3\x5c\x96\xe4\x3e\x57\x4c\x8e\x7b\xc4\x8f\xa3\x7c\xb1\xd0\xa6\xc2\x38\xa6\x1c\x62\x2b\xe5\x07\x03\x89\xaa\x55\x8f\xcf\x8b\xd9\xd4\x24\xaa\x95\x85\x2f\xd4\x21\x25\xdb\x2e\x24\x21\xf7\xdf\x94\x15\xc7\x7d\x09\x49\xc8\x3d\xe6\xd8\x9f\xe3\xfc\x4c\x44\x3a\x4d\x6d\x25\x8c\x2c\xf2\x53\xa1\x52\xe0\x14\x17\xc3\x41\x37\xb7\x20\x4c\x22\x72\x4f\x62\x96\x1f\xa4\x8c\xd5\xb1\xec\x55\x4c\x0b\xa4\x30\x8d\x21\xb6\xd4\x68\x4e\x83\x7c\x86\x98\xc3\x15\xed\xb1\x5a\xd0\xb2\xd0\x39\x95\xa4\x99\x5c\xbe\x0d\xe0\x72\xfb\x71\x7e\x2c\x02\x07\x44\xc0\xa9\xe6\x9c\xc8\x22\xf2\xe6\x36\x35\x27\x70\x67\xd6\xaa\x49\x54\x6b\xf0\x82\x17\x16\xb2\x0f\x49\x29\x47\xc9\xe0\x56\xa5\xe8\x63\x45\x7e\xaa\x03\xb5\xd5\x26\x57\xba\xa2\xb0\x2a\x6c\x72\x66\xa7\xcc\x94\x85\x24\x23\xc4\x29\x29\x20\x5f\xd8\xa6\xaa\xf3\x3b\x98\x23\x5e\x1f\x2b\xc6\x08\x96\x64\xaf\x22\x42\xd8\x00\x4d\x75\xec\x95\x5f\x49\x00\xab\x68\x01\x7f\x55\x2e\x5e\x40\x64\xa4\x05\x5a\xba\xfa\x9c\x7b\x0d\x22\xed\x9e\xda\xcc\xf7\xb4\xaf\x6a\x32\x40\xf6\x17\x4a\x14\x58\x46\x93\xa1\x52\x32\xa1\x34\x07\x28\xfb\xa5\x04\x58\xe6\x81\xa2\xc5\xf8\x3f\x00\x97\xc7\x70\xf4\x52\xf2\x83\x96\x39\xf7\x41\xda\xb4\x22\xe2\x81\x11\x8c\x0f\xe2\x30\x30\x55\x26\x3f\xad\xd4\xa8\xfe\x4d\x65\x40\xfd\x17\x24\x3c\x32\x40\x2f\x81\x74\x0e\xe7\x3a\x4f\xff\x55\xab\x47\x10\xf8\x86\xbf\xea\xfb\x02\x56\xb0\xfe\x8b\xdc\xff\xe2\x94\x0d\x90\xfa\x17\xb9\xaf\x09\x56\xe3\x83\x3f\x4a\xc8\x9a\xaa\x2c\xf8\xa3\xd6\x84\xca\x7a\x03\xe3\x7e\x0b\x31\x78\xd4\xbf\xc8\x7d\xf7\x4f\xed\xcb\x21\x11\x65\x8e\xac\x10\x63\x64\xa9\x23\x2b\x45\xe9\x13\x3b\x32\x3f\x90\x39\xce\x0f\x90\xfe\x6b\x05\x1c\xf5\xad\xc5\xed\x63\x12\x06\x0b\xf5\x19\x06\x0b\xf5\x25\x08\x00\x83\xf5\xd2\x31\x01\x77\xb2\xf0\xad\x7e\xa8\x14\xad\x31\x40\xe6\x07\x72\x47\x30\x98\x11\x8c\xc5\xca\x47\xfa\xaf\x15\x8b\x46\x5a\x20\xd2\x12\x0f\xfc\x41\xee\x88\x4e\x99\xe2\xa1\xea\xaf\x73\x98\xc8\x3b\x23\x40\x26\xa8\x74\x07\x08\xfe\x98\x2f\x61\x3e\xb5\x0a\x0a\x36\x5f\x45\x81\xe9\x6f\xe4\x6a\xcf\x12\x03\xa4\xff\xaa\x6f\x7d\x56\x78\x6f\x04\x74\xa3\x53\x19\x20\xf3\x03\x2d\x97\xed\xe5\x3a\x0b\x45\x7d\x11\x30\x25\x42\xc6\x11\x11\x3b\x11\xf1\xf8\x94\xd1\x3f\x48\x24\x76\xc0\x55\x49\xf9\x92\xa3\x16\xf6\xae\xec\xbe\x92\x2b\x89\x75\xf6\x2a\xab\xfa\x47\x59\xf5\x6d\xd5\x0a\xe8\x7b\x3d\x9e\x08\x82\x98\x35\x1d\x0f\x40\xdf\xe7\xf1\x44\xbc\xe8\x7a\x79\xe5\x80\x0c\xf8\x7d\x1e\x91\xb8\xa4\x61\xf3\x01\x69\xe8\xfb\x3c\x1e\x89\xc3\xc6\xa3\x51\xb0\xdf\xca\xd5\xee\x8a\x61\x5c\x90\x48\x6d\xc3\x41\x67\x13\x4e\x98\x2b\xf4\x67\x42\xc2\x66\x04\x5d\x28\xf6\xcd\x20\xe2\x82\x30\xf9\xd1\xa7\x22\xc4\xd2\x9b\x91\x68\xe5\x78\xcb\xc0\x5f\xed\x6a\x5f\xdf\x25\x6b\x59\xc1\x86\x00\x9b\x93\x68\x4a\xc0\xde\x46\x0c\x79\xeb\x7a\xe9\x5e\x43\xff\xdf\x0b\xb2\x8f\x43\x35\x82\xc1\x56\xdf\xd5\x4a\xc9\x93\x08\x7b\xe7\x4a\xbc\xdf\xea\xbb\xb1\x20\x2f\xb1\x90\x47\x58\xce\xc4\x60\xab\xbf\x6c\x3f\x50\xc5\x45\x1a\x84\xa5\x6b\x11\xd0\x06\xf6\x42\x2b\x6c\x06\xe2\xb4\x0d\xd1\x2d\xb4\x5a\x6c\x52\x74\xf3\x09\xf9\x0e\x88\x6e\xf6\x33\x77\xa9\x4f\xab\x26\x50\x1d\x83\x15\xfd\x61\xe6\x57\x5a\x68\x44\xb1\x9c\x75\x2c\x50\x16\xf8\x3e\x52\x68\x7d\x9d\x30\xbc\x86\xf5\x61\xe6\xd7\x50\x7b\x32\xfe\x30\xec\x98\xcb\xb7\x1a\x5f\x2b\x15\xe4\x6c\x51\xea\x05\xb4\x93\xa9\xc0\x98\xf8\x46\x64\x4a\xae\x8a\xbb\x80\xa2\x79\xfb\xed\x70\xeb\x5e\x96\x0f\x13\x63\xc8\x6e\x40\xd8\x54\xce\x7e\xea\x6f\x6f\x6b\x02\xdf\x1a\xa6\x99\xa7\xfd\xb3\xe7\xd9\x8f\xc1\xf5\xd2\xd0\x7f\xd6\x6c\x65\xef\xe8\xa8\x6b\xba\x02\xb4\x4f\x87\xdc\x7e\xbf\x63\xc1\xe2\xd3\x27\xde\x9d\x51\x9f\x8c\x66\xd8\xc5\x43\xde\x15\x33\x9c\x4d\x36\xa2\xb3\x1b\x0d\x59\x1c\x04\xd6\x7c\x96\x6e\x6f\xb7\x14\x28\xbf\x7c\x61\x02\x36\x6f\x6f\xb7\xa2\xa1\xe8\xce\xe1\xad\x05\xb3\x0d\xd8\xdc\x63\x32\x7d\x71\x15\xb6\xdb\x6e\xf4\xe9\x53\x15\x9c\xcd\x6f\xbb\xb8\x50\x91\x98\xe1\xb4\xf0\xf3\xe8\xb4\x77\x36\x10\xcb\x1b\xb0\x09\x1c\x86\x66\x28\x43\xbe\xda\x44\xfa\x17\xa0\x81\xae\x26\x85\x16\x5f\x6b\x35\x63\x69\x46\xfb\xe7\xeb\xe0\xa0\xd2\x0a\xce\xe3\xcc\x8b\xa3\x88\x30\x6f\x51\x55\xe2\x3e\x2e\xb6\x55\x83\xf5\x8d\x9d\xca\xce\x84\x06\x64\xcd\x33\xe0\x84\xc0\x33\xfe\x93\x51\xcc\xce\x19\xbf\x64\xdd\x90\x4d\xd1\x03\xe3\xce\x04\xbc\x7d\x4b\xfe\x9a\x5f\x92\x68\x1f\x0b\xd2\xb2\x11\x3a\x9e\xfd\x81\x06\xe6\x07\x0d\xcd\xcf\x3f\x68\x78\x95\xfe\x34\xbf\x2e\x71\x64\x7e\x45\xc9\x2f\x99\xfc\x9a\x02\xa0\x1c\xaa\x02\xba\xe1\x4c\x28\x0f\x7c\x41\x0d\xd8\x9c\x5f\xd8\x5f\xe1\x63\x80\xc7\x17\xb4\x04\x0f\x11\x2f\x55\xa6\xfa\x51\xca\xf5\x84\x80\x4c\x4f\x88\x52\xde\x18\x4b\x53\xbf\x98\x99\x1f\xa1\x48\x7e\xf4\xcd\x2f\xcf\x26\x5d\x8c\x6d\xde\xcc\x0e\x13\x02\x40\x9b\x31\x71\x9b\x66\xe1\xa3\x04\x7e\x91\x64\x71\x66\x6b\x05\xb6\x65\x3e\xae\xcc\x08\x3c\xee\x93\x72\x2f\xa9\x2d\x43\xae\x88\xf9\xe5\x07\xba\xc0\x98\xb2\x32\xfc\x3c\xe9\x5d\x38\x4d\x7e\x11\xfb\x73\x4a\x27\x76\x3e\xe8\xc4\xfe\x14\x17\x36\x5b\xd5\x66\x31\xe0\x9b\x5f\xd8\x4e\x88\x38\x27\xd2\x9b\x41\xcb\x10\x7c\xb6\xd4\xf6\x55\x60\x07\x7f\x15\x88\xab\x04\x81\x17\x50\xe4\x2a\x28\x4f\x41\xc0\x6d\x73\xf2\xca\x4e\xc6\xdc\xb6\x9b\xc4\xaf\x56\xa5\xe5\x95\x2c\x95\x9e\x87\x8f\x12\x7a\xd3\x6d\xcc\xc3\x47\x25\xa8\xd0\x9f\x40\x5e\xe8\x4f\xca\x79\xa1\x6d\x35\x0c\xe5\x95\x06\x0b\xcb\x0d\x5d\x24\xb8\xb8\x10\xbe\x06\xbb\x10\x7e\x09\xcc\xe7\x9e\x9d\x20\xee\x69\x30\x9f\x7b\x00\x66\xdc\xe8\x38\x8c\x5c\x1a\x9b\xe5\x11\x3c\x35\xe9\x2a\xaa\x1d\xe1\x09\x69\xc9\xf6\x4d\xd8\xa9\x5d\xff\x2f\x69\x40\x0e\x3d\xce\x86\x72\xf5\x23\xb5\x3c\x53\x95\x6b\x5f\xda\x58\x3e\x43\x7e\x6f\x2e\xb4\x90\xdf\xe3\xdb\x08\x22\xf7\x45\xc5\x16\xdd\xe7\xa6\x35\x02\xf4\x1a\xce\xac\x03\x51\x4b\xe2\x77\xfc\x95\xb1\x9b\xaa\xb8\xb2\x62\xc0\x2e\x1b\x92\xd3\xfe\x59\xd6\xbd\x64\xfa\x4c\x9b\xb5\xb7\xb7\x5b\x6c\x88\x0e\xb8\xf3\xe6\xcd\x9b\x37\xce\xaf\xbf\xfe\xfa\xab\xeb\xfc\xf2\xcb\x60\x3e\x47\x6d\x77\xce\x15\x49\x74\x63\xe9\xb5\x64\x1b\x42\x24\x07\xad\x76\x57\x77\xa8\xc5\x6e\x44\x67\xc9\x68\x0e\xb0\x24\x77\x45\x64\x29\xca\xc2\x88\x7a\x37\xc0\x59\xde\x17\xa7\xea\x4b\x4b\xb6\x9f\xf7\x86\xc3\x61\xea\xa1\xab\xfd\x1c\xfd\x9f\x1e\x1a\xa0\xff\x83\x1e\xca\x9d\x7e\xaf\x37\x50\x9f\x9f\x85\x92\x23\xd5\xd9\xbb\xc2\xc9\x94\x30\x12\x61\x49\x3a\xd4\xff\x52\xaf\xe3\xf3\x5d\xcd\xb6\x63\x5d\x6c\x9e\xf6\xce\x1e\xa2\x0e\x7a\xa8\x08\x74\xfd\x5b\xf3\x64\x28\xb2\x39\x0f\x99\xde\x4f\x13\xfc\xfa\x3a\xa7\xcd\xab\x9b\xae\x13\xea\xa6\xd5\x0a\xc7\x3a\x4c\xdd\x4f\x25\xc6\x2a\x54\x91\x0d\x70\x45\xd6\x20\x8b\x8a\x0e\x8e\x22\xbc\x68\x8e\xb1\xa4\xc4\xb7\x85\x36\x2a\xf6\xf4\x38\x1b\xd6\x69\xe0\x01\x7d\x65\x57\x42\x19\x64\x10\xfd\xdc\x77\x03\xf4\xe9\x12\xf7\x11\x7d\x6b\x28\xc5\x6c\xf3\x5f\x9b\x8f\x06\x44\x9e\x4a\x97\x9d\x0d\x49\xe2\x04\x6b\x38\x54\xfb\x40\x53\x56\x4a\x45\x87\xf1\x2f\xe6\x1f\x75\xcd\x40\xd2\x61\x6c\xc9\x8d\x86\xc0\x19\xe9\xf0\x49\xd3\x6d\x9e\x4e\x5a\xad\x52\x28\xfe\x4f\x9f\xb6\x32\x8e\xb7\x21\x32\xbf\xd1\xd4\x0c\x77\x73\x92\xc1\x84\x47\x2d\xed\x6a\xbe\xff\x23\xfb\x87\x85\xfa\x91\x3d\x7c\xd8\xa6\x93\x16\x39\x65\x67\xc3\xa1\x34\xaf\x0a\xb7\x7a\x46\x5c\xdf\xea\xdf\x44\x30\xa0\xe2\x1d\x23\xef\x26\x77\x25\x11\x04\x1b\x6c\xa3\xc1\xb7\xb6\x8d\x6e\x50\xdd\xda\xf5\x1e\x6c\xb2\x8d\x06\xdf\xdc\x36\x1a\x6c\xb0\x8d\x06\x6b\xb7\x51\xc6\x65\x67\x93\x43\x9e\x86\xff\xf6\x0e\x7a\x8c\xcb\x17\xbf\x37\xae\x11\xa0\xd7\x63\x6e\x23\xb4\x7d\x7b\x08\xdb\x04\x5d\x6b\x90\xc5\x2b\x2f\xae\xaa\x71\xc5\xa3\x6f\x0c\x55\xe0\xa7\xa1\x59\x75\x3c\x5a\x83\xa8\x90\x44\xea\x80\xd9\x54\x85\x6d\xc1\xef\x23\xc2\x56\x0e\x33\x88\x23\x1c\xc0\x0b\xd0\xf2\x40\x29\x9b\x04\xc4\x93\x3c\xda\x09\xe8\xb8\xa2\xc8\x57\xb7\x4a\xb0\x5d\x8a\x30\xf3\xf9\xbc\x70\x44\xff\x3a\x01\x01\x6a\x64\xb5\xf2\xc4\x64\xbc\xf5\xaf\x77\xb8\x93\x0c\x94\x60\xbf\x13\x62\x39\xbb\x27\xa2\x67\x4e\x86\xd6\x25\xa6\x10\xcd\x91\x35\xf0\x51\x6e\x07\x25\x28\x9b\xc6\x01\x8e\x36\xa2\xc2\x6c\xa1\x7b\x43\x87\x12\x8b\xf3\xa6\x1c\x03\x60\xbf\x35\x76\x21\xe9\x9c\x74\xf0\x94\xaf\x5c\x67\x7e\x95\x05\x56\x72\x96\xb0\xc4\x93\xc5\x6f\x57\xd5\xbb\x37\xe5\x70\xf3\x65\x7d\x13\xa1\x43\xed\x2e\xc7\x81\xfa\xd4\xf9\x4c\xeb\x5c\x51\xdb\x65\x37\x39\x16\x98\x36\x86\x6c\x75\xf4\xb1\x3c\xc5\xb3\xb5\x41\x9a\x2c\x6a\xc0\x07\x16\x65\xd4\xbc\xb0\xbc\x55\x75\xb3\x6c\x6f\x6f\xb7\xe4\x10\x3c\x91\x56\x2b\xa2\x55\x4e\x4b\x76\x45\x3c\xd6\x5c\xae\xd5\x73\xfb\xed\x87\xac\x90\xd0\xee\x4a\xfe\x3e\x0c\xed\xad\xe2\x4d\xb0\xa8\x86\x79\x68\x46\x79\x57\x27\xac\xab\x4d\xa4\x94\xab\x6f\x4e\x4c\xb9\xda\x40\x4e\xb9\xaa\x15\x54\x0c\xa9\x69\xa3\xaa\x5a\x3b\x8d\x6a\x4b\x8c\x4c\xd9\xce\x04\x2b\xde\xba\xd8\xd8\x44\x09\x0c\x34\x5c\xf1\xe0\xb3\x99\x6d\xc6\x7e\x68\xef\xe8\x68\x7b\xbb\x95\xf1\x47\x02\x46\x1b\x0c\xcf\x89\x2b\x0a\x89\x66\x28\xd6\xd2\x08\xe2\x60\x81\xe5\xbc\x63\x8d\x9c\xdd\x74\x94\x83\xbc\xfb\x21\xee\x8a\x9c\xfd\x73\xa5\xbd\x50\x11\xbf\x89\xb7\x82\x35\xfe\xed\xaa\x9c\x87\xac\x33\x76\x49\x19\xe1\x34\xe0\x63\x1c\xbc\xb8\xc0\xc1\x30\x43\x0e\xcb\xb4\xf7\x5d\xfc\x1b\xbe\x1a\x11\x19\x87\xad\x6b\x2f\xe2\x42\x1c\xf0\x39\xa6\x4c\xd1\x90\xc7\x19\xb8\xa2\x88\xc4\xe0\x1a\x49\x72\x25\x1d\xe1\x45\x34\x94\x68\x40\x86\x3f\xa9\xf3\xa7\x71\xb1\x94\x22\x32\xe9\xe1\x03\xd2\x8d\xc8\x94\x0a\x49\xa2\x8c\x23\xf9\x81\xaa\x19\xb9\xbc\xed\x1e\x44\x3c\xfc\x83\x33\xd2\xc5\xb1\xe4\x07\x54\x78\xfc\x82\x44\xc3\x1b\xaa\x67\x12\xc4\xd6\x5b\xa0\x98\xe9\xcc\xa1\x3d\x33\x9d\x7c\xb9\xce\x18\x25\x37\x7b\xe3\x88\x5f\x8a\x55\xe1\x10\xf2\x4c\x99\x18\x9f\x7f\x2d\x04\xae\x97\x91\x8b\x92\x0a\x90\x71\x03\x38\xb0\x29\x7a\x40\x1a\xda\xe3\x4c\x46\x3c\x08\x00\xb0\x69\x91\xd4\xf9\xcf\x8a\x12\x9f\x89\xe6\x5a\x36\x6d\xd0\x9c\xb4\x8c\x27\xf0\x90\x57\x10\x51\x5a\x41\x72\xb9\x8e\x7b\xe7\x50\xde\xc0\x71\xce\x3a\xa4\x67\xaa\x28\x92\x64\x2d\xd6\x1b\x97\x49\xd1\xde\xb0\x88\x34\x2e\x5d\x9a\x97\x30\xb3\xd8\xbc\x00\x38\xa8\x5b\x03\x7e\xc7\x94\x90\x69\xda\xd0\x42\xdd\x12\xdc\x9c\x1e\x24\xa6\x8c\x44\x1d\x9f\x8c\xe3\x69\x07\xfb\x38\x94\xd5\x56\xb4\x11\x11\x3c\xb8\x20\xd1\x8e\xfd\x21\x76\xc0\x05\x38\xf5\x6a\x6b\xb9\xab\x03\x40\x8a\x95\xea\xce\xa7\x43\x4c\x1c\x2e\x66\xed\x10\x3f\x7d\x4a\xbf\x7a\x67\x45\x1e\x5b\x55\xa5\xe1\xb8\xe9\x5e\x55\x20\xf4\xfa\x22\x10\xf4\x4c\xe8\x77\x43\xd9\x49\xb3\x74\xb3\xd9\x74\xa5\x62\xc3\x9c\x46\xf0\xde\xf6\xce\xdd\x5f\x69\x54\x97\x1b\xce\xe1\x78\xb9\xf6\xd9\x52\xd5\x30\xd2\xd3\xd7\xba\xc3\xd9\x9a\xd2\xf7\x51\xce\x6c\x88\x04\x1f\xe7\xa3\xc6\xda\xd1\xab\xf4\x1d\xa1\xe4\x89\x4e\x42\x60\xb9\xcc\x3b\x0c\xf7\x9c\x9b\x73\xdd\xc1\x2c\x87\x49\x06\xb9\xee\x08\x56\x31\x5c\x41\xe7\x61\x40\x3a\xda\xcb\xf0\xa6\x86\xcb\x99\xc2\x06\x2c\x8e\xac\x6b\xc8\x32\x44\xae\x75\x8d\xc9\x64\x03\xdd\x08\xbc\x93\xee\x18\x1b\x15\x8b\xe0\x89\xa2\xee\x60\xd9\x73\xb2\x2b\x5c\x7a\x5b\x53\x86\xf3\x53\x96\x43\x72\x66\x9d\x12\x1b\x32\x11\xa7\x47\xfc\xd3\x8a\x32\xda\xbd\x20\xee\x46\x9c\xcb\xf7\xc7\xaf\x33\xfa\x00\x93\xf2\xe9\x53\x9a\x34\xc6\x82\xbc\x3f\x7e\x9d\x39\x2d\x04\x1c\xfb\x2d\x0c\xbe\x45\x79\x2a\xdc\x13\x48\x10\xc5\x04\x9a\x4d\xc8\xb1\x11\xbc\x9e\xa4\x2e\x08\x93\x9d\x71\xfc\x19\xc2\x0c\x54\xf1\x73\x2c\x32\xd2\x5d\x92\x54\x27\x99\x34\x2f\x93\x91\x80\x9a\x16\x02\x37\xdc\xeb\xe0\xef\x58\xda\x48\xdb\xbe\x5d\x61\x43\x4f\x51\x27\x53\x5b\x47\x9f\xab\x9a\xb3\x82\x15\xea\xab\xf6\xb5\x1a\xc4\xca\x9d\x9e\x4e\x5a\x5b\xfd\xad\x61\xee\xfd\x8b\x6a\x75\x2f\xed\xd1\x2b\xe8\x90\xae\x8b\xa9\x02\x28\xb6\x4a\x1d\xb4\x35\x94\x8b\x90\xf0\x89\x73\x49\x99\xcf\x2f\xdb\x6c\xa8\x7f\x3c\x20\x81\x20\x4e\x0d\xac\x1e\x61\x9b\x0d\xf5\x0f\x80\xbd\xce\xc3\x0e\x2d\xac\x20\xc1\xc4\xc6\x2c\x67\x43\xf5\xb5\x04\x8e\xec\x8a\xf5\x5d\x7e\xc0\x87\xc8\x68\xd2\xd3\xfa\x9e\x5b\xa7\x95\xc6\xaa\x56\x0b\x6c\x93\x45\x2b\xa3\xee\x06\x6a\x39\x8a\xc8\x84\x5e\xb5\x5d\x76\xca\xcf\x3e\x7d\x6a\xa9\x3f\x43\xe2\x2a\xc9\x88\x87\x84\xb5\xae\x2f\x69\x10\x1c\x10\x21\x23\xbe\x18\x14\x83\x9e\x69\x1f\xd9\x5d\x35\xad\xda\xaf\xb3\x9b\xf1\x95\xad\x5d\xbf\x38\xaa\xc2\xe5\xb2\xdd\x5e\x7e\x26\xe9\xd6\x2a\x09\x2d\xe9\xd6\x93\x58\x86\x6e\xd9\x66\x5b\x57\xc0\xa7\xd3\xcf\x39\xa6\xda\xf2\xc9\x4a\x36\x09\x75\x0c\xa6\x19\x7c\x86\xb9\xd4\x16\xb8\x63\x46\x61\xdb\xdd\xe0\x7c\x5a\xb6\xb8\xca\xa1\x1a\x50\xd6\xd1\x83\xe4\x37\x40\x79\x16\x8d\x3a\x40\x53\xf2\x63\xd5\x49\xb0\x1a\xf4\x8e\xb1\x57\x1c\xeb\xcd\x19\x6b\x82\xf8\x9b\x52\x68\x2a\x18\x59\x0a\xb2\x29\xb5\x34\xd7\xb4\x48\x3a\x1f\xcd\x4a\xd8\x0d\x70\x05\xf4\x1d\xcf\x4b\xd2\xf2\x2d\xec\x7e\xea\xd4\xee\x91\xce\xa6\x82\x7f\x0a\xdf\x01\x37\x17\x89\x08\x7a\xc7\x27\xea\x4d\x44\xfe\x8d\x47\x6c\x5f\xa1\x7e\xe1\x43\x6b\xda\x6c\x66\x44\xd9\x56\x91\xfd\x48\x37\x4e\xd2\x0d\x38\x3f\x8f\xc3\xe7\xf6\x47\xc2\x2c\x06\x69\x7d\x36\x1a\xcd\x94\xc8\x77\x97\x8c\x44\x2d\xd2\x5e\x05\xdd\xe4\x8c\x5c\x8f\xbc\x9a\x83\xd3\x17\xc0\x5f\xdd\x69\xa2\xc9\xa9\x3f\x17\x54\xe6\xcb\xdc\x8c\xbf\x51\x4d\x76\x3d\xf0\x53\xdb\x5a\x17\x33\x86\x8a\xac\x07\xee\xc4\xff\xf6\x56\xaf\x90\x93\x78\xe1\xde\xea\x17\x72\xc0\xd7\x76\x29\x75\x7f\x6f\xa4\x13\x0f\x62\x1c\xa8\x0c\xf8\x5a\x13\x57\xe4\x41\x31\x34\x48\x26\x72\xac\x92\x44\xd3\x90\xf4\xd5\xdd\x46\xd9\xd8\xf4\x7a\xdc\x5d\x9c\x81\x43\xed\xe1\x70\x48\xba\xd9\xa2\x5d\x5b\xd6\xc6\x78\x2e\xd7\xfe\xcf\xc4\xed\xf8\xe6\xb5\xdb\xb2\xf5\xb5\x2b\xf4\xdd\xa4\x66\x55\xae\xbe\xd6\xfd\xbd\x51\x93\x4a\x0b\x75\xee\xef\x8d\xda\x37\xed\x4a\x29\xac\x4b\xb6\xf4\xbe\x7e\xd4\xd8\x7e\x50\xb6\xd2\xcd\x18\xe9\xea\x8f\x24\x3e\x57\x76\x6c\x96\x8a\x20\xf6\xd4\xa0\x45\x86\xff\x35\x7a\xf7\xb6\x0b\x6f\x77\x5a\x85\xa9\x4b\x41\x49\x17\x07\x01\xbf\x7c\xc9\xa3\x39\x20\xa7\x14\x42\x6a\xd5\x8a\xd5\x51\x81\xbf\x7c\xb0\xb8\xfc\xea\x85\x5e\xbc\x53\x07\x10\xa2\x83\x4d\xe5\xef\x0b\x49\xbb\x0b\x10\x2d\xe4\x53\x11\x72\x41\x4a\x01\x4d\x12\x08\x56\xbc\xa0\xe7\xed\x4f\x9f\x0a\xb7\x8f\xed\xae\x8c\xa8\x12\x68\x5b\x08\x62\x9f\xa0\xf6\xd2\x85\xd2\x87\x2c\x8c\xe5\x4b\x08\x87\x42\x5c\x56\xd1\x0b\xae\x50\x28\x66\xfc\x92\x75\xc7\xa2\x6b\x70\x97\x65\x71\xf9\x12\xac\xa2\x25\xdb\xd6\x81\x1e\x49\xb9\x50\xc5\x60\x4d\x91\x5f\xa8\xbf\x12\x7e\x46\xfd\x14\x18\xfc\x90\xad\x87\xae\xc3\x63\xa9\xf1\x77\x6c\x34\xe3\x97\xeb\xf0\x52\x83\x16\x06\x21\xac\x72\x35\xb1\x9b\xa2\xb8\x50\x97\x46\x4a\x7d\x55\x6a\x98\x8d\x6b\xf2\xc9\xca\x6e\xcd\x00\x62\x75\x6d\xeb\x6d\xc9\xcc\xca\xd3\x9e\xaf\xbf\x5c\x90\xf8\xfc\x8a\x83\xd6\x17\xa3\xd8\xf3\x88\x10\x70\x05\xae\x78\x8b\x55\x08\x75\x43\xed\xc3\xad\x85\x34\xdc\x7b\xb8\x9d\x24\x2e\x12\xba\x80\xa2\x0a\x9d\x73\xc8\x26\xbc\x79\x71\xca\x26\x3c\x2d\xfb\x6f\x1c\xb1\xe6\x65\x2f\x71\xc4\xd2\xb2\x10\xdf\xa8\x79\x61\x13\x06\x29\x13\xa5\xeb\x3f\x14\x01\xcd\x77\x06\x1b\xc7\xe0\xab\x90\x67\x83\x5e\x72\x9f\x04\x62\x27\xeb\x0b\xbd\xe6\x8c\x65\xaf\x75\x33\x49\x58\xca\xe2\xa5\xe5\x6d\xde\xab\x94\xdd\xee\xd8\x67\xea\x87\xfe\xa0\x95\x31\xb8\x69\xb7\xac\x2a\xaf\xed\x86\x78\x4a\x56\x64\x43\x4d\xe0\x45\xb0\x0e\x62\x42\x83\x55\x15\xa8\x6c\x10\xf7\xeb\x00\x7e\xe3\xe3\xda\x3c\x1e\x4d\x57\x54\xed\x99\xe0\x2d\xf9\xfc\xb6\x1b\x91\x0b\x08\xdc\x5c\x48\x5f\xae\xb5\xe9\x33\x93\x3b\xd6\x8e\xbf\xef\xf1\xbc\xae\xc6\x0b\x5c\x07\xaf\xc8\x8f\x75\xd4\x8f\x5a\xb4\x72\x26\x09\x93\x10\x57\x63\x15\xd5\xac\x04\x90\x54\x06\xf5\xb9\x10\xdf\xa5\x9e\xe4\x3c\x12\x85\x72\x55\xf7\x4b\x9d\x67\xf0\xea\x1c\xb9\xd7\x26\xe9\x5f\x80\x54\x85\xd3\x08\x5f\xfe\x5c\x6e\xcd\x44\xf2\x9d\x96\x92\x15\x86\x23\x86\x83\x11\x8f\x23\xaf\x34\x80\x31\xe7\x01\xc1\xac\xd8\xce\x56\x7f\xa9\x08\xdd\x04\x3b\xac\xed\xb8\x8d\x5b\xf8\xc5\x09\xda\x33\x41\x0f\x3a\x10\xb5\xa7\xa4\xcb\xfb\xc6\xc8\xdb\x8e\x66\x05\xc8\xe5\x8c\xaf\xce\x5d\x5b\xf9\xbf\x28\xb9\xac\x9b\xfd\xb6\xbb\x72\x16\x05\x09\x74\x38\x99\xba\xe2\x1b\xcf\xdb\x37\x3c\x59\xeb\x78\x91\x1d\x62\x2d\x00\x15\x07\x3a\xb1\x7e\x36\x36\x5c\x36\xae\xdd\x15\x45\x29\x47\x71\xc6\x52\x6a\xe3\xe9\xf2\xb9\xd7\x11\xe0\x08\xb8\x13\x11\x11\x57\x3f\x18\xbd\xd7\xf3\x96\xe2\xa6\x36\x63\x45\x99\x51\x10\x97\x19\xaa\xc4\xd3\x32\x9e\xab\x59\x7c\xdb\xa5\x92\xcc\x2b\x1a\x50\xc9\x15\xbb\x8d\xa1\xae\xea\xd4\x8a\x6a\x20\xbd\xba\x93\x36\x70\x5b\x31\xc3\x98\x1b\x57\x55\x56\xbd\xca\x37\xa2\x16\xc0\x5a\x07\x9b\x88\x74\xdf\x1c\xb5\x34\x5f\xe5\x9f\x2f\x87\x82\xc0\xb1\x52\xa6\x58\x23\xd5\xdc\xc2\xf6\x8c\xb3\xa1\x03\xab\x05\x90\x7a\x66\x64\x0b\x6b\x97\xf0\xc5\xe0\xd3\xd9\xaa\x2b\xa2\x79\x23\xe4\xca\x1a\xc5\xad\xf1\x1d\x97\xd1\x0c\x66\xab\x32\x1e\xe4\x1c\xd9\x2d\xc6\x3e\xec\xda\xd0\x87\x64\x88\xf6\x7c\x9f\xf8\x59\x97\x5a\x55\xf0\x10\x3b\x86\x0c\x91\xda\x19\xd7\x43\x9b\x38\x8a\x64\x88\xf4\xaf\x75\xf0\x36\xdc\x22\x19\x1a\x7f\xf5\x6b\x4b\x24\xa1\xe7\xd4\x00\x6c\x20\xb9\x75\x65\x6c\xd0\x37\x55\xc6\xfc\x5e\x3f\x6e\x13\xe8\x91\x0c\x91\xfd\xbd\xae\x4c\x39\x22\x24\x19\xa2\x24\xd1\xb1\xa9\x8d\xab\xd1\x41\x24\x73\x75\x40\xd2\xfa\xbe\x9b\xc8\x76\xd0\x77\xfd\xbb\x71\xa3\xb9\xf6\x12\x4f\x6a\x64\x99\xd2\xb2\x0e\x8d\x70\xbf\x68\xd9\x53\x7d\xea\x4c\x23\xbc\xe8\x3c\xeb\xf5\x9a\x12\xb5\x2e\x35\x0e\xf0\x7a\x9c\xa6\x94\x6d\x9b\x22\x84\x35\x69\x2b\x43\xe2\xba\x64\x44\xfc\xce\xd3\xf5\xe5\xb2\x84\xbe\xd9\xe8\xb2\xe4\xbe\x61\x67\xb3\x54\xbf\x51\x6f\xcb\xa4\xdf\x9c\xba\x37\x9d\xbb\x94\xb8\x6f\xd6\xc5\x2a\xbc\x64\xe8\x7c\xf3\xad\xfc\x4f\x71\xbe\x6a\xb0\x59\xdf\xfc\x7c\xb5\x72\x83\xb5\x2d\x43\x4c\x92\x5a\x71\xdf\x42\xd9\xb8\x29\x6b\x01\x8f\x79\x40\x9a\x55\xa9\x20\xd7\x55\xbb\x31\x55\xd4\x92\x02\xcc\x7b\xdd\x73\xf5\x0a\xa2\x29\x1b\xf9\xde\x16\x91\x88\x21\x2f\x11\x89\x9d\x29\xb9\x46\x47\x53\x99\x6f\x94\x7a\x95\x79\x01\x37\x4f\x14\xea\x00\x12\xf2\xac\xcc\xcd\xc8\x9a\x95\xf9\xa9\x1c\x58\x99\x6d\xcf\x23\xd5\x99\x99\x73\x80\xac\xa4\x94\x30\x09\xb6\x5c\x84\xa9\x57\x41\xd9\x40\xc1\xcd\x4b\x04\x49\xc0\xdd\x46\x45\xfa\xcb\xe4\xa4\x42\x4a\x23\x4f\xfb\x9e\x3b\xcc\x54\x8e\xdf\xfa\xc5\x8e\x7c\x12\x35\xef\xad\x0d\x50\xde\xac\x04\x04\x31\x5f\xb6\xdd\x69\xc4\xe3\x70\x45\x5f\x32\x82\xb4\xac\x39\xd5\xe7\xd2\xb3\x9a\x84\x4c\x46\xbe\xf1\x56\x7b\xf8\xd3\xe9\x99\xea\xb3\x3a\x06\x16\x25\x17\x45\xf2\x39\x89\xc5\x7a\x8f\x4d\x16\xc7\x1c\x9f\xc3\x09\x32\x23\xa3\x40\xa1\x76\x7b\x99\x3f\x12\x56\xcd\x40\x95\xd6\x90\x0a\x1d\x51\xb9\xd8\x95\x84\x02\x2a\x24\xa8\x6a\xe1\xc9\xbe\x11\x49\x32\xd3\x2a\xb4\x55\x41\x12\xc5\xb9\x0b\x4d\x42\xe3\x10\xc6\xf9\x8b\xb6\xad\x5a\xcc\x52\x78\xf5\x79\x68\xf3\x2e\x94\x64\xc7\x4c\x17\x8c\xe0\x58\x42\xc1\xc0\xee\xf5\xc5\x0c\xe8\xd4\x83\x52\x21\xc0\x56\x45\x99\x24\xce\x75\xb9\x48\x22\xbc\x55\x14\xcb\x45\xc3\x36\x72\x07\x42\x8a\x61\xf8\xfe\x31\xf1\x08\x2b\x93\x85\x59\x14\x15\x58\xd1\xce\x67\x5b\xed\xae\x88\xc7\x32\xc2\x9e\x6c\x3d\x73\x91\x8f\x17\x99\xe9\x31\x20\x19\xfc\x99\xda\xda\xed\x2e\x15\x23\x3c\x27\xef\xa2\xbd\x89\x04\x4b\xb3\x65\xdb\x8d\x21\xac\xd4\x17\xe9\x88\x59\xd3\x55\x1d\xd9\xde\x5e\xdd\xed\x9f\x21\xae\xbc\xee\x31\x15\x23\xc3\x8a\xfc\x52\x87\x2d\x93\xba\x39\x4d\x27\x35\xb4\xb7\x14\x49\xbf\x67\x36\xc1\x2f\x88\x8a\x95\x2f\x93\x8d\x50\x30\xe1\x81\x5f\xfd\xfe\xf1\x5b\x17\x09\x56\xef\xda\x6b\x76\x65\xd8\xd4\xad\x5e\x65\xfd\x1e\xb2\x7b\xb3\x3d\x32\xa0\xe7\xa4\x7e\xf3\xa7\x5e\xad\x4c\x52\xa8\x0b\x16\xa9\x4f\x84\xb7\x01\x78\xa0\x16\x79\x2d\x06\xaa\x4a\x78\x3c\x66\x72\xbf\x7a\x57\x5b\xb1\x1b\xeb\x62\xfa\x0e\x6f\x03\x19\x25\x08\xf8\xe5\x6b\xc0\x4f\x99\x17\x9f\x13\x51\xb1\x2d\x6e\xa5\xf6\x64\x59\xae\xab\x80\xdb\xed\xed\xed\x82\xcf\xc8\x32\xc8\x1d\xed\xc2\x10\x43\x5c\x1c\x13\x85\x59\xb5\x1b\xaf\x59\xe6\xa9\x71\x5b\x42\x83\xc8\x25\xdd\x91\xfd\xe8\x1e\x69\x89\x8f\xf8\xed\xa5\xa9\xfb\x28\x82\xc8\x8d\x9f\x5f\x31\x54\x93\x56\xab\x8e\xa5\xde\x67\xd7\x0a\xb5\xb4\x97\xae\x98\xe1\x88\xf8\xff\xa6\x72\x56\x16\x95\x36\x13\xad\x1a\x33\x37\x10\xe9\x3a\x73\xa2\x89\xec\x9b\x3d\x00\x67\x24\xd3\xaf\xa4\x69\x9e\xc4\x41\x00\x00\xc5\xb5\x91\xd4\x8d\x5c\x64\x6b\xa9\x58\x2b\x08\x75\x3d\xce\x3c\x9c\xdd\x35\xd3\xa2\x6d\x17\x39\xa8\x5d\x86\x48\x2a\x54\xeb\xa8\xf1\x31\x17\xb0\xf5\x0d\xcf\xf6\xca\x89\x08\xe3\x28\xe4\xe2\xd6\x6e\xec\x5d\xbd\x36\x8a\x17\x62\xf5\x7c\xb9\xf1\x2c\xc0\xf6\xb2\x4e\xac\x58\x2b\x3e\xdc\xde\x2c\xb0\xfa\x59\xa8\xdc\x7c\x57\x8a\x16\xa0\xa3\xbb\xbd\x83\xa2\xda\x20\x07\x3d\x77\x3c\xad\xd6\x5f\x43\x6b\x55\x1b\x50\x75\x00\x11\x34\xc6\xde\xb9\x5a\x04\xcc\xef\xe8\x8e\x3a\xe8\x61\x96\x79\xab\xda\xda\x0f\xd1\x8f\x48\xed\x4e\xe3\xe9\xe4\x0b\x37\xeb\xac\xed\x54\x63\x22\xe3\xd1\x14\x33\xfa\x47\x85\x3f\xa4\x7b\xb6\xe2\x57\x5b\x1f\x99\x60\xf2\xf5\x06\x48\x73\x4c\x83\x15\x4a\x4a\x70\xbc\xb4\xc2\x7a\xca\x06\xff\x62\x7e\xc8\x69\xe9\x2a\x3d\x73\x9f\xa8\x64\xae\x3d\xc6\xd9\x62\xce\x63\xb1\x07\x16\x9e\x9b\x58\x1c\xcd\xf1\xd5\x49\xf9\x76\xbd\x86\x99\x3c\x5a\xb6\x5d\x39\x23\x5f\xc1\xfa\x28\xc4\x53\x92\x75\x32\x71\x8f\xe9\x26\x2c\x93\x85\x22\x17\x89\x4b\x89\x21\x61\x3e\x65\x65\x4b\x02\x6f\x86\xd9\x94\x1c\x55\xe6\x66\x4d\x56\x00\x6c\xef\x12\x53\x49\xd9\xf4\x58\x87\xb8\x5e\x03\x9d\xdc\x77\xd4\xc2\x29\xc1\xe4\x17\x2c\xf6\x9b\xf5\x21\x07\xdd\xb4\x2b\xb9\x42\x8d\x7b\xf4\x96\x5c\x1e\xe1\xf5\x5d\xda\x8c\xa4\xd4\xbc\xdc\xeb\x1d\x2f\x35\x69\xa8\xdc\xb7\xf2\xf7\x2c\xb7\x7f\xa6\xce\x58\x3e\x16\xf6\x3f\x6b\xf9\x98\x4b\x2e\x5b\x3e\x36\xd5\x61\x7e\xce\x71\x62\xed\x2c\x9b\x85\xf6\x27\x61\x1b\xfc\x92\x69\xcd\x7a\x35\x07\xfe\x8b\x79\xdc\x94\x1b\xdc\x6b\xfa\x68\x70\xa3\xba\xc6\xe4\xf5\x36\x4c\xb2\x03\x72\x41\x4a\x62\x4d\xbd\xb2\x2c\x7b\xab\xd3\xa0\x44\x6f\xf7\xf1\xb2\xed\xea\xcc\x0a\xca\x49\xb9\x92\x62\x0a\xf0\x16\xa6\xb1\x09\x37\xd8\xe3\xaf\xc0\xce\x67\xd8\x9a\x57\x5b\x87\x67\x45\xc5\x8a\x45\x2c\x24\x96\xf1\x06\xfd\x8f\x48\x80\x25\xbd\xf8\x0c\x93\x7c\x89\xa7\x6f\xab\xd4\x01\x30\xa5\x55\xe7\xff\xd9\x2e\x52\xf2\x1e\xf7\x0e\x99\x5f\xa5\xbe\xaf\x2b\xe8\xf4\x7b\x7f\xcf\x6a\x04\x00\xac\xdd\xe9\xb7\xb3\xb5\xed\x8b\xb2\x92\x30\xc9\x5c\xa9\x5f\x4f\xa1\x12\x6f\xcf\x73\x1c\x4d\x29\xeb\x04\x64\x22\x3b\x89\xd6\x02\xb4\xf9\x33\x2c\x8e\x13\x62\x29\xb6\x97\x90\x51\xd5\x20\x0a\x17\x0b\x00\xd6\xfe\xa9\xb7\xdc\xfc\xbc\x4e\xad\xe8\xf2\x5e\x90\xc8\x30\xc5\x34\x22\x1b\x42\xc3\xe1\x30\xdb\x98\x9d\x67\xd4\xde\xde\x4e\xd3\xf5\xe4\xea\x9b\xb0\xed\xed\x0c\x7a\x35\x21\x41\x46\xa5\xb6\xaf\xab\x39\xe5\x48\x62\x49\xba\xa6\xf5\xb7\xe4\xf2\xd3\xa7\x1b\x56\xf1\x9e\xf9\x24\xd2\x4c\xba\xbd\x4c\xc7\xa6\x53\x8e\x09\xf6\x17\xad\x0d\x87\x76\xd3\xe6\x97\xcd\x99\x3b\xbd\xdf\x47\xcd\xd5\x8c\x7b\xcd\xba\xbe\x05\xbb\xd9\xcd\xd8\x34\xdc\xbc\x87\xab\x8e\xaf\x1b\x2f\x10\x50\x3d\x97\xd6\x67\xda\xf3\x4a\xf5\x64\x8e\x5e\x32\xb0\xfa\x16\xef\xc0\x1a\xa1\x6f\x58\xeb\x56\x7d\xad\xcd\xe9\xcd\xaa\xfb\x3b\xfa\xaa\xae\x13\xe2\x48\x52\x8f\x86\xf8\x9e\xbf\xf5\x5b\x43\x6a\xab\x95\x1a\xb7\xa0\xb3\x5e\xfd\x26\x66\x0d\xa1\xe7\xee\xff\x9a\xed\xaa\xdf\x92\x8e\xbc\xe2\x51\xeb\xbd\xa3\x9f\x2f\xf0\xec\xcf\x27\xda\x33\xf9\xaa\xe7\xa4\xd4\xe3\xec\x25\x5f\xa1\x35\x03\x00\xba\xa2\x95\x88\x48\x1a\xad\x3a\xe9\xcc\xb0\x38\x9c\xab\x23\x5b\x91\x72\x6c\xdb\xc8\x45\xb6\x95\xd5\xe2\x45\x02\xd5\xb6\xe1\xef\x6e\x20\x64\x34\xa7\x22\xb5\x48\xfe\x1c\x36\xa6\xeb\xf8\xc1\xcd\x0d\x4c\xa1\xe6\xd5\xaf\xf7\x00\xe4\x0d\x66\x15\x3a\xe0\x02\xd0\xbb\xaa\xe3\x7a\x85\x25\xaa\xbf\x82\xda\x36\x33\x6a\xd5\x46\xe2\xeb\xe1\xde\x34\xb2\x7c\xdd\xe7\x61\xe9\x6c\x53\x86\x3a\xa9\x7e\xfd\xf4\x39\x26\xb7\xaf\xb3\xc6\x19\xab\x41\x4d\xdc\x86\x7a\xc0\x95\x1b\xcb\xea\x0b\xb5\xd2\xda\x2a\xbb\x07\x34\x6b\x2b\xf5\xf3\xfe\xe7\xb3\xcc\xf9\xcb\x58\xf7\x2f\x63\xdd\xa4\xb7\xeb\xcc\x6e\x6f\x62\xc4\x7a\x17\x66\x3c\x9b\xde\xea\x7e\x29\x43\xda\xaf\x68\x47\xfb\x97\x19\xed\x46\x66\xb4\x8d\xcd\x96\x20\x84\xd7\x37\xf1\x0a\xd7\xee\x99\x6f\x9b\xbc\xa2\xf9\x9c\x57\xf9\x9c\xc9\x88\x8e\xe3\x0a\xf5\x7c\xca\x7e\xe0\x1d\xe8\x86\x8a\x84\xcc\xe5\xb7\x7d\x9b\x56\x2f\xc6\x57\xdf\x0f\x14\xf9\xdf\x0a\x08\x5f\x11\xe1\xaa\x3e\x58\xaa\xaa\x37\xff\xb1\x2f\xc5\xea\x20\x66\x58\xec\x67\x90\x55\x36\xea\x48\xf2\x56\x9f\x24\xb2\x80\xb9\xc3\xc4\x0c\x0b\xfd\xe2\xb6\x54\xb7\x9e\x80\xd5\xd5\x1a\x98\x62\x8d\xf6\xbd\x64\x13\xab\xee\x72\x57\xad\xf9\x75\xa1\xd2\xe4\xb5\x61\xe9\x41\xa8\x7d\x69\xbb\xb2\xda\x04\xaa\x58\x6f\x72\x51\x54\xd6\x01\x9b\x17\xad\x6b\x54\xc0\x06\xaa\x84\xd6\x84\x7e\x4a\x98\xb5\x39\x6b\x90\x9b\x80\x15\xab\x3e\x30\x84\x57\xd2\x5f\xe9\xf4\xd5\xd5\x5a\xa0\x12\x7e\x2d\xb5\x96\xf0\x6b\x5f\x3f\xaf\xc6\xaf\x85\x2a\xd6\x9b\x3e\x87\x2c\x56\x9c\x90\xff\xea\x9a\x53\xb0\x6c\xd5\x8d\x8f\xb5\xb1\xb8\xe7\x56\x21\xb7\xa0\x1c\x5b\xad\x7d\xb3\xe1\x23\xeb\x19\x95\xda\x9c\x36\xf2\x46\x44\x7c\x2a\x79\xed\xd1\xb5\xaa\x04\xf6\xe7\x65\xbd\xf0\xaa\x02\x8a\xb7\xbc\xaf\x70\x98\xb2\xba\x15\x86\x83\x85\xa4\xde\x46\x85\xb4\x8b\xfd\x8d\x9a\xf1\xc0\xca\xaf\xec\x79\x04\xc4\xdf\x72\xb2\x9a\xc0\x9a\x83\x68\x7a\xde\xb8\x4d\xeb\xa9\xfb\xa0\xbe\x74\xa7\x84\x91\x08\x4b\x62\x03\x7b\x56\xc8\x86\x99\x2a\xbb\x32\xa2\xf3\x56\x3b\xf7\x7a\x3f\xad\xcf\xe4\x66\x0c\xd4\xd3\xa0\xa8\xc4\xc4\x23\xd5\xd1\x49\x65\xf6\xab\xdd\xec\x26\x08\x5c\x56\x8a\x9d\x88\x4c\xaa\x43\x87\x4d\x3a\x16\xa8\x00\xfd\xad\x84\x6e\x0a\xb9\xaf\xfd\x58\xef\x78\x58\x87\x4d\xb3\x9e\xf0\xbf\x8c\x1f\xc4\xfd\xa4\xc5\x84\xed\xad\x77\x86\x98\xef\xb4\x71\xf6\xff\x65\xfa\x7b\xac\x1a\x4b\xba\x8a\x7f\xc3\x57\x75\x3e\xb8\x8d\xbb\xfd\xba\xec\x35\x1e\xbc\x03\xee\xe1\x60\x24\x79\x94\xea\x8b\x4b\x30\xe0\xb8\xf8\x08\x47\x78\x2e\x06\xd7\x6a\xc3\x1a\x5c\x47\x64\x12\x11\x31\x7b\xa3\x76\x2f\x35\x1a\x57\x52\xef\x9c\xc8\x72\xc6\x32\xb1\x46\x45\xc8\x85\xb2\x28\xe0\x53\x6a\xa3\x03\x00\x5c\x7a\xe1\xec\x30\x72\x69\xec\x81\x8f\x47\xff\x3a\xea\x1e\x45\x7c\x4e\x05\x69\xc9\xe1\x4f\x36\xb6\x72\xfd\xab\x91\x15\x5e\xa7\xb7\x86\x43\x56\x72\x56\xbd\xbd\x2d\x5b\x36\x76\x28\xe9\xea\x01\x3c\x80\xab\x3b\x9e\x66\x89\xe1\xb5\x19\x1a\x5f\x3e\xc8\xbe\x95\x33\xb1\x14\xa0\x21\xc2\x24\xf5\xb0\x24\x2d\x94\xf9\xe2\xd1\xc0\xc3\x02\xb9\xa2\xdd\x55\x69\xad\x56\x7b\xf8\x93\xf6\x2a\x2a\x23\xcc\x04\x55\x74\x73\xc2\x5b\x48\x5f\xc3\x69\xd7\xa7\xc3\x9f\xae\x0b\x71\x90\xbb\xe0\x90\x54\x11\x8b\xc1\xe3\xd0\x24\xa9\x14\xee\x93\xa1\x91\xff\x90\x2b\x5b\x70\x63\x03\x7e\x77\xb3\x38\xd5\x33\x96\x76\x5d\x7d\x66\x8c\x84\x33\x19\x3a\x05\x6e\x39\x60\xc4\x16\x29\x4d\xbc\x9b\xe6\x97\x4a\x95\xb6\xf1\x4e\xc3\xb9\x9f\xbc\x79\xfd\x33\x8e\x44\xd7\x36\xdc\xba\xa6\xfe\x00\xfd\x7a\xdc\xbf\x62\xde\x1f\xff\x85\xb4\x89\xcd\xe0\xbb\x6b\x24\x16\xf3\x31\x0f\x04\x1a\x9c\x9e\xb9\x70\xbb\x4f\xc0\x53\x1a\x1a\x9c\x9e\x3e\x76\x11\x55\xec\xf7\x74\xf7\x7b\x17\x51\xd1\x21\xbf\xc7\xe0\xc3\xfb\x74\xf7\xb1\x7b\x9a\x44\xb1\x04\xf4\x9d\x9d\xb9\x86\x8c\xcf\x5c\x16\x07\xc1\x99\xfe\xe3\x5e\x17\xaa\xec\xb9\xc8\x71\x1c\x07\x9d\xb9\xa7\xcf\x5c\xe4\xd3\x0b\xe4\xca\x28\x26\x67\xee\x69\xbf\xe7\x22\x88\x26\x84\x5c\x24\x04\xef\x8c\xf9\x95\x82\xfa\xfe\xcc\x55\x85\x3e\x7c\x60\x8e\xf9\xcf\x94\x0d\x93\x92\x06\x64\x2f\xa5\x34\xca\xa6\xce\x25\x95\x33\x67\x7f\x6f\xd4\xed\x76\x55\x89\x1f\xea\xea\xa1\xf3\x69\xae\x0f\x22\xf2\x90\x8b\x76\xb0\x10\x44\x8a\x1d\x3a\x9f\xee\x8c\x63\xb1\x00\x1f\x25\xdd\x29\x9d\xd8\x3e\xe5\xeb\xcb\xb7\x00\xd8\x08\x15\x7b\x20\x52\x11\xf2\xe0\xf4\x6c\xa9\xb1\x92\x42\xb8\x9b\x62\xd7\x50\xf5\x57\x43\xef\xfe\xde\xc8\xc9\x2c\x66\xca\x99\x33\xc1\x34\x88\x23\x52\x46\x6f\x53\x74\x9c\xb9\x68\x86\xc5\x8b\x0b\x1c\xa0\xc1\x04\x07\x82\x2c\xbf\xd3\x06\x58\xd7\x3a\x88\x14\x68\x3d\xd6\x2d\xa9\xee\x6c\x2c\xd0\x46\x0b\x72\xc2\xa3\x29\x97\xf7\x63\xcf\x55\x67\xa1\x91\x89\xed\x51\xb9\xdb\x80\x31\x11\x5a\xb3\x6d\x29\x2e\xaf\xcd\xa3\xdb\xa9\xe7\x69\x3d\xcc\x5c\x64\x92\xd2\x49\x2e\xd3\x3c\x6a\x77\x75\x89\x23\x2c\xc4\x25\x8f\x7c\x88\x9f\x77\x03\xbc\x96\xc4\x82\x2f\xe4\xea\xbf\x20\x21\xac\xde\xe6\xc7\xf0\x8a\x5c\xef\xb6\x0d\x1e\x60\xae\xde\x4a\x6b\x62\x60\x18\xbb\xa9\xfc\xee\xa6\x0a\x77\x35\xab\x6c\x2f\x5d\x08\xf0\x98\x92\x85\x46\x4b\x36\xa0\x87\x4a\x50\xe2\x34\x49\xe3\x06\xa7\x09\x02\x2f\x4e\x66\x98\x9d\x0b\x88\xe3\xa0\x9d\x8e\x9b\x87\xaa\x69\xaf\x93\xe0\xd2\xaa\x0c\x78\xd4\xdb\x13\x47\xb3\x08\x0b\xd2\x42\x2f\x61\xc6\x1c\x3b\xe3\x25\x37\xfd\x68\xcc\xfd\x85\xda\xd3\x7d\x7f\x5f\x31\x8f\xf2\x23\xa4\x0e\x1c\x92\x3a\xfd\x5e\xcf\xf1\x3b\x93\x80\x5c\x39\xbf\xc5\x42\xd2\xc9\xa2\x63\xcc\x0b\x3a\x1e\x61\x92\x44\x0e\x0e\xe8\x94\x75\xa8\x24\x73\x61\x92\xd4\xf8\x7d\x92\xe9\x73\x75\xdb\x11\x99\xf3\x0b\x72\x27\xcd\xaf\xf7\xa1\x5f\x22\xee\x7b\xb2\x91\x3f\xfc\xa1\xff\xe2\xe0\x22\x7e\xd2\x6c\x23\x5f\xb1\x17\xa8\xb1\x59\x84\xe4\xf6\x83\x0f\x1f\xe4\x9a\x6d\x04\x8a\x96\xf6\x91\x0f\x1f\xe4\xfa\xa2\x01\x9f\xf2\xaa\x62\x69\xc9\xdc\xb6\xdc\x37\xdb\xf2\xe9\xee\x0f\x76\x7f\x34\x6b\x51\x9d\x08\xcd\xab\x2b\xd8\x66\x76\x40\x35\xe5\xed\xa8\x06\x9e\x7b\xe3\xa1\x2a\xb3\xeb\xa2\x08\x33\x9f\xcf\x3b\xd4\x47\x67\x67\x67\xa6\x2f\x60\xb9\x82\x5c\x94\x44\xbb\x31\xe9\x58\x1d\xf1\x4a\xa9\xb6\xe7\x74\x3e\xed\x4c\x82\x58\xd5\x54\x14\x04\x8a\x43\xa8\x1b\x7c\x1c\x05\xb6\x70\xdf\x2d\x8e\x46\xf7\xea\xec\xcc\x85\xfd\x50\xd7\xed\xb4\x50\x25\x2c\x0e\xc3\x5f\xb8\x90\x05\xe8\x36\xaa\xe8\x55\x5d\xda\xea\x39\xa2\xac\x33\xe1\xd1\x7c\xc5\x4c\xa9\x4e\x7d\xef\xc2\x36\x62\x56\x48\x27\xb4\xcc\x44\x8b\x28\xa7\xa7\x48\x67\x28\x70\x00\xc6\xd6\x34\xea\x74\xf7\x91\xdb\x73\x4f\xd5\xbc\x25\x20\x5a\x2e\xc8\x8f\xa8\x7e\x14\x45\x41\xa3\x24\x76\xdc\x4c\xbc\x28\xac\xf5\xcd\x25\x8c\x73\x13\xa7\xe8\x7e\xc8\x18\x37\xea\xf9\x57\x3c\xdc\x7f\xde\x01\xfe\xdc\x83\xf8\x58\x77\x7b\xbc\xcf\x9d\xe2\xb3\xb2\xc4\xed\x9c\xdc\x93\xed\x1e\x15\xa2\x0c\x91\xae\xe4\xdd\x4c\xff\xe0\xc8\xdb\x7e\x6e\x4f\x07\x83\xea\xfc\xe4\xf4\x90\xb3\x97\xd5\xe7\xde\xac\x71\x77\x6d\x84\x2a\x56\x1d\x86\xeb\xd3\x27\xd9\xca\x46\xb8\xd2\xa8\x57\x82\x24\x91\x9e\x02\x9f\xd0\x80\xb4\xcc\x71\x9f\x54\x0c\x3c\x29\x30\xc7\xa1\x05\x27\xed\x8d\xd5\x0a\xe7\x49\x48\x31\xd6\x5c\xb7\x40\x4a\xba\x05\x62\x74\x0b\x99\x50\x59\x56\x05\xe0\x92\xf6\xa0\x2a\xd5\x6a\x23\x8a\xb3\x66\x11\xde\x36\x5a\x08\x68\x6d\x05\x50\x55\x83\x45\x05\xc6\xcd\xf5\x17\x9b\x89\xf1\x09\x0b\xb8\x27\xb2\xce\x7f\xcd\xfe\x67\x67\x46\xc2\xdd\xff\x14\xa5\x85\x5d\x5d\x7f\x69\x2e\x6e\x07\xc7\x16\x9f\x8d\xd5\x17\xb5\x95\x59\x11\x2c\x19\xa2\x59\x60\x19\x71\xe5\x0b\x2b\x42\x4a\x6b\x75\x73\x59\x05\x56\x40\x8d\xa0\xe2\x56\x47\xde\xbc\xdb\x73\x7c\x59\x82\x49\x4e\x85\xee\xea\x63\x7d\x56\x0d\xb2\x52\x88\x48\xf7\x15\x97\xb2\x0b\x1c\x50\x7f\x3f\x22\xbe\xa2\x0d\x1c\x88\xc1\x56\xdf\x8d\x88\xe2\xc6\xd9\x63\x74\x4d\x88\x4c\xbb\x7f\x0a\x22\xcd\xc0\x29\x11\xad\x6b\x7d\xfd\x8b\x90\x6b\xa5\x61\xed\xe1\xab\x55\x57\x1f\x84\xad\x6c\x67\xdf\x79\x95\x03\x50\xb6\x6b\xda\x52\xc2\xb7\x8e\xaf\x5a\x68\xce\xc4\xff\xb4\xe6\x41\xdd\x19\xc1\xbe\x16\x0e\x46\x60\xf3\xc7\xa3\x16\x3a\x0d\xcd\x74\x0d\xfd\xf1\x0c\x8b\xd9\x99\xbe\x44\x54\x47\xe7\x07\x24\xb9\xdc\xdf\xde\x46\xd7\xd7\xdd\x83\x9f\x15\xc4\x72\xa9\xc4\x88\x2a\xe5\x06\x48\x71\x0a\xb7\x32\x0e\x73\x31\xd0\x80\xc4\x5a\xed\x6b\x1b\x73\x74\x25\x42\x8b\xda\x98\xcc\x50\x11\xa0\x15\xa9\x45\x64\x15\x16\x1b\xcb\x0a\x7e\x12\xdc\x94\xa4\x82\x49\xab\x6e\x2c\x89\xbc\xe0\x92\x76\xbb\xeb\x61\xe9\xcd\x32\xb2\x85\xb9\xf5\x2c\x12\x10\x72\xb7\x7a\x6a\xdf\x5e\x31\x5c\x3d\xdf\xab\x86\x6a\x67\xf5\xf3\x46\x1b\xf8\x38\xfc\x02\x23\x5d\x6e\xa4\x4a\xd1\x1c\xe7\x9b\x50\x13\xae\x3e\x4c\x18\x33\x85\xcf\x38\x6a\x88\x19\xbf\x7c\xad\xd0\xa1\x98\xce\xad\x9e\x23\xca\xae\xf5\x2b\x85\x7b\x63\xe2\x59\x23\xe0\x67\x64\xde\xa4\xa7\xa0\x6b\xac\x12\xfa\xcd\x2a\x5f\x2d\x80\x83\xfa\x33\x95\xd7\xaf\xcb\x67\x2d\x23\x92\x2d\x97\x5a\x00\x76\xd5\x40\x49\x17\x8f\x79\x24\xb5\x2f\x0b\xc1\x03\xa2\x1a\x6b\x49\xd3\x8d\x8d\x5b\x30\x12\x09\xdc\xcc\x67\x5d\xc7\x97\xaf\x44\x07\x66\x85\x66\xe2\xe3\xae\x0e\xc9\xdb\x76\xd9\x90\x74\xe3\x28\x78\x88\x34\x9d\x3f\x37\x93\x3d\x44\x0f\x09\xf3\xb8\x4f\xde\x1f\x1f\xee\xdb\x20\xf6\x2d\xd2\x8d\x88\x4f\x23\xe2\xc9\xf7\x51\xd0\x7e\x70\x49\x99\xcf\x2f\xbb\xd6\x06\xbf\x1b\x91\x30\xc0\x1e\x69\x31\xc0\x85\xee\xea\xd2\xd0\x76\xcd\xdc\xf4\x34\xda\x2a\x8e\x0d\x29\xad\x65\xb8\x48\x52\xb2\xbd\x2c\x69\xa3\x07\xf9\x65\xd8\x44\x2d\x6d\xf6\xcd\x1b\xa8\xa2\x4d\x2f\xfe\x52\x40\xaf\xe6\x9a\xf7\xe4\x4c\xb6\x90\xaf\x7b\xe3\xff\x61\x2f\xef\x4e\xff\x9c\x3f\x68\x64\xa5\xee\x94\x66\xcf\x56\x9c\x26\x1a\xe9\x38\x57\xa9\xb0\x3f\x4b\x8b\xfd\xe7\x50\x64\xdf\x4f\x5d\x76\x8d\x3a\x3b\xed\x2c\xe8\xac\x93\x6a\x1e\x55\x6b\x9c\xed\xc1\xff\xf4\x14\x71\xf8\x8b\x44\x3c\x9e\x53\x09\x44\xb5\x7a\x4a\xeb\x90\xa1\xda\xed\x68\xef\x98\x6b\x48\xb9\x46\xf6\x5d\x4f\xcf\x15\xbd\x31\x8e\x20\x33\xfd\x99\xf0\xc8\xd0\xf6\x0b\x90\x97\xd3\xce\x24\xdf\xd5\x93\x5d\xd2\xeb\x43\x30\xf1\x0e\x65\x61\x2c\x53\x75\xbe\x04\x17\xb4\x08\x38\x88\x22\x24\x1f\xa5\x28\x80\xed\x6a\x66\x5c\x5e\xab\x2e\x70\x8f\xcf\xc3\x80\x48\xa0\x3f\x2b\xbf\x6b\x24\xe8\x0f\x35\x17\x69\x57\x0d\x12\xcd\x69\xd4\x99\xf3\x58\x10\x19\x29\x19\x16\x21\x37\x91\x89\x1d\x5b\xb4\x78\x4d\xb0\x4a\x7f\xb1\x6a\x06\x40\x1c\xbf\x75\xec\xbf\xb7\x22\x7c\x3a\x01\xd9\xa4\xaf\x34\x07\x92\x5c\x49\x3b\x05\xc9\x21\xc3\xce\xc2\xfb\xf4\xd4\x51\x3b\x11\x8c\xc8\x4b\x1e\x9d\x3b\xda\x2f\xa2\x93\x39\xa8\x64\xaa\xdb\x64\x66\x0a\xf8\xad\xc7\xcd\x37\xb7\xfe\x92\x8b\xf5\xb4\x3f\xd9\xa4\x86\x14\xb0\xc1\xdc\x97\x66\x3b\xbd\x8d\xd3\x23\x4f\xbe\xed\x8c\x27\xfd\xc9\xcf\xb8\xaa\x33\x8e\x22\x88\x71\x94\x16\xb9\xdf\xeb\xed\x3f\x19\xdb\x2b\xd7\x90\x53\xf8\x2f\x7b\x73\x4b\x77\x62\xda\x19\xc7\x52\xaa\x0d\xd2\x0e\xda\xb8\xa6\x45\x01\x9d\xce\x24\x4a\xb0\x8e\x38\xdb\x0f\xa8\x77\xae\xaf\x72\xd5\x00\xd3\x13\xa7\x8b\xf6\x4d\xa1\x57\x11\x21\xd0\x57\x35\x49\x6e\x19\xee\xb5\xa9\x6c\x44\xa7\xec\x10\x00\x6b\xaf\x85\xf3\xda\xf9\x8a\x5b\x61\xd6\x80\x43\xf4\x93\x09\x33\x62\x97\x1a\x36\x0b\x08\xa4\x18\xea\x2c\x6b\x36\x54\xf3\x94\x5d\x50\x41\xc7\x4a\x88\x31\x78\x46\x4e\x2e\xf0\x98\x33\x97\x9d\x47\x39\x89\xe1\x50\xd7\xe4\x78\xd9\xaa\x8a\x97\xd4\xb7\xcd\x8c\x4c\x9d\x01\x65\xe7\x1d\xc9\xd3\x69\xd4\x2a\x16\x45\x98\x70\x28\xb6\x97\xec\x67\x55\x55\x1a\x53\xa0\x05\x8f\x23\xc7\xd2\xe0\xf3\x26\xf7\x01\xcd\x68\x72\xbd\x51\xc2\xaa\x9a\x6e\xe5\x56\x3f\x7f\x80\xba\x91\xa2\x9c\xc7\xf7\xc4\x6c\xf0\x06\xfd\xfe\x66\x2f\xf4\xa1\xe3\xd1\xe7\x68\xd9\xec\x11\x3f\xfb\x4c\xa3\x4a\x93\x6a\xd8\x00\x28\x03\x32\x6a\xac\x65\xfb\x26\x74\x72\x4f\x4e\xea\xaf\x16\xa3\xe9\xa3\xab\x45\xc3\xdb\xd3\x9b\xdc\xbd\xd5\xdd\xbb\xbd\xe6\xd3\x29\x65\x53\x87\xc7\xb2\xf2\x2a\xf3\xb6\xae\x31\x6f\xcd\xec\xa7\x30\x71\x9b\x73\x08\xd0\x7e\xdd\x0f\x06\x71\xfb\x76\xc5\x99\xab\xa5\xe4\x37\x68\x3d\xa3\x39\x3c\x65\x89\x85\x7c\x83\xa5\x37\x1b\x6c\xf5\xd3\x9b\x1f\xad\x0f\x5c\x6f\x79\x0c\x70\x89\xe1\x31\x40\x81\xba\x27\xb9\xba\xa8\xd6\x27\x9b\xbb\x8b\x9c\x4d\xed\x86\xd6\x0e\x7a\xce\xee\xc7\x65\x04\x0c\xb9\xca\x60\x9b\x74\x25\x3f\x27\xec\x06\x6a\xd5\x63\x35\xbc\xbf\x0c\x7c\x1b\xe8\x57\x35\x21\xdc\x13\xae\x3d\x7f\xbb\xe0\x61\xc0\x26\x7f\xd9\xf7\xde\x43\xb5\xe8\x3d\xd4\x89\xd6\xa5\x65\xed\x73\x2d\xd3\xee\x00\xa5\x67\x4e\x09\xf0\xb9\xca\x3a\xd7\x42\xd4\x1b\xe7\xde\x91\x21\x6e\x7e\x4d\xde\x60\x43\xfe\x7a\x32\xef\x26\xdd\x84\xc8\x5d\xf7\x43\x6e\x58\x2d\x8b\x6f\x3e\xa8\x8a\x8d\x55\x3f\xe1\x16\x74\x1e\x06\xa4\x03\xa0\x19\xdb\x22\x6b\xc8\xe0\x77\xa0\x64\x07\xb2\xbe\xe4\x26\x9c\xb1\x35\x5a\x73\x6c\x69\x72\xf2\xc8\x3f\x33\xca\x3c\xa3\xcf\x94\x45\xed\xae\x17\x10\x1c\xed\x05\x41\xcb\xde\xda\xe6\x84\x80\xf4\xa2\x57\x1b\x69\x1c\xfa\xc8\x25\x5d\xea\x67\xed\x46\x45\x10\x4f\xe1\xdd\x7d\x10\x4f\x73\xe9\x24\xa2\x38\x80\x1c\xf8\xf5\xf9\x6f\x8e\x4c\x85\xa6\x09\xa8\x33\xc9\x83\x4e\xe8\x1c\xe8\x07\x29\x76\x1b\xf2\xec\x67\xf3\x6b\xe2\x7f\x53\x39\xe3\xb1\x1c\xc5\x93\x09\xbd\x6a\xa1\x7f\x93\xc0\xe3\x73\xe2\x48\xee\xa4\x76\x43\x1b\x6d\xf6\x9a\x38\xef\xc9\x66\x7f\xf5\xbf\x8f\x5e\x04\xd1\xcb\xff\x6e\xb6\xd9\x3f\x71\x51\x80\x17\xea\xa0\x32\xc7\x42\x92\xa8\xc3\xf0\x05\x9d\xda\x10\x4d\x70\xa1\xf5\x7f\x67\xd4\x27\x6f\xd3\xe4\x33\xf7\x14\xf6\xa9\xb3\x1c\x87\x2e\x55\x24\x39\x0f\xc6\x38\x32\xb5\x9c\x29\xde\x9f\x55\xb5\xe5\xcb\x4c\x23\xea\xef\x64\x83\xfc\x24\x65\xaa\x15\x56\x76\x97\x28\xd4\x20\xa8\x4f\x0a\x6d\xd6\x97\x5f\xbf\xf7\x9a\xea\xac\x70\x78\xb3\x7b\x5d\xeb\xbc\xf7\xa6\xf7\x80\x66\x8f\x4f\x4a\x5f\xa6\xe4\xea\x67\xc4\x8e\x95\x77\x1c\xe5\xd3\x34\x91\x1f\xbe\x13\x8e\x92\xe6\xe3\x50\xab\xe9\x8c\xcf\x13\x07\x33\xdf\x99\x12\xd0\xdd\x39\x42\xe2\x48\x92\x3a\x7d\x77\x23\xd1\xa1\x4a\x11\x97\x57\xb9\x56\x4d\xa4\xc5\xf8\x26\x13\x69\xa4\x13\x53\x8d\x92\xe9\x3a\x33\x82\x75\xf4\x97\x44\xff\x6e\xc4\x38\x9f\x08\x2f\x23\x59\xd6\xca\x55\xc5\x8c\x8c\x8d\xae\x5d\x03\x15\x4a\xe4\x42\x8f\x38\x1b\x73\x1c\xf9\x9a\x4d\x74\x6c\x08\x5f\xdb\x25\xcb\x02\x33\x7c\x4d\xb3\xbe\xa4\x5f\x06\x22\xe9\x4e\x02\x98\xa4\x68\xf8\x3a\x61\x6a\xc5\x04\xac\xcf\xbc\x99\xa8\x95\xe7\x88\x9b\x8b\x5a\x42\xf0\xfb\x21\xc1\x6c\xda\xe9\xaf\x28\x23\x6a\xfb\xc1\xd1\x85\x57\xa3\x7d\xd1\xf9\xeb\x8c\x99\x37\x97\x44\x48\x23\x51\x64\xdd\xd3\xa3\x49\x94\x33\x58\x2e\xd4\x23\x88\x7c\x49\x23\x21\x8f\x63\xd6\xca\xfa\xe0\x08\x88\xbc\x06\x65\xc6\x40\x2e\x87\xe4\x33\xcc\x77\x7d\x52\xb2\xa6\x93\xed\x92\xb6\xa8\xaa\x6b\x54\xa4\x3d\x7b\x9e\x42\x25\xb3\x81\xda\x5d\xc3\x00\xd6\x59\x33\xa6\xcf\x89\xca\x26\xb3\xb5\x90\x83\xd5\xef\x92\x56\x5a\x4e\xa6\x4a\xae\xa6\xa2\x53\x0b\x8d\x46\xef\x8a\xd2\x51\x83\x65\x71\x4f\x64\xa3\xde\x0f\x7d\x79\x8c\x79\xfc\xe5\xd5\xd7\x23\x3a\x65\x94\x4d\x1d\xca\x6e\x59\x7b\x9d\x2a\x21\x54\xd6\x1d\xea\xb3\xb3\xd3\xb8\x39\x43\xbf\x2f\x04\xb0\xb8\x7a\xf2\xf0\xbf\x7f\xa7\xcd\x08\xa0\xaf\xf5\x41\x3c\x96\x01\x68\x2c\x2a\x2e\xd0\x6f\x86\xcb\xd5\x78\x2c\x7b\x19\x87\x92\x5e\x2c\x24\x87\x4f\xed\xb5\xa4\xe1\x1b\x1b\xc6\x25\x38\x34\xfb\x9a\xef\x6c\x56\x9b\xb6\xaf\xb9\xb1\x5b\x77\xdf\x67\x6f\x07\x38\x1b\xe1\x0b\xd2\xcc\xd6\xbd\xb4\x51\x74\xa9\x78\x05\x9d\xdc\xf3\xe7\x8a\x27\x96\x38\xb9\x62\x82\xf8\x82\xec\x25\xd6\xd9\xad\xfc\x65\x42\x0b\x78\xb1\x7e\x9e\xc9\xd9\x68\xc1\x3c\x6b\xf6\xde\x5a\xd7\x21\x92\xeb\x50\xda\x5c\xae\x0e\xdd\x16\x98\xaf\xb7\xa4\x79\xc9\xa9\xdb\x79\x7d\xb0\x77\xf4\x39\x6d\xe8\xf2\xd5\xf5\xeb\xf8\x4b\xf9\x2d\x3e\xdd\x5a\xf5\x15\x57\x2b\xab\x21\xa8\x7c\x17\xe0\x92\xdc\x77\x1d\xbc\xb1\x7a\x37\xd0\xfa\xab\xed\x16\xad\xd8\x67\x11\x99\x0c\xd1\x0e\x6a\xfc\x4a\xa4\xb0\x6e\xbe\x65\x1d\xd2\xe7\xad\x94\xd5\xab\xb0\x4e\xb9\x54\xb3\x40\x8c\xb0\xb6\xca\x1d\xcd\x7c\xbd\x3f\x1c\x57\x0e\xaf\xb3\xa4\x31\x58\xf7\xc2\xc4\x4d\x49\x63\xa0\x4e\x50\xcb\x07\xab\xe9\x9e\x55\xd3\xfd\x94\xc8\xcc\x4a\x36\xc4\xcf\x87\x3f\x5d\xdb\x87\x2e\x79\x82\xb5\x9e\xcb\xab\x9f\xb5\x54\x65\xaa\x45\x55\x99\xb1\xbf\x37\x1a\xc8\x0c\x81\x0f\x79\xf6\xcd\x48\x8d\xef\x9f\x7c\x09\x84\x96\x2c\x59\xa3\x8d\x05\xb7\xbd\xdc\x7b\xd5\xe6\x1a\xae\xc2\xf2\xb9\x27\x1b\x39\x7f\xf6\xee\xb7\x88\x9c\x34\xd4\x72\xdd\x40\x35\x40\x3d\x63\xc8\x5d\xc0\x9b\x8b\xf6\x67\x9c\x0b\x02\x96\xaa\xc5\x47\xc0\xa1\x99\x38\xe7\xff\xfd\xff\xff\x3f\x89\x32\xd1\x75\x8e\x89\x3f\xc3\x32\x79\x8a\xed\x3a\x8a\x3a\x76\xf6\x0e\x5c\x67\x9f\x30\x19\xe1\xc0\xc9\x37\xe2\x8c\x48\x74\x01\xfb\x7a\xc9\xdc\xed\xd0\x83\x3e\xbc\xe6\xde\x39\xf1\x6b\x8e\xfc\x2c\xa3\x7b\xc8\xcf\x5e\x47\x10\x29\x29\x9b\x8a\x74\xd8\x79\x46\x8d\xb2\x7c\x18\xe9\x1d\x55\xff\x30\x1b\x45\xf2\xf1\xcf\xe4\x4d\x14\xb2\xdb\x44\xaa\xb1\xb0\x8f\x2b\x72\x95\x27\xda\x8a\x6c\xae\x69\x6b\x95\xd9\x9e\xe9\x85\x35\x9a\x5b\x05\x67\x3b\xd9\x10\x36\x19\x43\x03\xf8\x64\x88\x35\xd7\x56\x37\x93\x06\x6b\x16\xd7\x46\xf2\x75\x5a\xc7\x18\x7b\xe7\x71\x78\x3f\x14\x27\x6b\x44\xbe\x54\x68\xfb\x19\x3a\x5d\x69\xd5\x91\xb0\xeb\xb1\x85\x51\x32\xc9\x31\x11\x92\x47\x44\xef\xbb\xf5\x65\xa2\x0c\x58\x63\x23\x8e\x12\x2e\xff\x92\x16\x6e\x2a\x2d\x6c\x2e\x27\x6c\xb0\x99\x69\xa2\xd9\x31\xa4\x70\x93\xcd\xcc\xcc\xef\x3d\xd9\xce\x08\x79\xb9\x23\xfe\x78\xc4\xee\x7e\x3b\xd3\x98\x73\xb6\x1d\x8b\x3b\x17\xbd\x80\x71\x3b\x38\x08\x1c\xa3\x77\x77\x24\x77\x04\x09\x26\x1d\x7b\x25\xe3\x3b\x82\xb2\x69\x40\x9c\x3f\x68\xe8\x4c\x20\xb0\x5d\xed\xde\x74\x80\x25\x1e\x63\x41\x36\xda\x9d\xf4\x74\x74\x22\xdb\x29\x3b\x0c\xcb\x1f\x60\x9b\xb1\x5d\x5e\x65\x5d\x90\x14\x68\xc0\xd3\xd3\xfa\xee\x88\xa9\x17\x88\xec\x86\x6c\xfd\x5e\xf0\xf3\x5b\xb9\xca\x4f\xc7\x64\x54\x94\xf7\x63\x6c\x37\xee\xfd\xb7\xbc\x3b\x54\x70\xf0\x02\xf3\x6e\xc0\xba\x1b\x33\x6c\x1d\x2f\xd1\x81\x68\xbf\xe2\x26\xfc\xda\xa2\xfc\x9e\x30\xec\xf9\xc3\xa7\x33\xef\xdf\xff\x9c\xde\x3d\xc3\x36\x28\x73\x91\x8e\xed\xe8\x40\xf0\x25\xe1\x3a\x12\x9f\x13\x87\x5f\x32\x12\x89\x19\x0d\x1d\x3e\x71\xe0\xd2\xcd\x87\x0b\x5c\x1e\x85\x33\x0c\x6c\xdb\x94\xae\xe5\xd6\xaf\x22\xba\xf6\x1c\xb1\x9b\xe5\xd4\x3a\x8c\x28\x84\xfb\x48\x54\xa2\x9f\xc7\x25\x8b\x53\x7b\x43\x36\xa9\xc3\x51\x04\xf7\x83\xa5\xf0\x68\xba\xda\x60\x9a\x47\x53\xcc\xe8\x1f\xe6\x30\x9e\x15\x88\xdf\x87\xfa\xcd\x40\x59\xb6\x4d\x2b\x35\xda\xc8\x8c\x6d\x73\xd7\x0c\xbf\xf0\xd4\xc0\xe5\xec\x40\x77\xfc\x35\x9f\xf2\x4a\x29\x3b\x57\x6b\x2c\x48\x1e\xfe\x06\xa2\xb3\x9d\x88\x6f\x99\x3b\x6e\x3c\x7f\x9f\x25\x6b\xdf\x85\x34\x5d\xd4\xba\x59\x7d\x1a\x44\xdc\x4c\x83\x05\x66\x74\x66\x33\x2c\x66\xad\x6b\x33\x7b\x83\x1a\x02\x99\x12\xf9\x2e\x9a\x2a\xc2\xd8\x84\xfd\xbf\xd2\x95\x3a\x23\xab\x7f\xb8\xc1\x0e\x60\xc9\xea\x9e\xec\x00\xfd\xe8\xe2\x32\x98\x06\x8f\xee\x7e\x07\x30\xc8\x43\x2e\x7a\x07\xc1\xaf\x85\x12\xcf\x67\x24\x00\xc3\x1d\x27\x41\x50\x6a\xbd\x56\xcf\xed\x13\xfc\x6f\x22\x9b\x1b\xc4\x57\x28\x8f\xac\x26\xc7\x32\x2d\xf8\x99\xe1\x1f\x45\x8d\xd0\x6a\x35\x8f\xa9\xa3\x81\xe0\x9e\x6f\xe2\x8e\x84\xf7\x22\xbd\xdd\x74\x5b\x82\x90\x51\xf7\x63\x57\xba\x69\xe7\xbf\x65\x4e\xfe\x65\xe5\xdc\x57\x80\xb0\x1b\xb1\x37\x8d\xea\x7b\xc2\xdd\x9e\xbd\x3e\x7f\x82\x9f\xec\x2e\xee\x9e\xbb\xbd\x17\x24\x72\x0c\xda\x94\x90\xab\x46\xe5\x68\x64\x38\x13\x1e\x39\x04\x0b\x4a\x22\xa3\x6e\x67\xbe\x93\x06\xb0\x77\xe6\x70\xa8\x98\x6b\x43\xc1\x3a\x96\x77\x44\x78\x18\xac\x55\x46\xe4\x44\x5c\x88\xe8\xaa\xbb\x70\x4b\x22\x6e\x61\x72\x6f\xc8\x4a\x28\x93\x64\x1a\x81\xc8\xf1\xad\x32\x94\xdc\x10\xbe\x65\xb6\xf2\x1f\x23\x20\xae\x37\x95\x28\x89\x90\xbf\xd1\x08\xaf\x96\x1f\x8d\x1c\xa2\x66\x45\x01\xa3\xb6\x2b\x23\x12\x04\x7c\x45\x29\xdd\xa6\x2d\x88\x46\x2f\xf6\x4f\x0e\xdf\xbd\xed\x9c\x1c\xbf\x78\xfd\xfa\x1d\x58\xc2\xdd\x66\x3f\xae\x71\x18\xfe\x93\x2c\x06\x08\xfc\xfa\x35\xe7\xff\x87\x19\xfa\xbe\xc9\x2e\x90\x5b\x1f\xf7\x64\x2f\x88\xdf\x8c\x7e\xfb\xe5\x70\x34\xba\xfb\xbd\x20\x87\x3d\x17\xbd\x60\x78\x1c\x10\xe0\xfa\x1e\xdc\x13\xc6\x11\x51\xf4\x18\xf9\x4e\x88\x23\xb9\x70\x68\x0e\xbe\x76\x0b\xc8\x55\xbb\x89\xe4\x9b\xa9\xbf\x42\xfa\x05\x8a\x71\x91\xa6\x98\xf2\xe5\x27\x64\x97\x2e\x3d\x2d\xf4\x1d\x08\xac\x95\xb4\x73\xc3\xad\x06\x7c\xb4\xd4\x6d\x32\xf7\xd3\xc8\x0c\xba\x5c\x6f\xfe\xac\xbd\xce\xb4\xdd\x80\x63\x3f\xff\x7a\xca\x94\x33\x66\x21\x41\x90\x8d\x31\x90\xf7\xb2\x1f\x20\x37\x3d\xf8\x1a\x75\xcd\x9e\xef\x17\x4c\xa0\xd3\xfa\x30\xe4\x15\xad\x7e\x75\x0f\xb4\x11\x14\x20\x6e\x31\x8a\x3d\x8f\x08\xd1\xd2\xde\x6c\x1c\xec\xfb\xc4\x47\x6d\xab\xbe\x09\x88\x24\xb5\x4d\xf8\x36\x7b\xe3\x56\x74\xc9\xa4\x1d\xa3\x76\xaa\x6b\x27\xb6\xd9\x1b\xb7\x23\xf0\x85\x69\x65\x73\x76\x68\xc8\xf0\x5b\x16\x14\x1a\x92\xe5\xfd\x93\x0f\x4a\xfb\x7f\xc5\x42\xd9\xc4\x70\x3c\xc4\x1e\x71\x80\x24\x6e\xb4\x33\x1a\x52\xb8\x27\x7b\xe2\xff\xbe\xf9\xe3\xe8\xe7\xe9\xd3\xf1\xdd\xef\x89\x06\x63\xae\x3e\x5a\xc2\x66\x68\xde\xe8\xd9\xbb\x00\x1d\xe8\xe1\x82\x8a\x18\x07\x4e\x60\xc0\x6b\x37\xc3\xfd\x19\xf1\xce\xc1\x76\x7d\x83\x8d\x50\x2b\xfd\x6d\xdd\xb6\xcb\xf6\x1b\x01\x17\x34\xca\x1f\x70\x5f\x96\x53\xe7\x6c\xa0\x02\x52\xd5\x34\xd2\xff\x18\x27\x69\x6b\x21\xf3\x3a\xa5\xdb\xdf\x73\x0b\x54\x79\xc3\xdd\x56\xf1\x4d\xef\xcf\x79\xd1\x6b\x86\xf6\x2d\x73\xf0\x3f\xb1\x1d\xcd\x5b\x98\x9d\x1b\xf1\x63\x33\xb1\xf7\x84\x1f\xff\xfa\xbf\xd1\x0b\xf1\x78\x8c\xef\x9e\x1f\x9f\xc0\xf9\xe3\x08\xce\x1f\x16\x7d\xa9\x07\x10\x27\x96\x34\xa0\x7f\x10\xe1\xf0\x90\x30\x47\xf0\x38\xf2\x88\x13\xd0\x71\x84\x23\x4a\x84\x39\xcb\x98\x27\x66\xc2\x99\x44\x7c\x9e\x39\xd1\xd0\x95\x57\xb5\x7b\x8c\xf1\x98\x79\x2b\x75\x59\xcf\x5c\x14\x46\xa4\xf8\xfa\xe8\xc3\x07\x36\x93\x32\x14\x83\x9d\x9d\x29\x0f\x30\x9b\xaa\x43\xbe\x2e\xb4\xcf\xc3\x45\x44\xa7\x33\xe9\xb4\xbc\xb6\xb3\xdb\xeb\xfd\xe0\x9c\xcc\x88\xf3\x8a\x83\x4d\x2a\x8f\x44\xd7\xd9\x0b\x02\x07\x40\x84\x13\x11\x45\xba\xc4\xef\xea\xc2\xc7\xc4\xa7\x42\x46\x74\x1c\x83\xd9\xaa\x1a\x5c\x2c\x88\x43\x93\x81\xab\x94\x31\x65\x38\x5a\x38\x13\x1e\xcd\x85\xab\xf7\x2a\x1e\xc1\x5f\x1e\xcb\x0f\x1f\x98\x8e\xb8\xaf\x2d\x5f\x5d\x07\x47\x44\xab\xf8\xa4\x24\xbe\x35\xa8\xf5\x1d\x39\xc3\xd2\x91\x33\xe2\x4c\x78\x10\xf0\x4b\xca\xa6\xea\x48\xe8\x53\x7d\x1f\x82\x23\xa2\x2a\x22\x72\xa0\xfb\xf5\x77\x27\xdf\x33\x01\xd7\xe3\xba\x4b\x1e\xf7\x89\x33\x8f\x85\x74\x22\x22\x31\x65\x50\x2b\x1e\xf3\x0b\x95\x65\x70\xf1\xe1\x03\xd3\xe4\xed\x82\xf8\xe3\x04\x54\x48\x55\x45\xb6\x49\xe6\x17\xfa\xe3\x53\xe1\x05\x98\xce\x49\xd4\xad\xec\x02\x65\x59\x54\xd8\x2e\x84\x11\xf7\x63\x8f\xa4\xbd\xf8\xf0\x81\x25\xfd\x70\x3e\xa7\x17\x1f\x3e\x30\x33\x3a\x1b\xb3\x05\xdb\x59\xda\xe1\x91\xc3\xe5\x8c\x44\xce\x1c\x4b\x78\x5d\x2c\x52\x54\xc3\x0c\xc9\x99\xea\x48\x76\x00\x7a\x50\x6f\x09\x85\x72\xaa\x5a\x70\x9e\xcc\x27\xce\x2b\xce\xa7\x01\x71\x0e\x99\xd7\x75\x18\x4f\xf3\x00\xeb\x54\x0a\x18\x11\xd3\x15\xf1\x48\x38\x73\xbc\x70\xc6\x60\x40\xed\x3b\x92\x3b\x84\xf9\x3c\x12\x44\x11\x45\x18\xf1\x39\x97\xc4\xd1\x48\x91\xc2\xf1\x49\x44\x2f\x88\x0f\xeb\xe4\xc3\x07\x06\x68\x10\x7c\x22\x2f\x15\x99\x18\x12\x72\x44\x48\x3c\x45\x41\x4e\x18\x51\x45\x59\x91\xa2\x1d\x96\x51\x14\x1b\x6a\x3d\xf9\xe5\x70\xe4\x8c\xde\xbd\x3c\xf9\xf7\xde\xf1\x0b\xe7\x70\xe4\x1c\x1d\xbf\xfb\xd7\xe1\xc1\x8b\x03\xe7\xe7\x5f\x9d\x93\x5f\x5e\x38\xfb\xef\x8e\x7e\x3d\x3e\x7c\xf5\xcb\x89\xf3\xcb\xbb\xd7\x07\x2f\x8e\x47\xce\xde\xdb\x03\x67\xff\xdd\xdb\x93\xe3\xc3\x9f\xdf\x9f\xbc\x3b\x1e\x41\x45\x68\x6f\xe4\x1c\x8e\x3e\x7c\x40\x90\xbd\xf7\xf6\x57\xe7\xc5\xff\x1c\x1d\xbf\x18\x8d\x9c\x77\xc7\xce\xe1\x9b\xa3\xd7\x87\x2f\x0e\xfe\x3f\xf6\xde\x75\xbb\x8d\x23\x59\x17\xfc\xdf\x4f\x91\x1b\xb3\x4e\x37\x30\x53\x04\x45\xd9\xee\x6e\xcb\xcb\x7d\x1a\x22\x21\x09\x36\x6f\x4d\x90\xd6\xd6\x32\xbc\x7a\x12\xa8\x04\x90\x62\xa1\x12\xce\xac\x22\x05\xfb\xf8\x35\xf6\xdf\xf9\x3d\xaf\x31\x8f\x72\x9e\x64\x56\x46\x44\x5e\xaa\x00\xf0\x06\x68\x4b\xee\x46\xaf\x73\xb6\x45\xb2\x2a\x2b\x33\x32\x33\xae\x5f\x44\xb0\xb7\x9d\x8b\x8b\xce\xe9\x65\xaf\xdb\x4f\x58\xef\xf4\xf0\xf8\xea\xa8\x77\xfa\x3a\x61\x2f\xaf\x2e\xd9\xe9\xd9\xe5\x60\x90\x1f\xf7\x4e\x7a\x97\xdd\x23\x76\x79\x96\xc0\xc7\x97\x5f\x64\x67\xaf\xd8\x49\xf7\xe2\xf0\x4d\xe7\xf4\xb2\xf3\xb2\x77\xdc\xbb\x7c\x07\x5f\x7c\xd5\xbb\x3c\xb5\x5f\x7b\x75\x76\x31\x18\xe4\x1d\x76\xde\xb9\xb8\xec\x1d\x5e\x1d\x77\x2e\xd8\xf9\xd5\xc5\xf9\x59\xbf\xcb\xec\x02\x8f\x7a\xfd\xc3\xe3\x4e\xef\xa4\x7b\xd4\x66\xbd\x53\x76\x7a\xc6\xba\x3f\x74\x4f\x2f\x59\xff\x4d\xe7\xf8\xb8\xba\xde\xc1\x20\x3f\x7b\x7b\xda\xbd\xb0\x0b\x88\x97\xcb\x5e\x76\xd9\x71\xaf\xf3\xf2\xb8\x6b\x3f\x06\x4b\x3d\xea\x5d\x74\x0f\x2f\xed\x9a\xc2\xbf\x0e\x7b\x47\xdd\xd3\xcb\xce\x71\x32\x18\xe4\xfd\xf3\xee\x61\xaf\x73\x9c\xb0\xee\x7f\x76\x4f\xce\x8f\x3b\x17\xef\x12\x1a\xb5\xdf\xfd\xc7\x55\xf7\xf4\xb2\xd7\x39\x66\x47\x9d\x93\xce\xeb\x6e\x9f\x35\xef\xa5\xcc\xf9\xc5\xd9\xe1\xd5\x45\xf7\xc4\x4e\xfc\xec\x15\xeb\x5f\xbd\xec\x5f\xf6\x2e\xaf\x2e\xbb\xec\xf5\xd9\xd9\x11\x50\xbc\xdf\xbd\xf8\xa1\x77\xd8\xed\x7f\xc3\x8e\xcf\xfa\x40\xb4\xab\x7e\xd7\x4e\xe5\xa8\x73\xd9\x81\x8f\x9f\x5f\x9c\xbd\xea\x5d\xf6\xbf\xb1\xff\x7e\x79\xd5\xef\x01\xf5\x7a\xa7\x97\xdd\x8b\x8b\xab\xf3\xcb\xde\xd9\x69\x8b\xbd\x39\x7b\xdb\xfd\xa1\x7b\xc1\x0e\x3b\x57\xfd\xee\x11\x90\xf9\xec\xd4\x2e\x18\xce\x4d\xf7\xec\xe2\x9d\x1d\xd8\xd2\x02\xf6\x21\x61\x6f\xdf\x74\x2f\xdf\x74\x2f\x2c\x65\x81\x62\x1d\x4b\x8a\xfe\xe5\x45\xef\xf0\x32\x7e\xec\xec\x82\x5d\x9e\x5d\xd8\x55\x85\xb5\xb2\xd3\xee\xeb\xe3\xde\xeb\xee\xe9\x61\xd7\xfe\xfd\xcc\x8e\xf3\xb6\xd7\xef\xb6\x58\xe7\xa2\xd7\xb7\x0f\xf4\xe0\xd3\xec\x6d\xe7\x1d\x3b\xbb\x82\x85\xdb\xed\xba\xea\x77\xed\x46\xd9\x1f\xa2\x83\x9c\xc0\xb6\xb2\xde\x2b\xd6\x39\xfa\xa1\x67\x27\x4f\x8f\x9f\x9f\xf5\xfb\x3d\x3a\x36\x40\xba\xc3\x37\x44\xf8\xb6\xaf\x76\xeb\xa5\x82\x2c\xa6\xe5\xb0\x3d\x52\xb3\xfd\x89\xd2\x32\xcb\x38\x96\x60\xf8\x50\xdc\xfd\xd0\xac\xfc\xb0\x5a\x8c\x1c\x3c\x67\x17\x2a\xd5\x72\xa2\xd8\x89\xd2\x5c\xec\xc4\xc8\x4e\x8c\xec\xc4\xc8\x4e\x8c\xec\xc4\xc8\xbf\x89\x18\xb1\xfc\x71\xc2\xf3\x89\x29\xf8\x7e\x2e\x26\x5a\xe5\x92\xae\xcf\x54\xb0\x93\xde\x25\x3b\x96\x23\x91\x1b\xc1\x9a\x27\xbd\xcb\xd6\x1a\x21\xf2\x25\xfb\x4e\x68\x31\x5b\xb0\x3e\x17\xf9\x2f\xf8\xd0\x79\x88\xff\x4b\xc3\xa6\x42\x8b\xe1\x82\x4d\x34\xcf\x0b\x91\x26\x6c\xac\x05\x30\x93\xd1\x94\xeb\x89\xe5\x78\x8a\xf1\x7c\x61\x2f\xb1\x51\x39\x53\x43\xcb\xaa\x2d\x7f\xe3\xc0\xa5\x07\x83\x5c\x8d\x59\x95\x1d\x58\x5e\xc8\x8d\x51\x23\xc9\xad\xe8\xa8\x32\xbd\xb1\xcc\x84\x61\x4d\xcb\x9a\x06\x83\x46\x9f\xde\x19\x0c\x1a\x2d\xf8\x54\x2a\x78\x16\xf8\x65\xbf\xce\x61\xb4\xb0\x7c\x70\x84\x12\x4a\xe6\xa3\xac\x4c\x5d\x9f\x56\xfb\xe7\x4c\xce\x24\x7d\xc7\xbe\x8e\xb2\xd2\xb2\x2b\x65\x99\x5c\x02\x33\x4e\x18\xc8\x39\xfb\x5f\x01\x0b\x84\x12\x96\x66\x9a\x30\xcf\x64\x45\xc2\x0c\xd4\xb5\xb4\xe4\x4d\x1c\x9f\x36\x22\xcb\x50\x26\x48\xe4\xa8\xf1\x0c\x13\x94\x00\x8a\x44\x26\x91\x0b\x70\x66\xb7\x53\xb0\x50\xa3\xd5\x48\x3b\xa7\x71\xa9\x73\x69\xa6\xc8\x7a\x53\xc5\x8c\x82\xaf\x5a\x4b\xdf\xfe\x66\x9d\x88\x7d\x11\xce\x40\x4d\x56\x92\x8c\x22\x51\x24\x4d\x8c\xf3\xa0\x3f\x99\x29\xcf\x32\xcb\xf2\x91\x74\x22\xb5\xb2\x90\x57\x96\xa5\xed\x24\xc0\x6e\x96\x3c\x63\x73\xa5\xbd\xd8\x8e\x97\xe0\x19\x79\x77\x35\x1f\x8f\x78\x73\xc2\xde\xf6\x2e\xdf\xd8\xdb\x43\x0c\x15\x2e\x81\xbd\x55\xdf\xf7\x4e\x8f\x92\x88\x65\x0f\x06\x39\xf1\xde\x88\x53\x3b\x76\xc4\x02\x33\x82\x4b\x75\x27\x77\xb6\x4c\x27\x62\xce\x6c\x35\x6b\x3e\x3d\x62\xa7\x67\xa7\xbd\xd3\x57\x17\xbd\xd3\xd7\xc0\xd9\xd6\xf0\x67\xcb\xdc\xaf\x2e\xdf\x58\x3e\x0c\x1c\xb4\x2e\x9c\x96\x99\x33\xf0\xfb\xc4\xb3\x57\xc7\x5c\x80\xa7\xae\xe2\x5c\x9d\x53\xd6\x81\x68\xbc\x5d\x4c\x60\x63\x96\x63\x55\x38\x53\xe2\x39\xd3\xab\x8b\xb3\x13\xbb\x4c\x62\x4b\x67\x8e\x01\x9e\x62\x54\x1f\x88\xce\x2a\xfb\x63\x39\x20\x32\x2f\x3f\x24\x3b\xea\x76\x8e\x7b\xa7\xaf\x2d\x13\xa6\x85\xba\xc7\xef\x64\x4d\xe9\x44\xcb\xf7\x3c\xbb\xe1\xfb\xef\x6f\x8b\xbd\x89\x5a\xab\xc1\x1e\xf1\x1b\xc1\x5e\xd3\xc3\xdb\xe7\x3e\x6c\xeb\xbc\x87\x6d\x93\xf3\xb0\xad\xf1\x1d\xb6\x15\xae\xc3\x3e\x27\x9e\xc3\x3e\x03\x8e\xc3\xb6\xc5\x6f\xd8\x16\xb9\x0d\xdb\x0e\xaf\x59\xa3\x23\x3d\x91\xd3\xb0\xad\xf2\x19\xf6\x20\x2e\xa3\x4b\x63\xb4\x32\x66\x7f\x98\xf1\xd1\xf5\x58\xcb\x94\x2f\xf0\xe1\x97\xe1\x17\xf6\x58\x87\x0b\x94\xb2\x32\x4f\xc9\x2a\xea\xcb\xd9\x3c\x93\x63\x29\x52\xf6\xb2\x7f\xe4\xb4\x25\x3a\xcb\x7f\x63\x81\x5b\xfd\x7f\xff\xaf\x65\x56\x07\xec\xa2\x34\x86\x5d\x28\x63\xe0\xef\x6b\x8c\xed\xbf\xc1\x1f\xb7\x62\x6f\xff\x8d\x6d\x6e\x71\xc3\x30\xf6\x45\xb2\xb9\x71\x7a\x07\xed\xcd\xed\xee\xbf\x6d\x64\xf3\x06\x52\x3d\x5f\x9e\xcb\xc3\x0d\xf0\xbf\x2d\xb1\x9a\x47\x4c\x07\xde\x0f\x53\x62\x4f\x36\xc2\x61\x20\x78\xb5\x66\x86\xe3\x0a\xb7\x63\xce\xfe\x8d\x6d\xcb\xa0\xfd\x1b\xdb\xd8\xa4\x85\x51\xd6\xf3\xb2\x87\x18\xb5\x78\xc9\x6a\x2b\x7f\x8a\x5d\x0b\x03\x45\xb6\x2d\x7b\xaa\x65\x0b\x03\x2d\xb3\xf7\xc7\xd9\xb6\x48\xdf\xc8\xbe\x65\x4f\xb0\x6e\x91\x36\x75\x0b\x97\x3d\xd6\xbe\xa5\xbd\xae\xdb\xb8\xec\x71\x16\x2e\x72\xbb\x95\x56\x2e\x7b\xa8\x8d\x0b\x63\x3c\xd1\xce\x7d\x5f\x08\x51\xde\x8a\x7c\x7f\xa2\xf6\x86\x32\x4f\x79\xc1\x9d\xbe\x21\x0d\x83\xd6\x86\x56\xc3\xab\xaa\x29\x87\x87\xcf\xd8\x41\xfb\x19\xbb\xca\xe5\x8d\xd0\x86\x67\xac\x49\xbf\x6a\xb1\x73\xd0\xa1\xd8\x11\xf6\x43\x3c\x12\x29\x71\xd8\xc1\x20\x27\xdd\xea\xce\xf9\x88\x8c\xff\xc2\x75\x16\x4d\x67\x0f\xca\x07\x8e\xcd\x3a\x1b\x3b\x61\x5d\x78\x87\x1d\x0b\x39\x54\x37\x72\x64\x39\xc6\xef\xc2\x59\xcb\xb6\xe7\xaa\xad\xf0\x67\x20\xf5\xa3\x05\xc6\x26\xde\xda\xe5\x89\x38\x37\xe5\x23\x27\xb2\x52\x4c\x0c\x06\xf9\x43\xbd\xb5\x4b\x42\x62\x3b\x0e\xcf\x58\x3a\xd8\xd3\xf5\x54\xf9\x50\x97\x0d\xc1\xe8\x7e\x9c\xc3\x73\xad\x64\x18\x0c\xf2\x47\x38\x3c\xef\x95\x0b\xd6\x92\x7f\x88\xc7\xf3\x41\x52\x01\x7c\x91\x6b\x3d\x9e\x8f\x94\x09\xd6\x58\x5e\xe9\xf1\x7c\xa2\x44\xd8\x5c\x1e\x44\x8f\x0d\x06\xf9\xd3\xa4\xc1\xa7\x0c\x9b\xed\x99\x9f\xb3\xbd\x54\x5b\x8e\xbe\x3f\x5b\x98\x9f\x33\x7c\xf6\xb5\xda\x3b\x59\xf4\xff\x71\xbc\x77\x04\x7f\x62\x70\xa7\x81\x8f\xc7\xea\xfe\x89\xfa\x45\x66\x19\x77\xdc\xdf\x39\x47\x7f\x10\x1a\xac\xd1\xe7\xed\x67\x38\x9a\x7b\xce\x94\xb3\x19\xd7\x00\x34\xb1\xaf\xd3\x88\xcc\x8c\xd4\x5c\x30\x6e\x88\x37\x38\xdb\xf7\xe4\xfc\xf8\x05\xc0\x3a\x2c\x9b\xc9\xc4\xb8\x60\x7c\x3e\xcf\xac\xfd\x4a\x1e\x0a\xf4\x2d\x50\xb5\x17\xcb\x51\x4e\xce\x8f\x45\x0a\x9c\xd3\x31\x01\xcb\x8c\x67\x82\x7b\x7b\xfa\x9d\x2a\xd9\x88\x43\xc7\x5e\x98\x42\x99\x8f\xa0\x44\x56\x5a\x61\xbb\x43\x55\x4c\x2d\x4f\x9a\x6b\x00\x24\x39\xfc\xcb\x4c\xe8\x91\xe4\x59\xb6\x68\xb3\xb7\x53\x91\x47\x5c\x27\x9f\x24\x90\xd6\x0a\x9c\x92\x9c\x0c\x30\x7e\x3c\xaa\x1a\xc3\xac\xdd\x07\x71\xf6\xab\xa8\x7a\x7e\x6c\x49\x47\xbf\xe1\xad\xca\x2f\x65\x61\x44\x36\xb6\x72\x69\xd8\x02\x8f\xcc\x6c\xce\x0b\x39\xcc\x02\x35\x9b\xa2\x3d\x69\xb3\xd7\xe7\xc7\xec\x8b\xf6\x33\xfb\x60\x67\xce\x47\x53\xe1\x77\xe7\x79\xfb\x59\x2b\x10\x23\x17\x22\xcd\x07\x7f\xba\x73\xd6\x50\x69\x1f\xd1\x40\x0b\xbb\x4d\x99\xca\x27\xf6\xbf\xc0\xce\xef\x5b\x85\x95\x78\x9e\xca\xe4\x8e\xca\x04\x37\x82\x69\xc1\xd3\xca\xa3\xaf\x3a\xff\x60\x12\x3e\xc7\xa6\xfc\x46\xb0\x71\xa9\x81\xf3\xff\x5c\x0a\x83\x42\x44\x8b\x09\xd7\xe0\x04\x8a\xce\xcf\x9d\x27\x3c\x93\xc3\xfd\xf9\xcf\x6b\xb4\x88\x83\xbd\xe7\xcf\x0e\xbe\x48\xd8\xe0\x4f\xf3\x9f\x07\x7f\x62\x87\x71\xa0\xee\xdc\x39\x45\xa2\xb7\x0e\xf1\x2d\xf6\x32\xe3\xd7\x82\x9d\xc8\x5f\x84\xe6\xf9\x62\xe7\x63\xdb\xf9\xd8\x76\x3e\xb6\x9d\x8f\xed\xa1\x3e\xb6\xf7\x33\x25\xb5\xca\xf7\xcd\xcf\xd9\x3a\x1c\xca\x17\x09\xfb\x8e\x5b\xce\x70\x02\x8f\x6e\xcc\x61\x06\x83\x7c\x33\x1e\x33\x18\xe4\x1b\x70\x99\xc1\x20\xdf\x84\xcf\x10\x2a\xe4\x93\x45\x11\xad\xd6\xf9\x44\x6e\x83\xf0\x8f\x6d\xf2\x1b\x88\xd4\x7e\x1e\x1c\x67\x30\xc8\x37\xe4\x39\xa8\xe2\x3e\x89\xeb\x0c\x06\xf9\x06\x7c\x67\x30\xc8\x37\xe1\x3c\x83\x41\xbe\x09\xef\xb1\x06\xd6\x26\xdc\xc7\x92\xed\xe9\xfc\x67\xb6\x28\xb4\xcc\xc4\xfe\x4c\xce\xc4\x1e\x82\xe5\x1e\x8d\x70\x38\x82\xfb\xaa\xd9\xf7\xca\x14\xea\xe6\xa3\x68\x40\x4b\x90\xa7\x2d\xe8\x40\x30\xe6\xf6\xb4\xa0\xc1\x20\xdf\xb6\x1e\x54\x9b\xe1\x16\x34\xa1\xc1\x20\xdf\x61\x1c\xb6\xac\x0f\x39\x0f\xc9\xd6\x34\x22\x7b\xcb\xb6\xaa\x13\xd9\x45\x6f\x47\x2b\x82\xa9\xfd\x77\xe8\x45\x79\xf9\x97\x29\x2f\x46\xd3\xfd\x89\x2a\x4b\x99\x2e\xf1\x1e\x67\x7d\x0d\x17\xec\x7b\xfd\xcb\xc2\xfc\x52\xa8\x31\xfb\x5e\xdd\xf2\x4c\x5e\xb3\xd1\x54\x4b\xf3\x77\x1c\xa2\x0d\xce\xe0\x1d\x47\xda\x02\x47\x72\x58\xb3\xad\x71\x24\xcb\x8d\x76\xa8\xab\x1d\xea\xea\x77\x82\xba\xd2\x66\xff\xc3\x0a\x56\x84\x6a\xd0\x57\xec\x2c\x93\x37\x52\x68\x76\xae\x64\xa1\xc5\x82\x69\xf3\xf7\x94\xcb\x6c\x31\x53\x10\x89\x18\x01\x70\x7b\x07\xff\xfc\x1c\xe0\x9f\x81\x11\xe1\xec\x76\xf0\xcf\x1d\x23\xfa\xc4\x8c\xa8\xb6\x9d\x77\x32\x22\x33\x2d\xf5\x48\xa9\xe3\x7d\xc3\x73\x59\xc8\x5f\x44\xfa\x4f\x9e\x8f\xa6\x4a\xff\x33\xe7\x33\x41\x01\x93\x60\xbe\xad\xe5\x58\x47\x33\x59\x68\xc9\xfa\xd3\x52\xf3\x6c\xf1\x31\x4c\xb7\x1d\x7f\xda\xc1\xd3\x77\xfc\xe9\x5f\x81\x3f\x3d\x46\x51\x7a\xaf\x74\xca\xf3\xbd\x5b\x38\x77\xfb\x62\xc6\x25\x45\x92\xbb\x19\x56\x30\x70\xe7\xc5\xf3\x04\x89\x55\x7a\xe0\xfa\xb3\x5b\xa1\x05\x41\x33\x29\xe3\x8d\xdd\x3d\xb8\x3d\xd3\x83\x41\x6e\x07\xaa\x5d\x11\xb8\xa4\x23\xc1\x86\x22\x53\xb7\x2f\x1e\xef\xdc\xfa\x82\x7d\x07\x9f\x63\x6f\x1d\x2c\x73\x67\x49\xee\x7c\x5b\xff\xfa\x0c\x72\xe7\xdb\xfa\x88\xbe\xad\x4c\xa5\xdc\x4c\xe9\x3f\x2b\x79\x52\x9d\x1b\x7d\xd7\x67\xaf\x54\x99\xa7\x1e\x32\x4d\x30\xb8\x4a\x36\x31\x15\x4f\xc1\x0f\x56\x9a\x30\xbf\x37\xed\xb1\x7f\xbd\x91\x34\x96\x7b\x2c\x0f\x06\xf9\x4b\x6e\x44\xca\x54\xce\xae\xf2\x54\x68\x33\x52\x5a\xb4\xdf\x9b\x24\xba\x1f\x94\xc9\xd8\x31\xd3\x6b\x91\x73\x03\x99\xa5\xc4\x9b\x0e\x33\x55\x62\xdf\x8e\x5e\x7e\x23\x4c\x21\x27\xbc\x90\x37\x82\x5d\x08\x7b\x03\x84\x36\xec\x8f\xac\x9b\xca\xfa\x3c\xab\xd3\x2c\xfd\x87\xdf\x9b\xb6\xd2\x93\x75\x33\xbd\xac\x70\xcb\x91\xca\x8d\x34\x28\x53\x6e\x54\x56\xe6\x05\xd7\x8b\x40\x19\xb8\x7d\x33\x9e\x0a\x36\x5c\xb0\x19\x22\x34\x64\x9e\xca\x1b\x99\x96\x3c\x33\x6d\xf6\x4a\x69\x26\x3e\xf0\x51\x51\x79\x87\x4d\xa5\x29\x94\x5e\x24\xcc\x08\x44\x07\x69\x71\x23\x4d\xf4\x17\x2b\x70\x6e\xb8\xcc\xb0\xc0\x67\xc1\x1e\xbe\xd1\x81\x2d\x39\x98\x4e\x8c\x65\xca\x32\x28\xa4\x63\x96\x63\xb2\xe2\xc3\x48\xcc\x0b\xc6\xad\x7a\xe8\x84\x82\x48\x2b\xb2\xed\xdb\x6f\xbf\xfd\x76\x8b\x42\xca\xae\x71\x33\x10\x0a\xe6\x89\x6f\x03\x86\x32\x18\xe4\x5b\x00\xa2\xc4\xb9\xfc\x4f\x86\xa2\x0c\x06\xf9\x56\xc0\x28\x24\x03\x3f\x9a\x98\xfa\x97\x0a\x0f\xb3\xb3\x57\xd6\xac\xfd\xef\x0f\x0f\x47\x62\x8a\x14\xf4\xcd\x81\x29\x18\xeb\xde\x1c\x9a\x32\x18\xe4\x5b\x11\x54\x81\x6f\x04\xa1\x63\x0f\x98\x16\x19\x5c\x6f\xba\x62\x63\x7b\x6e\xf8\x6c\x9e\x11\x1e\x10\x6e\x2d\x87\xc2\x14\x37\x92\xb3\xc3\xc3\x67\x6d\xd6\x87\xbf\x83\x46\x94\xc2\x1d\xc0\xb2\x69\x96\x5b\xc0\x09\x8c\xf1\x84\xa9\x34\xf3\x8c\x2f\x08\xbd\x4d\xfc\x60\xae\x95\x11\x74\x12\x23\x4e\xc7\x23\x3c\xf7\xe1\xe1\xb3\x17\xc0\x70\x5f\xec\xef\x8f\xb4\x00\x59\x33\x52\xb3\x99\xca\x41\x70\xec\xc3\x6d\x1f\xa5\x90\x80\xb0\xff\x8b\xd0\x6a\xff\xa0\xfd\x6c\xbf\xbe\xd4\x57\x08\x57\x54\x50\xa5\xcf\x71\xa3\x5c\xa5\xe2\x9f\x58\x37\x11\x71\xea\x37\x50\x96\x83\xa5\x52\x8b\x51\xa1\xb0\x04\x1a\x30\xe3\x42\xe8\x9c\x67\x99\x15\x04\xf6\x3b\xd4\x65\x30\x14\x4a\x83\xb2\x1e\xc3\x45\x8d\x6f\xde\x4e\xe5\x68\x8a\x90\xc6\x62\x2a\xa4\x66\xea\x36\x4a\x8c\x30\xdf\xb0\x5b\x2b\x6a\x00\x60\x9a\xa7\x00\x7f\x74\xd0\xc8\x59\x42\x38\x4b\xa9\x59\x21\xf4\x0c\xeb\x87\xa4\x72\x3c\x16\xda\x95\x61\xb3\x04\xc3\xbf\x01\xd7\xb8\xbb\xbe\xc1\x88\xcf\xe6\x43\x91\x65\xfb\x33\x55\x1a\x51\x68\x3e\xf7\x8f\xb3\x3b\xff\x57\x05\x91\xde\xf1\x78\x04\xfe\x4d\xd8\x77\x3c\x2f\xad\x68\x7e\xfe\xec\xd9\x97\xeb\xde\xa1\x3d\xbd\xbd\xbd\x6d\x73\xf8\x08\x6c\xa7\x23\x0e\xed\xe0\x65\xf7\xe2\xc4\x03\xf4\x8f\x7a\xf6\x1e\xe0\xfd\x07\xf0\xf7\x45\xf7\xfc\xe2\xec\xe8\x0a\xae\x47\x02\x4f\x1d\xf5\xfa\x08\x6c\xc7\x0b\x33\x18\xe4\x07\x6d\x06\x6d\x1a\x90\xd7\xb6\xfd\x9a\x07\x83\x86\x5f\x54\x83\xd8\xe8\x4c\x70\x3c\x19\x44\x57\x2c\xe5\xed\x32\x19\xec\x8d\x00\xa9\xe3\x52\x22\x40\x6a\xe1\x68\xf6\xd1\x6a\xa6\x49\xb8\x0c\xc3\x05\xeb\x0b\x2c\xc1\xcc\x0e\x58\x31\xd5\xaa\x9c\x4c\xd9\xd7\x5e\xce\xba\x53\xbf\x62\x6e\x4a\xaf\x98\x5c\x10\x0f\xd0\x50\xcd\x32\x78\x91\x17\xb2\x58\x40\x83\x67\xa5\xe5\x2f\xf0\x51\x1c\x6a\xd5\x0b\x90\xaa\x22\x0d\xaa\x08\x0e\x54\x7b\x5c\x01\xd5\xd2\x24\xc4\x84\x67\xac\x0b\x83\xaf\x98\x48\x99\xdb\x95\x92\x1c\xe1\x23\x18\xca\xcd\xc4\xaa\x0c\x60\x2c\x31\x46\x0a\x2c\xfc\x05\x34\x1f\xfb\x79\xaa\x1e\x8a\xe9\x34\xbe\x94\xa8\x9d\x77\x62\x17\x84\xe8\xe1\x14\xf4\x5e\x7b\xd7\x71\x20\x7a\xce\xe5\x7f\xf0\x82\x3e\x87\x9a\x1d\x30\x94\x52\xcf\x95\x11\x41\xa3\x4a\xfd\xde\x27\x7e\x59\x34\x8c\x5d\x11\x60\xc4\x59\x53\x22\xd8\x7a\xae\x6e\x85\x4e\xe8\xfe\xdb\x69\x58\xed\xd1\xfe\x1b\x14\x99\x11\x27\xf4\x38\x0e\x84\x7f\x01\x0a\xe8\xa8\xb9\x07\xa4\xf2\x94\xa3\x29\x4d\x2d\x61\xb7\x53\x01\xeb\x1f\x92\xa6\xca\x61\xe8\x88\x32\xb7\xd2\x1e\x2a\xa5\x59\x53\xca\x56\xb5\x49\xde\x58\x8e\x0b\x50\xd5\x46\x76\xe4\xe6\x57\xcf\xfe\x47\x0b\xbe\xa6\x74\xc4\x35\xed\x38\x65\x61\x05\x3c\x18\xf8\xd0\x58\xcf\xb8\x01\x65\x8b\x0d\x45\x2e\xc6\x72\x64\x85\x7f\xb5\x03\x5f\x98\x65\x65\xd7\xdf\xa9\xd2\x92\xa6\xa9\x34\xfd\x64\x0f\x61\x2b\xde\x7c\x9e\xb3\xa0\x57\xdb\x0f\x55\x0f\x8a\x1d\x47\x7c\x10\x7a\x24\x8d\x9d\x50\x50\x5a\x8c\xd3\x4a\x3d\xaf\x5c\x75\xea\xfa\x20\x35\xec\x14\x20\x0b\xa9\x76\xe8\xe6\x5a\x8c\x85\xd6\x22\xc5\xbf\x8e\x81\xf8\xd7\xf6\x3b\x71\x9a\x96\xa1\xdd\x0e\x7e\x8f\x61\x09\xea\x14\x2a\x94\xa8\xa4\x79\x46\x1d\xc9\xa9\x64\x09\xff\xc8\x18\xfd\x3d\xa9\xd4\xf6\x8f\xb4\xdf\xca\xec\xb1\x80\xe8\xaa\xd9\x43\xea\x82\xfd\x9d\x16\xa6\xcc\xe0\xb6\x00\x2b\x9f\x89\xd1\x94\xe7\x72\xc4\xe9\xba\x40\xd5\x54\xfb\x20\x77\xa7\x0b\x7e\x93\xd1\x8f\x63\xc6\x19\x92\x08\x46\x4b\xaa\x6b\xc4\x21\x6a\x0b\x1d\xa9\xd9\x5c\xda\xdb\xa5\x50\x1d\xc5\x85\x62\xcb\xa8\x25\x8d\x3e\xe2\x68\x23\x95\xdf\x20\x5b\x07\xb5\x97\xf2\xb1\x44\x2a\x39\x2b\x16\xf3\xda\xc2\xdf\x2a\x7d\xbd\x82\x49\x40\x52\xa1\x9d\x34\x16\xe8\x9c\xca\x79\xb8\x12\x32\x77\x2b\x71\x17\x02\xa9\x47\x0b\x03\x53\x2e\x18\x5e\x21\xc7\xe0\xd8\xeb\xf1\x06\x0e\x22\x4a\xf5\xe1\x82\x71\xc7\x27\x6a\x0a\xb4\xe3\x78\xb1\x8a\x6c\xb9\x4c\x51\x58\xc1\x93\x3a\x27\xd2\x2d\x2c\xc1\x8e\xd0\xe4\xb9\xb5\x14\x41\xfd\x91\x51\xe6\x19\x69\x0e\x9d\xf9\x5c\xe4\xa9\xfc\x80\x06\x59\xab\x42\x87\x23\x01\xd9\x23\xd6\x24\xb6\x24\x31\x35\x9a\xd8\x53\x60\xbf\xb3\x9a\x0a\xcc\x1d\x1f\x3b\x18\x52\xc1\xcd\x7d\xe8\x8c\x76\x7b\x31\xe3\x1a\x61\xc8\xbb\xec\xb7\x60\xd3\xec\x8d\x40\xcd\xc3\xb3\x07\x01\xe6\xb8\x65\x00\xce\xb2\x35\xf6\x30\xe7\xaa\xa0\xcb\xc2\x44\xc6\x87\x4a\xbb\x9f\x42\xee\x5d\x7c\xa5\x70\x2c\x2b\xfc\x84\x11\x79\x01\xd4\xe7\xd6\x16\xca\xe0\x6a\x30\xa5\xe5\x44\xe6\x3c\x5b\xb1\xe5\xcb\x0c\x9a\xf8\xd6\xb8\xc2\x06\x12\x56\x27\x1e\x51\xce\x9e\x67\xda\x3b\x18\x9d\x84\x88\x16\x56\x1b\xa3\x3b\x2a\xe6\x5c\xc3\x39\xb1\x34\x81\x35\xcc\x84\x16\xd9\x82\x65\x32\xbf\x06\xa2\x0d\x65\x0e\xa7\x24\xe7\x33\xd1\x72\x7b\x2e\xad\x12\x35\x86\xca\xe4\x6a\x9c\x04\xa1\xe9\xe9\xb9\x34\x25\x4b\x19\xa1\xc6\x95\x4d\x3f\x8c\xfc\x09\x6b\x36\xbc\x7e\x09\x62\x6b\x97\xbe\xe9\x29\x48\xb7\xce\xc9\x56\x3f\x17\x3b\x56\x65\x4f\xe0\x14\xa7\xa1\x40\x81\x1d\x48\x21\x71\xe0\x25\xa5\xd7\xce\x3f\x89\x6e\x45\x61\xc5\x80\x72\x2a\xae\xa5\x66\x39\xa4\x04\xd7\x42\x31\xa7\x8b\xc0\xd1\x82\x69\xa3\xaf\x21\x0f\x93\x03\x7e\xbe\xa4\x69\xd0\x26\x83\xec\xbb\x53\x66\xc4\x9a\x8b\x65\xcc\xf0\x75\x7b\xd6\x87\x62\xca\xb3\x31\xfa\x90\x57\x6b\x33\x0f\x93\xfd\x76\x8f\xfc\x9a\x30\xad\x93\x31\x92\xfe\x9e\x2f\xab\x31\x13\x99\x18\x15\x5a\xe5\x72\x94\xd8\x4d\x18\xf2\x0c\x4e\x92\x2b\xaf\x67\x95\x91\x32\x27\xe2\x33\x7b\x0b\x22\x9a\x8b\x40\x28\x4b\x27\x48\x46\xa6\xbb\x02\xe4\x37\xc9\x9d\xe2\xc8\xb1\xae\xf8\x0b\x2a\x8f\x66\xc4\x66\x5c\x66\xe8\x4a\x32\x85\x49\x2a\xd6\x95\xd3\x8c\xcc\xc2\x14\x62\x66\x22\x1e\x2e\x8d\x29\x85\x95\x20\x23\x10\x92\xf4\x00\xee\x3d\x64\x25\x83\xe6\xe2\x15\xaf\x98\xe6\x49\xe0\x20\x95\x23\x10\x11\xdb\xd2\x2c\x95\x66\x54\x1a\x10\xf5\xf0\xc1\x19\x70\x4b\x52\x2b\xdf\x02\xab\xf3\x82\x49\x7c\x70\x04\xa8\x2e\xd4\x1d\xc5\x91\xca\xcd\x5c\x8e\x4a\x55\x9a\x6c\xc1\x66\x5c\x5f\x5b\x9e\xa7\x83\xa2\x44\xba\x97\x30\x72\x92\x3b\x5b\xce\xee\x0e\xd0\x74\xe5\x21\xb4\x6c\x6a\x30\x68\x9c\xaa\x82\x71\x16\xdf\xd3\x36\x9e\x83\xe5\x3b\xbc\xa4\x75\xfb\xd5\xbb\x3b\x78\x9f\xf6\x13\x53\x11\xbd\x45\xd5\x4f\xb3\x29\x37\x6c\x28\x44\x6e\xed\x3f\x01\x9c\x7c\xb8\xa8\x7c\xc6\x5f\x43\x23\x7e\x2e\x45\x5e\x64\xf6\xa3\x23\xa5\xe7\x0a\x45\x76\x64\x44\x5b\x12\x13\x33\x7a\xde\x66\xaf\xad\x86\x65\x3f\x1b\xac\x7b\xa7\x64\xb1\x7e\x35\x66\xb2\xd2\xca\x09\x57\x2d\xe6\xcb\x82\x8f\xa6\x71\x9e\x5c\xc5\xcb\x08\xca\xc1\x3b\x55\x32\x6e\x75\xbd\xb9\x28\x4a\x9e\xd1\x09\xbc\x55\x3a\x4b\x6f\xa5\x55\x37\x72\x95\xef\xc1\xf6\x1b\x79\x03\x3f\xee\x39\x8f\xa4\x56\x0b\x9e\x15\x8b\xbd\xb1\x16\x22\x61\x52\x6b\x71\xa3\x46\x96\x95\xd7\xa5\xb9\xf3\xa1\x16\x2a\xa4\xa5\x27\x56\x23\x9c\xdb\x93\xbc\xc4\xe8\x3c\x3f\x47\x1f\x41\xb6\x70\x4e\x88\x24\xfc\x66\x2e\x34\x8a\xd9\x9a\x7b\x30\x8a\x70\x85\x5b\xe0\xf9\x30\xa8\xce\x4b\xdf\x5b\x21\xc8\x81\xb1\xd0\xe6\x7c\x11\x6d\xce\x39\xb7\x2c\xf7\xf7\xbe\x33\x4d\xef\xa6\x66\x50\xb2\x3e\xf5\xc1\x5d\x83\xa6\x51\x8b\xcd\x71\xa1\xd1\xce\xcd\xf8\xb5\x48\xd0\x2b\x62\x15\x3c\x9a\x0e\x18\xd6\x0a\xfc\x1b\x56\x00\x88\x2c\x4b\xe8\xff\xca\xd9\x5c\xe9\x22\x09\xa1\x10\xcb\x06\x48\x49\x26\x7d\x10\x98\x0c\x2d\xcb\x2e\x1f\xf7\xa7\xee\x71\x57\x79\xb6\x40\x02\x5b\xc6\x45\x13\x83\x4a\x04\x2e\x91\x35\xac\x6c\xb8\xc0\x31\x62\xc2\x7a\x96\x99\x8b\x91\x30\x86\x6b\x09\x97\x72\xac\x65\x3e\x71\x26\x8d\x90\x24\xf4\xe2\xdb\xde\x34\x2d\xc6\x33\x95\x0b\x12\x85\x23\x35\x1b\xca\xdc\xab\xf3\xe8\xe6\xa9\xbd\x40\xab\x71\x85\x0e\xe0\xe4\x81\xe7\xd9\x2a\x76\xd5\xa9\xd1\x17\x6e\xb9\x09\x62\xbb\xcd\x7a\x63\x06\x86\x1c\x5a\x41\xa6\x90\x85\x3d\xca\x7e\x3b\x30\x6c\xa3\x72\xc6\x27\xdc\xfe\x19\xd8\x1a\x19\xef\xcd\x20\xa6\x9c\x42\xad\x95\x31\x7b\x40\x2b\xbb\x86\x91\x2a\xad\xd6\x84\x3f\xcb\x9c\x71\x96\xf1\x5b\x53\xca\xc2\xae\x33\x13\x13\x64\xfe\x54\x0f\xe3\xad\x57\xaa\x2d\x67\xab\xb2\xc1\xbb\x58\x1a\xc8\x02\x9c\xb6\x21\x63\xdb\x0f\x13\x05\xc3\x16\x6e\x4d\x6e\x27\x66\xa0\x9b\x16\x53\x81\xaa\x57\xf5\x00\x92\x8e\xe4\xcc\x50\xba\x1d\xce\xb2\x08\xf7\x8a\xe4\x9c\x53\xa3\x50\x16\xd8\x5b\x69\xf7\x8d\xce\x08\xf7\x3e\xf4\x14\xda\xdb\xe0\x99\xf3\x84\x25\x88\x83\xab\x44\xf2\x65\xbd\x36\x53\x1b\x3e\x3d\xe3\x8b\xa8\xc4\x46\x8d\xf1\x54\x42\x13\x11\x0b\xba\x43\xab\x83\xed\xb0\x5a\xa2\x48\x65\x39\x5b\x55\xcd\xc4\xea\x3d\x15\x4b\x19\xa5\xf6\x1a\xde\x95\xd4\x2a\x9c\xf8\x33\x35\x13\x62\x7d\xbd\x93\x17\x5e\xae\x36\x79\x0b\xd7\x59\x9a\x82\x4d\xec\x74\xed\xec\xd0\xba\xd0\x62\x24\xe7\x32\x06\x89\xd0\xea\x82\xcb\x70\x69\x99\xb5\x18\x15\x6d\xd7\x37\x24\x32\xe9\x9b\xc3\xe8\x9b\xe8\xb5\x09\x8a\xb3\xcf\xc0\x07\x8f\x8e\xb6\xe7\x47\xab\x99\xcc\xed\x21\x41\x6b\xd1\x84\xcf\x5b\xae\xe6\x0f\x33\xd4\x10\xa0\x24\x7e\x9f\x02\x5f\xfb\xf2\x28\xfa\x32\xd6\x6f\x49\x42\xec\xcb\xdb\xec\xae\x24\xc0\xb2\xa9\xe8\x3e\xec\x3f\x18\x47\xb0\x28\xa8\x83\xc2\x30\xa1\x93\x9d\x58\x56\x98\x0a\xab\x2a\x25\x41\x71\xb0\xff\xe3\x45\xb8\x68\xb4\x32\xef\x3b\xae\xcf\xa6\xc6\x45\x59\x45\x55\x43\x86\xe9\x86\x80\xa9\xa5\x0a\xb4\xd7\xb9\xd0\x58\xa3\x86\x62\x8a\x5c\x17\x5e\x4c\x31\xd2\xd7\xeb\x8b\xac\x51\x2c\x6d\x59\x56\xe5\x37\x9f\xac\x3c\xbb\xd1\x56\x69\x3b\xbb\xec\x1d\x76\xad\x36\x56\x88\x0f\x05\x42\x86\xb8\x71\xdf\xa1\x3a\xdb\xf4\xad\xf8\x6e\x45\xf7\x7f\xc5\x45\x59\x22\x2d\xec\x57\x18\xc9\x59\x9a\x1c\xfc\xf1\x60\x53\x86\x43\x27\x56\xd2\x95\x8a\x51\x88\x88\xfc\xc4\xce\x80\x2d\xe0\x3a\x60\xfe\xc9\x43\x08\x1b\x46\x59\x4d\xe1\x95\x84\x85\x93\xc6\x0b\x96\x09\x6e\xac\xf1\x14\x79\xeb\xe9\x8d\x70\x55\xe7\x99\xb5\x78\x5f\xb8\x49\x72\x37\xc3\x40\xe6\xa8\xd0\x5f\x74\xa4\xcc\x9d\x33\xf8\x26\xe6\xe1\x95\x13\x16\x5d\xe9\xaa\xb3\x89\xc9\x71\xe0\x30\x1c\x2a\x4c\x78\xa1\xb7\x3c\xbc\xd2\xc9\x12\x81\xb9\xd3\xea\x22\x87\x16\x59\x02\x2b\x28\x34\xae\xde\x11\x50\x17\x6e\x84\xc6\x6d\x82\xde\x36\x7b\xd8\xad\xd3\xed\x4a\xae\xf4\xcc\xda\xc5\x56\x8d\x10\x5c\xb7\xa9\x32\x09\x98\xcc\x66\x89\xc2\xd1\x46\x83\xaa\x80\x16\xb3\x77\xe6\xf1\x2c\xb2\x52\xad\x3a\x52\x99\x0c\x5d\x2a\x0c\x67\x57\x9c\xf2\x5e\x54\xf0\x34\xb5\xff\x86\x50\x52\x7c\x10\xc3\x20\x6e\xde\x44\x9d\x87\x1c\xff\x04\x09\x6f\x64\x1a\x1f\x19\x30\x9c\x78\x0e\xfd\x1d\xf3\xb4\x9c\x39\xdd\xb4\x72\x52\x1c\x3b\x41\x33\xcf\x6d\x64\x8d\x8f\x01\x6d\x9d\x97\x82\x67\xab\x2f\x10\xb8\xa3\xd8\x10\x41\x1e\x85\x2e\x6b\xc7\x0e\x89\xb2\x36\x58\xb1\x92\x3e\xc1\x70\xf0\x0d\x95\x48\xe2\xd7\x3c\x5b\x61\x1b\xec\x18\xb4\x8a\x78\xc6\x10\x14\xb4\xca\x69\x45\x97\x5d\xa1\xa4\x7b\xc7\xdd\x8a\x48\x11\x8e\x12\xc5\x88\xd4\x78\xc5\x5c\x12\x7f\x59\xc6\x60\x09\x2e\xd6\x18\x1b\xb1\xf3\xcd\x5f\x20\x18\x8e\x52\xe7\xc9\x57\x17\x3e\xbf\x14\xa3\xaa\x08\x5d\xaf\x59\x8f\xd4\x0c\xf5\x65\x2a\xc7\xe8\xdd\x2e\xde\x10\xa9\xe9\xfa\xd5\xcd\xf8\x0a\x8c\x19\x87\x52\x00\x3b\x34\x82\xe7\xb4\xd9\x55\x9e\x09\x63\x60\xc3\xc4\x87\x79\x26\x47\xd2\xda\xb6\x30\x64\x14\x0e\x71\xfe\x8b\x45\x5d\x5f\x8c\x3c\x55\x91\x93\x6a\xad\x63\xca\x6b\xf3\xf6\x7b\x75\x2f\x8d\x87\xf8\x05\xcf\xf2\x23\x0c\x2f\x87\x50\xb1\x93\x8c\x8e\x0a\x8e\x80\x3a\x6a\x1a\x82\x8e\x8c\xb1\x53\x55\xd8\x77\x7c\xa0\xa6\x70\x80\x0f\x6b\x72\xd9\xcb\x3a\x01\xdb\xcd\xca\x0c\x98\x98\x29\xe7\x42\x1b\x91\x0a\x0c\xf9\xd8\xf3\x1f\xb6\x83\x3e\x83\x7a\x04\xfa\x3e\x8b\x50\x0b\x88\x4f\xb4\xc0\xf3\xbe\xa0\x8b\x01\xf6\x96\xf8\x20\x46\x81\xa1\x03\x9f\xf5\xc4\x08\x25\x76\x96\xac\x0b\xe7\xe7\xff\x73\x9b\x5d\x3a\x5d\xc3\x58\x46\x18\xe9\xcb\xa9\x02\x5e\x59\xa0\x6a\x1d\x03\x55\x10\xab\x83\x93\xb6\x6f\x53\x84\x82\xcf\x84\x89\x74\x17\x63\xcd\x3d\xe8\x33\xc7\xe8\x47\x6c\x8d\x61\x4f\x6f\x68\xac\x11\x6f\x5f\xe2\x3d\x4a\x64\x82\x6a\xf1\x73\x29\x29\x30\x64\x25\xb7\x51\x51\x47\x66\xe8\x04\xc7\xf5\xc2\x95\xff\x4b\x85\x19\x69\x39\xa4\x7d\x70\x86\x85\x9c\xc8\x65\xa7\xab\xbb\x45\x6e\xcf\x88\xf9\xaf\x60\xf9\x44\xa7\xbf\xb4\xd9\x51\xa8\x71\xa7\xc6\xec\x2d\xd7\x96\x2a\x0b\x7f\xfa\xfd\x54\x87\x0b\x34\x4f\xc1\xa8\xb6\x56\x94\xbf\xfd\xb0\x85\x60\xa1\x04\x0f\x57\x12\xb6\x8b\xae\xbc\x09\x53\x6d\xda\xb9\x0a\x3e\x9a\xd6\x0c\xd0\xf8\x61\x59\x98\xea\xce\xb6\x18\x80\x0c\x2b\xf5\x50\x5f\x76\xfa\xbd\x3e\x51\xb7\x06\xf4\xe9\x75\x09\x2f\xe3\x63\xf1\x15\x7c\x2a\xf5\x49\x11\x1f\xe6\xda\xae\xd2\x2d\x05\x8a\x03\x8b\x34\x72\x7f\x26\x2b\x60\xc8\x09\x7a\xca\x91\x54\x04\x5c\xaa\x33\x56\x35\x66\x97\xbd\xcb\xe3\x6e\xc2\x4e\xcf\x4e\xf7\x62\x94\x4f\xb2\x8c\x6b\x55\xba\x8a\x18\xc2\x21\x96\x61\x43\x28\x5d\x31\x0e\x98\x89\xcc\xda\x63\x66\xae\x72\x03\xd5\xb5\xc6\x10\x6c\x41\xcb\xaf\x72\x58\xf8\x7c\xae\xd5\x5c\x4b\xab\x84\xc3\x62\xc7\xac\x04\x1f\x28\x1c\xbe\xb8\x44\x58\xcd\x85\x6f\x4c\x39\x03\x83\x84\x78\xb4\x34\xc0\xcd\x3d\xbc\x0e\xae\x25\x30\x72\x8a\xa1\x82\x93\x35\x0e\xa2\x2e\x9b\xab\x74\xf0\xfe\xda\x66\xc7\x01\x2f\xa7\xc6\xec\x58\xf2\xa1\xcc\x20\x42\xde\xb3\xb2\x96\x89\x1b\x7b\x72\xa1\x0c\x26\x0c\x92\x2b\x96\x81\xf7\xb2\x98\x0a\xa5\x17\xc1\x89\xe2\x22\x53\x85\xd2\x45\xec\x10\xc8\xc5\x24\x93\x13\x91\x8f\x44\x2b\xf1\xf1\xec\xa4\xe2\xa2\x75\x1e\x9d\x7b\x8f\x7a\x13\x15\x03\xc3\x52\x91\xc9\x21\xa8\x6e\x30\xb5\x89\x56\xc6\xb8\x48\x84\xfb\x60\xc1\xf8\xa8\x30\x10\xfe\x5e\x7d\x35\x90\x69\x56\x44\x86\xd2\x88\x8c\x63\x8c\x65\x12\x3e\x4b\x06\x3f\xec\x2a\x9f\xf1\x49\xd5\x29\x6f\x5f\x76\x01\xff\x10\xfa\x87\x56\x3b\xde\x6f\x26\xf3\x91\x4c\xad\xfa\x8a\x91\x01\xab\xad\xa0\x87\x56\xf2\xcc\x8d\x19\x95\x7c\xb3\xe4\x11\x9a\x71\x8d\xb1\x70\x2b\xb5\x9d\x6c\x36\x65\x56\xd4\x0d\x59\x20\x64\xe9\x79\x4b\x89\xbf\x91\x39\x6d\x63\xc4\x4c\x23\x77\x40\xf3\xce\x28\xb7\x9b\x93\x5d\x73\xa6\xf0\xa4\x4e\x94\x4a\x6f\x65\x16\xf9\x02\xaf\x99\x29\xd4\x7c\xce\x27\x80\xaa\x9c\xcd\x4b\x3b\xeb\x31\x97\x59\xa9\x51\xfe\xf0\xcc\xb5\xc9\x44\x80\x46\xbe\x12\xe4\x11\xaa\xe5\x05\x5a\xe0\x67\x85\x69\x25\x70\xfc\xac\x0e\x5e\xf7\xad\xe1\x10\xde\x29\xce\xd3\x1b\x09\xc1\xce\x31\xc1\x32\x8c\x91\x44\x00\x87\x5b\xa0\xd1\xe9\xe0\x7f\xdd\x66\x9d\x91\x95\x03\x96\x06\x8e\xdb\x42\x0d\xbc\x20\x98\xa3\xbb\xf0\x76\x6a\xf5\xf3\xea\x2d\xad\x45\xfe\xee\x0c\x9c\x39\x6d\x73\x34\x55\x0a\x9d\x9a\xe0\xb9\x8c\x23\xe7\xe0\x40\x65\x9c\x8d\x05\xf0\x90\x84\x71\x98\x1f\xcf\x47\x02\xd7\x30\x47\xaf\x26\xf1\xbb\x05\x1c\x38\x31\xcb\x65\xe1\x2e\xa1\x0f\xc2\x66\x6e\xe2\x4c\x0d\x33\xf2\x2e\x19\x07\x61\x25\xb4\x1e\x21\xa3\xed\x35\x21\xf3\x49\x9a\x38\x72\x23\xda\xec\x8d\xba\xb5\x96\x0e\x5a\x89\x9e\x58\x40\xcc\x68\xdc\xb0\x38\xc0\xa9\xe4\x59\x88\x68\x78\xbd\x9a\x42\x1b\xe0\x90\xa5\x5f\x5b\xce\x19\xf8\x26\xcc\x16\xb4\x9a\x10\x09\xf1\x0c\x3c\xf8\x7f\xa2\x03\x40\xee\x5d\x6b\x12\xc9\x31\xf2\x63\x7b\xc9\xf1\x8e\x03\x5d\xc6\x8e\x2e\xa9\x18\x8b\x3c\xc5\x17\xa6\x2a\x4b\x57\x78\xc0\xb9\x9e\x01\xef\x71\x1a\xb4\xa7\xa0\xbf\xc2\xa5\xd6\x21\xe6\x45\x3e\x60\x6e\x8c\xd0\xf6\xd2\x90\x4b\x34\x59\x76\x01\x0f\x17\xa4\x58\xf8\xd5\x40\x8d\xc4\x40\x4e\xaf\xaf\xdf\x46\x87\x30\xd2\x0e\xfd\x4c\xe8\xe0\x76\x4f\xb1\x94\xe7\x0a\x98\x1b\x3e\xb0\xb7\xb7\xc7\xba\xa0\xe2\x38\x14\x06\xe2\x0f\x00\x95\xf7\xbc\xfd\xcc\x33\x8e\xbd\xbd\xbd\x3d\x7c\xa5\x03\x66\x9b\x70\x2f\x59\xa3\x97\x62\xf5\x81\xe7\xc0\xb4\x11\x16\x62\xa7\xbd\xc0\x3d\x8c\x50\x30\x0e\x26\x1c\x65\x75\x7a\xb0\x33\x60\x22\x67\x43\x91\x22\x22\x02\x5c\x13\xb1\xcf\xd0\x5f\xd2\xca\x88\x0b\xf0\x1c\xa2\xbf\x33\x72\xbd\x20\x0a\xc9\x8d\xe6\xd1\xc9\xce\x73\x12\x0f\xeb\x74\x06\xb0\x50\x16\x01\x27\x5e\xb7\x4f\xd4\x38\x00\xee\xbe\x6c\xf2\x56\xc2\xbe\x6c\x0e\x5b\x70\x60\xbe\x6c\xa6\xad\xaa\x22\xe9\x64\x67\x2f\xf7\xfb\x94\xb8\x6a\x94\xe8\xa8\x07\xfe\x07\x20\x02\x8f\xa3\x81\x52\xd1\x6c\x89\x30\x64\x31\x79\x5c\x91\x8b\x6a\xae\x28\x93\xf9\xfa\xfc\xf8\xe6\x39\x6b\x42\xd8\x11\x3e\x92\xb2\x18\x39\x8f\x3e\xd9\x31\x08\x8b\x91\x2a\x35\x55\x55\x9e\xcd\x05\xdc\xf1\xf7\xa5\x96\x26\x45\xdc\xbc\x57\x4f\x9c\x0b\x09\x58\x26\x7a\xbd\x41\xf1\x03\x2d\xbc\x49\x14\x19\x0c\xf2\x2f\x5a\x09\x21\x1f\x88\xe1\xac\x78\x8c\x7d\xdd\x0a\x0c\xc8\xfd\xae\x4a\x37\x2c\x71\x36\xce\xe4\xa8\x30\x6c\xcd\x36\xf8\x95\x26\xde\x10\xd1\xa2\xd0\x0a\x5a\x3e\x0b\xef\xff\x98\x6b\x65\x85\x2c\xfd\x2e\x70\xd5\x54\x88\x99\x03\x1d\xc7\x1a\x06\xb9\xd0\xe8\xf0\xd0\xf4\x9a\x56\x39\x70\xb9\x66\xde\x4a\xb3\x02\x11\xd9\x4a\x4e\x81\x16\x2b\xaa\xb5\x20\x8c\x22\xfc\x09\x26\x6f\x99\x57\x5c\xf4\x9c\x76\x25\xaa\x01\x77\x77\x71\x2d\x65\xcd\x2d\xfa\x4f\x94\x96\xdd\x3b\xec\x9e\x42\x49\xdf\xa5\x94\xc3\x87\x24\xfa\xec\x0a\x00\xee\x0a\x00\xfe\x4b\x66\x78\xec\x0a\x00\x7e\x82\x02\x80\xc3\xac\x14\x72\x36\xdf\xff\x8e\xdf\xf0\xfe\x48\xcb\x79\xb1\x77\x72\xf4\x15\x3e\x1e\x7e\xc7\x4e\x8e\xbe\x62\x07\xed\x67\xed\x83\x3a\xd7\x7a\xfe\xec\xe0\x20\x61\x7d\x31\xe4\xa6\x90\x3c\x67\x97\x66\x34\xe5\xf1\xb7\xe8\x03\xed\x5c\xd8\x9b\x7f\xbc\xa2\x38\x74\xef\xd2\x09\xc3\x17\xf4\x1e\xa5\x00\xa8\xb9\xc8\x51\x5d\xa8\xa6\x01\x9c\xf4\x2e\xab\x39\x8b\xd0\xfd\x33\x9a\xad\x9c\xcd\x31\xd3\x3c\x8e\xa7\xb3\x8b\x7e\x87\x1d\xf1\x82\x5b\xe1\x50\x6a\xd0\x46\xa1\x55\xab\x5d\xdb\x89\x30\x86\x4f\xec\x7d\x3a\x92\x13\x61\x0a\xd6\xc9\x26\x4a\xcb\x62\x8a\x59\x17\x0e\xb6\x2f\x73\x76\xf1\xea\x90\x1d\x7c\xf1\xfc\xc0\x52\x35\xe4\x37\x3c\xaf\x95\x86\x3e\xe7\x65\xc6\xbe\x53\xd3\xdc\x14\x2a\x67\x07\x5f\x7f\xfd\x35\xdb\x83\xde\xf4\x76\xb7\x96\x58\xfa\x0b\xf6\x5a\x8b\x09\x7b\xa3\xb2\x22\x61\x9d\x3c\xd5\xe2\x96\x7d\x2f\xe6\xc2\x1a\x03\xef\xd2\x9c\xeb\x84\x1d\x2b\x53\x48\xa4\xe1\xd1\xca\x76\x4b\x51\x8f\x25\xcb\xa2\x84\x70\xc9\x14\x73\xfe\x7e\xaa\x66\x40\xc2\x76\x79\xbd\x3f\xd2\x8b\x79\xb1\x3f\x4b\xbf\x42\x98\xb4\x82\xec\xfb\xb1\xba\xf3\x90\xec\xcf\xb8\xbe\x4e\xd5\x6d\xbe\x27\x8b\xf8\xdf\x0f\x92\x69\x50\x23\xf2\x07\x59\xf0\x6c\xc1\xce\xcb\x5f\xb4\xcc\x13\xd6\xc9\xc4\x07\xf6\xbd\xb2\xe2\x49\xba\xa4\x9e\x9d\x44\xdb\x49\xb4\x9d\x44\xdb\x49\xb4\xa7\x4a\xb4\x8c\x93\xd6\x2d\x72\xb5\x9f\x6a\x35\xff\x05\xc3\xdd\x41\xea\xe0\x0f\xcd\x5a\xb2\xfd\xba\xda\x1f\xcf\xd9\x09\x2f\x24\x37\xec\x44\xe4\x8a\xcd\xfe\x6e\xff\xdd\x86\xf2\x4a\xc7\x6a\xa2\xd8\x1f\xd9\x5b\x31\x34\xb2\x10\xec\x08\x80\xa7\xa1\xac\xd2\x60\xd0\x38\xf8\xfa\xe0\xd9\x60\xd0\x60\x56\x8a\xdd\x0a\xae\x85\xfd\xc5\xc7\x29\x01\xb7\xeb\x0f\xb0\xeb\x0f\xb0\xeb\x0f\xf0\xaf\xda\x1f\xa0\x90\xf9\x62\x36\x12\xee\xbf\xf8\xdc\xeb\xd3\x2b\x76\xdc\xed\xf7\xbb\x17\xec\x75\xf7\xb4\x7b\xd1\x39\x66\xe7\x57\x2f\x8f\x7b\x87\x91\x1a\xb6\x32\x0b\xf7\x20\x61\xaf\xc4\x50\x43\x1a\xae\xd5\x49\x09\x2a\x51\x55\x5d\x0f\xbe\xfe\xfa\x20\x41\x95\xf5\x95\xe5\x44\xfe\xf2\x04\xcf\x04\x2a\xce\xf6\xd5\xaf\x0e\xd8\x2b\xcd\xf3\xeb\x4c\xe6\xac\x5f\x68\x21\x8a\x84\xbd\x92\xe3\x62\xca\x5e\x65\x4a\xe9\x84\xbd\x54\x56\x03\x4e\xd8\x49\x87\xb1\x67\xcf\x0f\x0e\x9e\xed\x1d\x7c\xf1\xec\x80\xb1\xab\x3e\xc4\xde\xba\x37\x42\x2f\x54\x8e\x09\x55\xbe\x81\x1a\xa4\xa7\xcd\x17\x75\xe8\x23\x24\x5f\x14\x72\x16\xea\xd1\x7a\xe6\x97\xf9\x90\x33\x32\x3b\x74\xf2\x00\x32\xcf\xde\x63\x09\x2e\xb7\x5c\x15\xf6\xd6\xa9\x5b\x0f\xc0\xfc\x11\xe2\xd5\xd2\xb5\xaf\xd1\x80\xd0\x83\x8e\x34\x69\x3d\xdf\xe6\x58\x18\x23\x34\x7b\x7d\x7e\xdc\x66\xac\x67\x07\x32\x0a\x41\xaf\x30\x11\x6a\x81\x63\xca\xd1\x48\x18\x48\xf7\x20\x4f\x97\xdd\x2b\x6a\x97\x53\x6d\x8d\x94\xf8\x2f\x3c\x4f\xd8\x54\xe4\xb0\xbb\xf0\x8e\xfb\x7d\x5e\xce\x86\x42\xdb\x7d\x6b\xff\x54\xcf\xcb\x3e\xd7\x82\xcf\x10\x9a\x0c\xbf\xbf\x0c\x3d\x70\x0c\x69\xf6\xa6\x88\x64\x82\x16\x94\x20\x41\x99\x6d\xfc\x5a\x30\x7e\xcb\x17\xe0\xe6\xb5\xea\xaf\x16\x22\x55\x00\xe8\x81\x64\x51\x17\xb1\xc8\x27\x82\xc9\xa2\xcd\xd8\x4b\x97\xaa\x6a\x10\x49\x0b\x2b\x7b\x0d\xe8\xaa\x8c\x56\x16\x24\x2d\xe6\xc8\x03\x32\x23\xc5\x0f\x4e\x4a\x0e\xf2\x4d\xa0\x5f\xf9\x8e\xcf\xd1\x64\xfc\xdc\xf7\xf6\x08\x20\xce\x4c\xa9\x11\x33\x60\x62\x7e\xae\x31\x9a\x02\xfc\x54\x16\x90\x77\xaf\x43\x16\xe2\x65\x74\x3a\x92\xca\x46\x56\xa6\x1e\xa5\x0f\x86\x5a\x2c\x46\x81\xb8\xa7\x58\x5f\xb6\x88\x53\x4c\xfc\x14\xe6\x7c\x74\xcd\x27\xc2\xec\xed\x15\x8b\xb9\x1c\xc1\x73\xbe\x08\xc0\xde\x9e\xc7\xe9\xae\xbb\x4b\x91\x97\x8f\x32\xc1\xac\xdc\x62\xa9\x18\xc9\x54\xb8\xd8\x1e\xec\x00\xc2\x6c\x5d\xc7\x2a\x69\xc5\x95\xc2\x73\x7e\x6b\x69\x33\x01\xbb\x75\xa1\x4a\x3a\xc8\xc5\x14\xdc\xd3\x5c\x8b\x71\x09\x58\xb5\xa1\x15\xd2\x14\xc6\x0d\xcd\xf9\x7c\x88\x11\x93\xcd\x52\xec\xf5\xb7\x9a\x3a\xee\xa6\x0c\x45\x51\xc0\x18\xa6\xd0\xbc\x10\x13\x1f\x83\x94\xb9\x47\x24\xca\x51\x99\x71\xcd\x46\x1c\x3c\xae\x2e\x4f\xd1\xbe\x2d\x3e\xcc\x33\x9e\x53\xc8\x0a\x92\x25\xfd\x6e\x41\x2b\x2d\xbb\x9a\xb9\xe0\x90\x1c\x57\x39\x09\x89\xfd\x93\xa5\x1e\xa6\xfb\x42\x18\x5d\xf9\xa3\x04\xc1\x76\xb0\xa6\x00\x85\xaa\xe5\x48\xb4\x19\x3b\x2b\xd7\x6d\xb5\x59\xba\x14\xf1\x21\xe3\xd6\xaa\xf3\xdd\xa7\x80\x3d\x84\x23\xbb\x12\x8e\x5d\x99\x2a\x22\x2f\x50\x83\xb3\x07\x5a\x69\x97\x03\x81\x78\x16\x0a\x26\xdc\x4a\x33\x6d\x7d\x83\x2e\x7a\xac\xf5\x00\x99\x3f\xd5\xa6\x5b\x1a\xba\x94\x4d\xc0\xf6\xb7\x8c\x8c\x5e\xe5\x79\xc1\x64\x11\xbd\x6c\x9f\xa2\x1b\x5b\xb9\x24\xae\xc1\xe5\x5c\x8a\x91\xab\xbd\x66\xc7\xc9\x59\x2e\x6e\x71\xda\x73\xad\x26\x9a\xcf\x10\x87\x1b\x46\xe4\xe4\x1c\xd0\x33\x91\x56\xbf\x93\x52\xf1\x1a\x88\x3b\xcb\x7c\x12\x5d\x38\x65\x47\x2b\xac\x3a\x05\x37\x1d\xd5\x40\xd8\xba\x5c\x44\x74\x8e\x94\x49\x8a\x51\x8c\x95\x1e\x42\x7d\x65\x4f\x5e\x7b\x19\x40\x29\xcd\x81\x4f\x31\xfc\x20\x29\x96\x0a\xb2\x42\xb8\xb9\xc6\x3f\x29\xbb\x73\x5a\x38\x7f\x08\x68\xfb\xf8\x64\x1b\xb8\xa3\xa9\x7f\x92\xf2\xa7\xe1\x8e\x8d\x08\x51\x5b\x89\x56\x4a\xe4\xa4\x74\x0e\x88\xec\xeb\x90\xf8\xbe\x27\x9a\xd2\xee\x51\xc2\x6c\xca\x50\xc4\x81\x6a\x4d\xcd\xe6\x99\x48\x1e\x3a\x60\xc8\x09\x9e\x68\x5e\x40\x04\x97\x52\xee\x20\x90\x1c\xf5\x9a\x03\x24\x3d\x68\xde\x01\x43\x0f\x29\x0a\x91\x32\x6e\xe9\x7c\x2b\xd8\x84\x43\x7b\xe7\x85\x2a\xdb\x2c\x80\xd3\xab\xe7\xdf\xbe\xb7\x48\x90\xc9\xb8\x73\x19\xce\x22\x1d\x31\xcc\xca\x87\x5a\x2f\x56\x2c\xe2\x92\x20\x2e\xe6\x02\x17\xa9\x08\x81\x20\xbf\xa4\xd0\x1f\x0f\x51\x48\x30\x84\x25\x4b\x21\x5c\x3e\xba\x07\xe4\x57\x57\x94\x30\xa3\xc2\xf4\x60\x36\x5a\xc0\x07\x8b\xa9\x98\xc5\xc1\x3f\xdf\xa4\x6e\x5c\x08\x5f\x0f\x00\xef\x87\x09\xf5\x21\xe9\x19\x80\x74\xf9\xd8\x27\x5c\x90\x36\x63\x1d\x2a\xc1\x02\x53\x35\x53\x75\x0b\x1f\xa1\x63\x88\x68\x3b\x98\x8d\x58\xb0\xeb\x1c\xff\x2a\xdd\x89\x0f\x3c\x4d\xac\xba\x10\x48\x14\xce\x8a\x5b\xb5\x67\x0a\x31\x67\x33\x51\x4c\x55\xfa\x82\x35\x0f\x5a\x76\x87\x82\x79\x81\xe2\xc3\x93\xce\x4e\xb5\xf9\x1c\x9e\xc1\xd4\x28\xbc\x18\xb1\x94\xc3\x84\x20\x7b\x1c\x0c\xee\x87\x98\x40\x1d\x81\x2a\x00\x0f\x0d\xb2\xe8\xf8\x91\xad\x15\x41\x8d\xe9\xa3\xab\xee\x36\x04\xd8\xa3\x8b\x0a\x17\x1c\x78\x92\xbb\xe0\xb2\xb0\x8a\xcc\x82\x8d\x32\xc1\xb5\xe3\xa8\x00\x97\x40\x5d\x2c\x84\xc3\x5d\xfe\x28\xb0\x22\xf7\x4d\xc6\x3a\x99\xb5\xcd\x64\xf5\x7a\xc1\x05\xf0\x59\x1b\xc3\x05\x08\x69\xab\x40\x8a\xcc\x20\xab\x9b\x73\x83\xc2\x26\xa9\x5f\x06\x33\x55\x65\x96\xc2\x56\xc1\x54\xec\x5d\xf0\x27\x09\xf8\x3c\x29\x89\xab\xf2\xae\x2b\x07\xcf\xff\x75\x30\xc8\x51\x6a\x0f\xfe\x04\xa9\xbd\x25\x19\xc0\xb7\x92\x32\xd4\x87\x82\xf1\xf1\x58\x8c\x08\x81\x3e\xd7\x6a\x98\xf9\x5c\xdb\x19\x6c\x30\x39\xbd\x0a\xcc\xf7\x81\xc7\xe0\xf2\x84\x23\xf4\x4a\x02\xb8\x35\x89\xb5\x0e\xc0\x9a\x33\xc8\xb7\xe5\x88\x8f\x06\xe2\x4f\xb5\xe0\xde\x90\x15\x1f\x00\xff\x01\xf0\x12\x68\xa1\xbb\xa8\xb0\xfb\x36\x1c\xce\x5b\xe8\xf4\x58\x97\x7e\xae\x9f\x64\xbe\x20\x18\xf6\x60\x90\x0b\x58\x08\x06\x64\x1d\x2f\x75\x90\x24\x8d\x00\xa7\xca\xf8\xb0\x92\xe0\xae\x88\xdd\xa4\x37\x01\x97\x0a\x78\x71\xee\xa2\xd3\x53\x95\xa5\x42\x23\xcb\xd6\x62\xac\x48\xea\x4b\x80\xb2\xb8\x53\xb4\x9c\xc3\x45\xdf\x21\xa0\x27\xaf\x2b\xef\xee\xf4\xc0\x45\x1e\x52\x98\xba\x06\x8e\x11\xcc\xea\x49\x35\x75\x02\x81\x5e\x70\xd6\x1c\xb4\x39\xab\xe1\xcc\x4f\xac\xa2\x6d\x95\xe1\xa0\xa6\x04\xdf\x88\x3d\x9d\x41\x1d\x4c\x30\x9d\xf9\x46\x68\x9f\x8f\x00\xec\xdc\x29\x5d\x4b\x1a\x75\x40\xea\xac\x50\x64\xc1\xb4\x00\x65\xd6\xda\x84\xf7\xab\xb3\x4e\xc8\x45\x5a\x6c\x34\x33\x8c\xba\x4b\xc3\x7e\x2e\x65\x21\x22\x68\xbb\xc7\xf3\xdf\xa3\x1c\xe2\x69\x2a\x41\xf0\x56\x74\x4b\xbb\x23\xee\xdb\xa1\x3c\x16\x54\xdb\x48\x31\xb5\x93\x5c\x37\x96\x8d\xfb\x14\x18\xcf\xf3\xf0\xe1\x42\x41\x4a\x6a\x45\x5b\xa9\xaa\x8d\xdc\x1f\x3b\xf8\x76\x7e\xed\x70\x93\x7c\x59\x94\x42\x0e\x17\xea\xea\x00\xcb\x77\xb5\x0e\xc1\x16\x49\xc3\xf3\x88\x5e\xa8\x67\x66\x5a\xa6\x0d\x1f\xb1\x7c\x35\x5b\xa0\xb6\xea\x8e\xf8\xc8\x41\x37\xb0\xa0\x07\xc7\xb2\x1c\x08\x19\xa3\xd7\x3d\x6b\x09\xbc\xee\x32\xa2\xef\xda\xdd\x44\xb0\x99\xbd\x13\x44\x31\xe3\x12\x0c\x91\x6e\x0e\x2a\x85\xc7\x0a\x31\x0d\x95\xe9\x8f\xed\x2b\xf6\xff\x8f\xb4\x84\x06\xda\x4e\x6f\x4d\xd5\x8c\x26\x51\xb5\x8e\x06\x83\xbc\x36\x05\xf7\x61\x08\x1c\x65\xfc\x43\x18\x6a\x4c\x88\x18\x98\x49\x55\xf8\x13\x00\xa3\x2e\x4e\xde\x0a\x36\x42\x05\x25\x3a\x2d\xe4\x99\x74\x07\xbb\xb1\xce\x14\x19\x0a\xcc\xe2\x83\x28\x14\x20\xcd\xed\x2b\x70\x9a\x48\x44\x39\xce\x64\x59\xb3\x57\xde\xa7\x54\x82\xa6\x7e\x98\x97\x56\x1a\x59\xf9\x1e\x2a\x8d\xcb\xaa\x2a\xfa\xa9\xb8\x11\x99\x9a\x5b\x06\x68\x27\x80\xd8\x28\x48\x91\xb9\xe1\x79\xc1\x27\x82\xd9\xfb\x4e\x38\x1d\x40\xcb\x2e\x1d\x63\xa7\x9f\xa6\xd2\xf8\xb7\x0c\x15\xb4\x46\x11\x06\xfd\x1f\x6f\x85\x07\xcd\xdf\x67\xa7\x61\x05\x24\x80\x13\xfb\x4b\xd4\x66\x01\xee\x17\xd9\xc1\x8e\xee\x7e\x91\x61\x0a\xf6\x8e\xd2\xc5\x0d\x66\x30\x1b\x49\x3d\x2a\x67\x06\x60\x8b\x66\xb5\x6a\xab\x72\xa6\xed\xe4\xd5\x68\xc4\xa9\xb2\x0c\x0a\xfe\x19\x5f\x80\x44\x74\xf8\x59\x67\x12\xc0\x71\x1d\xa9\x52\x73\x32\x5e\x6e\xed\x54\x0a\x42\x79\x66\x04\x7a\xb5\xf2\xa5\xca\x48\x16\x41\x2a\x4b\xcb\xd8\x47\x6a\x86\x94\x63\xa9\xd8\x1b\xf3\x91\xb5\x0a\x0a\x9e\xa7\x5c\xa7\x6d\x50\x5f\xf8\x68\x2a\x05\xa8\xc9\xd2\x24\xcb\x5b\x11\x09\x08\x72\x14\xc5\xa9\x0a\x91\x6a\x82\xe7\x7f\xac\x11\xe6\x0b\x56\x2e\x1a\xc7\x20\x39\xed\x98\x41\x67\xc3\x3c\x08\xd0\x97\xf9\x4c\xb0\xf7\x6a\xc8\xb8\x81\x15\x66\x0b\xac\x12\xe8\xe7\x11\x6f\x56\x2f\x77\x88\x4d\xb4\xa1\xbd\xea\x94\xc9\xa2\x40\xd8\xf2\xc4\x52\x62\xb8\x40\xcf\xbb\x43\x95\xc7\x5a\x94\xb3\x8f\x63\x00\x9a\xe5\x12\x40\xb6\xe8\x3c\xdd\xe9\x13\xf1\x7b\xdc\xcb\xdd\xc5\xe6\xc6\x8a\x8c\xe5\x84\x0e\x1e\x9b\xfe\x5e\x65\xcb\xfd\x02\x11\xd7\x85\xa4\x16\x90\x89\x61\x18\x67\x13\xab\xb3\x08\xed\xfc\x5d\x80\x6c\x57\xf3\x4c\x84\x51\x33\x40\xce\x0e\x55\x4a\x05\xd3\x2b\x57\xb0\x5d\x3b\x7d\xab\xf3\x4c\xac\xb4\x3c\xf4\xae\x38\x38\xd1\xcb\xdb\xef\xe6\x34\xc3\xdc\x60\x60\xb4\xf1\x4c\xe0\x68\x4e\x55\x06\xc3\xd9\xab\x3e\x17\x1a\xb3\x81\xb1\x86\x0a\x80\x05\x6e\x45\x96\x41\x15\xaa\xc2\xb0\x1b\xae\x25\xcf\x83\xc7\x6c\xff\x58\xe6\xe5\x07\xe6\xdf\xb3\x1b\x03\x6f\x7a\x22\x77\xb2\x62\x0a\xc5\x00\xef\xdd\x17\x7b\x16\x80\xe7\x11\xc3\x0b\x12\x06\xeb\xb5\x6b\x33\xf8\x93\x63\x7c\x89\xbd\x1f\x70\x0e\x45\x5e\xb1\xf0\x80\x43\xe2\xd5\x72\xe2\x93\x10\x8a\x70\x80\x83\x14\x45\x04\x1d\x52\x6f\xea\x1a\x7e\x13\x57\x45\xa7\x81\xc0\xcc\x49\xfb\x34\xcf\xa0\x1e\x47\x99\x3b\x3d\xdb\x8d\x8d\xe9\x10\x3c\xe4\x5d\xd7\xbd\xac\x75\x8b\x03\xab\xbb\x41\xc6\xc3\xda\x02\x8c\xd6\x92\x01\xb8\x7f\xb5\xda\x22\x28\x34\x71\x1e\x1d\x05\x76\xda\x8c\x9d\x73\x6b\x97\x80\xee\x5c\x50\xf6\x98\xd3\x99\x9d\xe2\x03\x5d\x03\x8a\x5b\x80\x9e\x63\x15\x63\x40\xc4\x57\x3c\x59\x74\xc2\xad\x94\x82\xa0\x1b\x73\x4f\xc1\x9a\x4b\xe3\x7b\xdb\xbb\xc7\x90\xd5\xa3\x43\x68\x46\x20\x10\x2e\x73\x43\xe5\x50\xa3\x02\x5e\x4b\x2e\x00\x2b\x04\xf0\x97\x76\xca\xda\xa5\x27\x0f\x9d\x84\x8f\xf7\x29\xba\x79\x5e\xc7\xd2\x65\xde\x8e\x9d\xc8\x0f\x0c\x22\xac\x2d\xb6\x79\x78\x76\xfe\xae\x77\xfa\x3a\xa9\x94\xd7\x84\x07\x4f\xce\x8e\x7a\xaf\x7a\x87\x9d\x50\x6f\x93\xb1\x67\xb5\xd4\xb0\x8e\x4f\x46\xab\xf5\xf1\xf7\x6c\x2a\xf2\xa7\x28\xf2\x58\xba\x43\x84\xf6\xad\xa7\x1d\x77\x61\x36\x48\x60\x4e\x97\x4b\xfe\xa0\x4d\x81\xa9\x47\xb1\xa7\x15\x4a\x4b\x61\x66\xaf\xe1\x0b\x8a\x13\x90\x88\x4a\x57\x82\x6c\x5c\x86\x9d\x53\x71\xef\xbe\x9f\x4d\x8c\x11\x70\x28\x62\x39\x18\x34\xe2\xa4\x8e\xc1\xa0\x01\x25\xe2\xba\x3c\x54\x25\x81\x1b\xcd\xd3\x54\x0b\xb0\x60\xb1\x46\x11\x40\xa4\x1b\x81\x3d\xd8\xdf\x45\xe7\x8e\xca\x55\xb1\x91\xca\xb2\x00\xc9\xf5\x54\x74\xf9\x19\x3e\x37\x20\xe5\x05\x07\x52\x42\x7d\x9c\xd4\xca\x01\x0e\xc4\xc7\x2c\xdb\x1b\x91\x4b\xac\x2c\x54\xd1\xa0\x31\x47\x07\x46\x77\xbc\x72\x30\xc8\x9b\xb8\x11\x60\x26\x59\x3b\x07\xee\xb0\xbd\x54\x95\xaf\xc2\x27\xa1\xb4\x1a\x00\xb6\x31\xdf\x10\xd8\x6c\xe5\x96\x43\x7d\x53\xb7\xac\x04\xfd\xc2\x09\x7a\x7a\xc3\xe1\x40\x00\xf9\xf2\x09\xa1\x22\x7d\xae\xb8\x2e\xa5\x8c\xac\xdc\x43\xc7\x48\xda\x44\xcb\xa5\x5b\x0d\x51\x8c\x1a\x7d\x29\x89\x2d\xe6\x81\x94\x46\x10\x69\xf7\x30\x12\x7c\x87\x10\x3d\x54\xa0\x88\xdf\xbe\xf0\xa8\x6f\xab\x90\xf0\x85\x35\x0b\x6e\xa9\x9c\x89\x33\x8f\xeb\x63\xdb\x4d\xc2\x38\x30\x56\x35\xf0\x99\x74\x3e\x0a\x46\x15\x3c\x96\xd3\x96\xf7\xa3\xf2\x90\x80\x56\x36\x85\xe6\x76\x2e\x63\xa5\x6f\xb9\x4e\x01\xf9\x0c\x24\xa5\x64\x12\x9e\x4f\x4a\x3e\xb1\x82\xb4\xf9\x06\xb2\x4d\xc1\x67\x96\x54\x6a\x4c\x82\x40\xf0\xf1\xeb\x15\x31\x7f\x19\xca\xe4\x5a\xba\xc6\xb3\xb2\x07\xb8\xe5\x36\xdb\x57\xf3\x04\xa6\x47\x45\x31\x1d\x41\x90\xdc\xc5\x72\x4d\x4f\x92\x0f\xf0\x10\x3a\x65\x57\x55\xf8\x84\xdc\x90\x82\x14\x82\xc8\xee\xf3\xce\xc5\xd8\xb1\x0e\xdf\x42\x4d\x2f\xf2\x66\xe2\xdf\x5c\x40\xc9\x55\x82\x96\x85\xe7\x37\x09\x9b\x67\x25\x56\x88\x0b\x28\x0b\xf4\xe0\x60\xd1\xc0\xa8\xc6\x1c\x7a\x31\xe9\x0d\xf8\x06\x00\x14\xa9\x38\x34\x38\xe1\xb0\x46\x1b\xba\x1e\x1d\x16\x0d\x8b\xaf\x98\x82\x67\x59\xc5\xee\xac\x1b\x50\x1d\x2b\xf4\xd1\x51\xad\xe8\x80\xf2\x7c\xbd\x38\xac\xd0\x0a\xab\x16\x81\x5f\xa7\xe2\x91\x88\x0b\xa8\x80\x63\x0c\x74\xc6\xb2\x30\x32\x15\xa0\xd2\x98\x91\x9a\x0b\xb2\x16\x21\x1f\xc8\x72\x43\x5d\xe6\x84\x49\xa9\x4a\xfa\xf8\x54\x93\x73\xcd\xf9\x80\x04\xe5\xeb\xa8\xb2\x98\x97\xe8\x66\x80\x16\x2e\xa3\x69\xd5\x94\x77\xb3\x73\xd6\xad\xc4\xd4\x26\xf4\x7f\x85\x7a\x40\xee\x04\xc1\x55\xb6\x8c\x3e\xaf\x7c\xbc\x29\xf3\x54\xcc\x45\x9e\x46\x59\xba\xa5\xaf\x33\x1e\xe9\x85\x8c\xb3\x42\xa9\x8c\x0e\x99\x2b\x23\x27\x8b\x56\x1b\xfc\x0c\x8e\xcc\x78\x9b\x75\x69\x77\xdb\x0e\x6b\x2c\xf7\x70\xde\x44\x3f\x9c\xd5\xb8\x68\x3f\xfd\xdf\x2a\x6a\x96\xd7\x11\xe2\x37\xfc\xfe\x1e\x84\x22\x0f\x0f\x88\x87\xd7\xd6\x62\x62\xa7\x7a\x7c\xb6\xb9\xa9\xc4\x9a\x64\x91\xd4\x0b\x04\x55\xca\xfb\x50\xfc\xa3\x5a\x85\x0f\xd4\x9d\x90\xed\x9a\x2d\x1c\x94\x07\xca\x13\x72\x10\xcf\x30\x61\xbb\xfa\xf0\xdc\x6a\xd4\x4c\x5a\x49\x8c\x76\x6e\xe1\x6f\xd8\xb5\x10\x73\xcb\xa9\x38\x54\x79\x72\xd7\xb4\x52\x1a\x05\x98\x04\xaa\x6e\x91\x76\x41\x88\x20\x4c\xa6\x37\xe4\x00\xa5\xf4\xda\x30\x7c\x8d\x9a\xab\xab\x08\xd5\xea\x8f\x04\xe1\xe0\x37\x29\x24\xfe\x55\xd3\xfb\x70\xb3\xa7\x0b\x23\x47\x3c\xa3\x9b\xe2\x4b\x94\xe9\x00\xe0\x4a\xe8\x80\xb8\x64\x18\x4e\x71\x02\x35\xa7\xab\x6f\x57\xe8\x7d\xe5\x4e\xd7\x47\x86\x2b\x3e\x50\xc0\x6f\x4c\x22\x63\x2c\x82\xb9\xf6\x3c\x9c\x1e\xf2\xe9\x53\x86\xd7\x7c\x81\x59\xaa\x2b\x0e\x8d\x13\x6b\x24\x7a\xd0\x9b\x21\xc1\x7e\x29\x41\xd9\x9e\xe1\xc4\x97\x75\xe1\xe3\x38\x40\xe1\x4e\x6b\xa5\xdd\x06\x8a\xef\xa5\x52\xa5\x41\x6c\x56\x54\x2c\x9f\x61\x74\x60\xe9\x83\x25\x11\xaa\x65\xa7\x20\x42\x69\x35\x2c\x28\x3b\x65\x8f\x07\xae\xc5\x88\x95\x55\xa7\x18\x6f\x01\xcf\xf2\xa6\x07\x0a\x1c\x6b\xf0\xcb\xc2\x88\x6c\x4c\x9e\x89\x9a\x7a\x11\x29\xcd\xcb\x25\xa4\x0a\x57\xf2\x29\x8c\x7a\x6f\x09\xa9\x4a\xfd\xa8\xc5\xaa\xfa\x51\xde\x9e\x82\x1a\x62\x21\x6f\x38\x9f\x44\xd5\x4d\xd8\x68\xe5\x6c\xd0\x3a\x8d\xa5\x25\xea\x76\x3e\xdd\x8c\xdb\xf9\xb8\x21\xf0\xc8\x52\xdb\x19\xa8\x74\x83\x06\xbc\x30\xab\x76\x64\x75\x75\x6e\x86\xd5\x9a\x38\x1b\xf3\x11\xa6\xa4\x92\x26\xe0\x49\xe2\xce\x56\xa4\xcc\x79\x15\xd1\xe9\x3a\x50\x18\x06\xd2\xb1\xd5\x18\x34\x46\x9a\xb7\x29\xc1\x3e\x48\xa9\x5c\xec\x0a\x4d\x34\x30\x52\x37\x8c\xa5\x23\xcd\x25\x89\x05\x23\xd5\xae\xd1\x13\x80\x08\xb9\x40\xd1\xed\x54\xe4\x95\x77\x68\x18\x28\x82\x7b\xa3\xae\xad\x9c\x82\xca\x51\x8b\x4a\x9c\x94\x43\xc2\x34\x1b\x73\xcb\x19\xc4\x78\xac\x34\x84\x5d\x22\xf3\xda\x95\x25\x22\x72\xb8\x34\xfb\xca\x1a\x7c\x89\x0c\x58\x27\x69\xb8\x11\x6d\x62\xca\x24\x95\x59\x32\x53\x48\x7b\xe4\xc1\x93\x40\x0e\x7c\x57\xb9\xd2\x80\xb4\x81\x1a\x46\xd5\xf2\x5b\x56\x76\xba\x2a\xad\x58\x28\xd9\x80\x1a\x24\xf3\xc9\xb8\xcc\xa2\x3d\x6d\x56\x3c\x2a\xd1\x76\x61\x65\xbf\xe0\x5d\xa2\xbc\x70\x66\x7e\x2e\x01\x99\xa1\x54\x61\xac\x06\xee\xee\x9c\xff\x9c\x93\x99\xe8\x96\xce\x16\xe0\x26\xd9\x0b\x89\x15\x75\xe9\xec\x06\x08\xc4\xaa\x06\x85\xfa\xe5\x90\x0a\x4a\xb2\xe7\xa9\xab\x28\xe0\x3c\x70\xae\x90\x42\xfc\xfa\x9e\x3f\x4a\xf1\xd9\xc3\x33\x57\xe9\xd5\xe1\xff\x1c\x55\x00\x1b\x0a\xe2\xc7\x3c\x7b\xe1\x42\x92\x77\xed\xa3\x24\x97\x0f\x92\x85\x06\xb1\xc4\xa9\x8e\x4e\x9b\xb8\x8a\x88\x4e\x61\x76\xd0\x05\x58\x1f\x76\x4f\xe4\xf0\x09\x12\x70\x55\x76\x16\x2a\x00\x41\x38\xde\xaa\xa5\x96\xa6\x72\x8c\xa5\x0e\x8c\x4b\x81\x05\x1a\xf3\x82\x5e\x42\x4d\x70\xd9\xff\xe0\x78\x3a\x49\xa8\x11\xcf\x2d\x21\x7c\x19\x95\x05\xa6\x98\xa7\xa0\x9e\xc5\x3b\x08\xe5\x50\x5d\xfd\x99\x5b\xaa\x83\x8a\x41\x80\x99\x11\x19\x94\x3d\x2e\xf0\xda\xc5\xd5\x73\x40\xed\x2d\x0c\x32\x9c\xc4\x95\xbe\x8a\x56\x8b\x61\x21\xbf\x88\x5b\x77\x2b\xab\x75\x59\x67\x50\x7b\xb4\xf2\xf9\x36\x63\x2f\x11\xfc\x94\x53\xce\x71\xf5\x15\xf4\xcc\xfa\x81\xa3\x92\x66\x44\x4d\xf2\x39\x48\x73\xb7\x9a\x99\x90\x0b\x69\xb9\xa0\x12\x8e\x42\xee\x65\x27\x33\x97\xdc\x09\x21\x82\xaf\x5c\xac\x85\xea\x7b\x8c\xa3\xd4\x7f\x74\x16\x18\xe8\x41\xe3\x35\x9d\x10\xf1\xf1\xd5\xd7\x53\x94\xda\x96\x2b\x59\x8d\x0c\x6a\xc1\x40\x48\x1e\x16\x87\xc5\x7d\x32\xaa\x53\x72\x3b\x55\xec\xd6\xea\x16\x88\x7d\x70\x67\xaf\x34\x49\x04\x9e\x2c\xa8\x36\x7a\x1e\x6a\x54\xb8\x3b\x68\x59\x01\x94\xfe\x0c\xe8\x1c\x50\xd2\x0d\xe9\x8f\x3a\xc2\x83\x03\x01\x5d\xf9\x6c\xcf\x0f\x86\xa0\x9f\x7c\xc3\x34\xb7\xcb\x4c\xe2\x8f\x49\x6a\x42\xe9\x8b\x9f\x78\x48\x4b\x6c\x43\xad\x22\x7d\x1c\x7c\x43\xb3\x1c\xdd\x24\x37\xee\x5c\xae\xd2\x61\x56\x65\x7f\xcf\x84\x16\x8c\x4f\x26\x96\x6a\x6e\x70\x67\x3f\xc3\x7a\x20\xd8\xbf\x62\xb0\x18\x92\xe2\x8d\x11\x67\xba\xdf\xa1\x48\x61\x15\x1e\x68\x69\x37\x73\xf1\x7b\x66\x0a\x05\x21\x92\x7a\xd5\x30\x54\xdc\x03\x17\x1a\x6a\x67\x7c\x45\x33\x74\xae\x09\xb4\x43\xd5\x5c\xac\x95\xe9\x5f\x04\xcd\x51\xcd\x81\xc6\x74\x09\xab\xda\x40\x1c\x87\xba\x03\x0c\x0a\xa6\xac\xe0\xe9\x92\x6a\x0d\x8a\xc0\x44\xde\x88\xbc\x52\x4b\xf1\x38\x44\x45\x95\x03\x9a\x49\x13\x81\x86\x78\x06\xe5\x53\x1e\x6c\x0f\x24\xcc\x28\xe7\x88\x06\x93\x36\x7a\xea\xce\x35\xac\x82\xea\x82\xa5\x1f\xd6\x53\xfd\x52\x9b\xb1\x26\xe8\x42\xb9\xb8\x45\x57\x8d\xa1\x4a\xe6\x79\x18\x22\x08\xb8\x07\x7c\x1a\xbc\x59\x58\x66\xb0\xa2\x88\x58\x5e\x8c\xd8\x84\x85\x5b\x9a\xfb\x80\x9b\x5e\x84\x31\x6c\xb7\x18\x3b\xa2\x4a\x82\xa0\xbc\xf8\x7a\x1b\x0e\xe2\x9b\x7b\x3c\x1f\xd1\xd3\x1f\x86\xb3\x7c\x84\xf1\x32\xff\x2c\x35\x54\x04\x55\x20\x6c\x9f\x63\x14\x50\x11\xda\x4e\x85\x4a\x25\xb9\xe9\xe1\x33\xe6\xc1\x44\xaf\x75\x45\xc4\xf6\xae\xc6\x05\xdc\xd0\x78\x01\x13\xae\xea\x81\xa3\xc9\x91\x0c\xa3\xef\x56\xe1\xc0\x64\x59\x49\x70\xc3\x8c\xcb\x2c\x08\x12\x87\x85\x81\xe3\x18\x57\xb5\x44\x24\x66\xa8\x24\xe0\xbc\x05\x70\x84\x6b\x81\x13\x94\x5a\x4b\xf6\xc3\x97\x77\x1b\xf3\x75\xfe\xc0\x99\x77\xff\x59\x12\x56\x51\x04\x56\xbd\x40\x05\xdd\x59\x49\xcf\x5b\xe0\xed\x0f\xbd\x5c\xa0\x05\x94\xf7\xb5\x82\xe9\x36\x18\xe4\xeb\xed\x2c\xc3\x0e\x60\x4a\xcf\x29\xbf\x65\x85\xad\x35\x22\x44\x10\xe2\x47\xa3\xf2\x0e\xe4\x64\x18\x29\x8d\x00\x4a\x80\xbe\xcc\xf8\x68\x2a\x73\xb1\xe7\xeb\xa5\x56\x2a\x7f\x80\x3c\x1d\x0c\x72\x27\x11\xef\xf6\xb7\xaf\x9b\xa4\xc2\xe0\x0c\xb1\x3f\x57\xd0\x4d\xba\xb8\x2a\xf4\xab\x0b\x3d\xa6\x0b\xa1\x6b\x56\x54\x6f\xbc\x24\x31\x62\x12\xca\xd0\x3a\x14\xcc\x70\xb0\x7d\x01\xe0\xef\x0e\x09\xc4\x22\x01\xbf\x14\xa1\x6a\x20\x0e\x41\x77\xd5\xbf\x67\x15\xb8\x1b\x9e\x61\xd1\xaa\x78\x08\xe2\x05\x15\xef\xa3\x53\xc0\x40\x2d\x81\xe1\x98\xe1\x85\x34\x63\x49\xee\xa2\x48\x1f\x44\xd1\x58\xd7\x67\x62\x5a\x43\x85\x25\x1f\x55\x8c\x8d\xbc\xd8\x07\x38\x9b\x0b\x08\x54\x44\xd3\x72\xc3\xd4\x6a\xb0\x46\x24\xf2\x94\xfc\xaa\xcd\x3a\xd5\x8b\xe0\xe3\x33\xb9\xaa\x61\x60\x22\x07\x43\xe0\x85\x5e\x83\x1a\x96\x05\xb6\x0d\x0c\xc0\x6c\x54\x18\xea\x52\x74\xb8\x60\x43\x41\x6d\x23\xa8\x95\x91\xae\x05\x2d\xc1\xb7\x65\x5c\x08\x66\x5d\x7c\xee\x38\x8e\xcf\xf5\xc1\x01\x69\xa5\x36\xe0\x77\xa4\xe5\x13\x2a\x73\x85\x69\xdd\xe5\xae\xbb\xfd\xab\xa2\xcb\xa1\xa9\x02\x5e\x67\xcc\xb3\xcc\x78\x37\xea\xfd\x12\xd8\x23\x35\x1c\xa2\xe6\xfe\xb9\x2f\x11\xc8\xee\x2a\x44\xd6\xa9\xf6\x8f\xe7\x05\x8e\x4f\xad\xc2\x26\x79\x16\x54\xc1\xd7\xf8\xbd\xac\xa7\xa6\x39\x65\x25\x21\xb5\x8d\x0c\xed\xd5\x93\x0d\x90\x08\x1f\x0a\x8d\xa7\x25\x4d\x04\x70\x5a\xe3\x93\x6e\x43\x6e\x3b\xb2\xbc\x3f\x63\x85\x50\xb2\x17\xb0\x7e\x5b\xed\x32\x63\x21\xa1\x15\x11\x27\x42\x8c\xdd\x4b\x53\xf8\xdd\x8c\x03\xc2\x29\x73\x50\xc5\xa9\xe0\x96\x41\x8d\x65\x26\x9c\x70\x93\xd5\x22\xc8\x15\x73\x20\xe6\x28\xce\x2f\x88\xbe\x27\x42\xc3\x54\xd9\xfb\x8a\xf3\x54\xbb\xc1\x55\x77\x2e\x9e\x49\xbb\xb2\xe0\x9e\xa6\xa4\x26\x5d\xc2\x9f\x45\xc8\x60\xb1\x77\x0a\xdc\x6f\x79\xe1\xcc\x58\x0c\x44\x81\x69\x57\xbd\x3d\xaa\x2c\xaa\x8b\x41\x68\xbb\x7f\x47\x1a\xe7\x38\xe3\x55\x24\x1b\x10\x45\x0b\x03\x95\xb8\x7c\xea\x03\xfa\x73\xdc\x9c\x30\x47\x03\x02\xfb\x90\x58\xe3\xdb\x22\x66\xfc\x36\x66\xcf\x18\x0f\xc8\x63\x54\x38\x6e\x0a\x84\x03\xf2\x72\x26\x34\xf8\x57\xad\xb5\x37\x13\x85\xd0\xd6\x70\xc4\x18\xa7\x29\x74\x39\x2a\x4a\xc0\xa9\x2d\xec\xd5\x43\xaf\x35\x25\x68\x91\xc7\xc4\xcc\x20\xcc\xc3\x47\x5a\x99\xe8\x17\xd2\x12\x02\x02\xf5\x3e\x94\xd9\xb4\xd6\x4a\x06\x25\x95\x94\x66\x60\x37\xc9\x9c\x65\x22\x9f\x14\xd3\x96\xb7\x67\x2b\x51\x05\xe5\x1a\x77\xc1\xb4\xad\xbe\x91\xc7\xd1\x8f\xba\x05\x46\x05\x16\x8b\x18\x5b\x18\xdf\x51\x62\x4a\x56\xc9\xec\x86\x33\x5d\x0d\x22\x5a\xf5\x26\x3a\x6f\x10\x78\xaa\x5d\xda\xc0\x6c\x11\xa6\x8c\x3e\x08\xcb\xa1\x6a\x3a\xc5\x9f\x43\xd0\xee\x2c\x34\x25\xac\x1d\x81\x3b\x98\x88\x2f\xf0\xb4\x2c\x9f\xd6\xde\x89\x3b\x1c\xc1\x7f\xb6\xe7\xa2\x93\x2f\xe2\x0b\x5d\x5d\xbc\x77\x68\x64\x46\xad\x5c\x50\x02\x41\x62\xa4\xb3\xd2\xce\xa6\xc5\x18\x17\x9d\x7c\xac\xf0\xe8\x2a\x40\x55\xb4\x3d\x38\xec\xfe\x70\xfe\xb9\xcd\x6a\x55\xd5\x9c\x45\xe1\x95\x15\x72\x5b\x7b\xcf\x3e\xa6\x0c\xba\xfa\x61\x74\xdb\x9e\xc2\xda\x09\xe6\x88\xfd\x21\xe8\x58\xc4\xa4\x58\xc3\xa6\x57\x74\xb1\x21\x92\x05\xd5\xd0\x51\x1d\x63\x05\x53\x25\x47\x4b\x8e\xf7\xb0\x3b\x88\x06\xad\xc3\x6c\x6a\xb1\x5a\x54\x12\x41\x37\x43\x30\xa6\xba\xc5\x14\x36\xcc\xba\xb0\xb6\x02\x7a\x2f\x26\x32\x17\xa8\x2c\x61\x85\xd5\x61\x39\x99\xf8\x7a\x84\x95\xb8\x41\x35\xf8\xe2\x93\x5f\xea\x2e\x77\xa4\x5b\x08\x47\x55\xdc\xe2\xb4\x92\xe8\x36\x48\x8a\xcb\x5a\x99\x5f\x84\x4c\xa8\x98\xee\xce\x45\x05\xd3\xaf\x88\xa9\x9a\x0f\x27\xce\xab\x21\x9f\xe0\xea\x00\x13\xa6\xcd\x14\xa1\xd3\x60\x5a\xa2\xbe\x08\x87\x1c\x7c\x8b\x58\xca\xde\x2c\x05\xcf\x62\x9b\xd8\xf5\x27\xc0\x15\x2d\x85\xd9\xdc\x36\xf8\x75\xcc\x14\x3a\x08\xaa\x90\x35\x8e\xa6\x31\x25\xa3\x52\x37\x53\xf2\x24\x00\x50\x8c\x4e\xf8\x9a\x85\x60\xc6\x86\x9f\x53\xaa\xa8\xe3\x80\x8f\xcb\x60\xae\x58\x35\x26\xd3\x71\x66\x45\xd8\x9b\x7b\x4c\x0b\x7a\xf7\x2e\x03\x63\x69\xc1\x51\xb9\x02\x72\x8d\x87\x18\x08\x64\x04\xdd\x0a\x2d\xfc\xf6\xfb\x99\x10\xc4\x65\xad\x95\x42\x83\xac\x36\x4f\x5a\x10\x63\x5c\xe6\x98\x15\x65\x0c\xd9\x0e\x8d\x53\xbf\xe7\xc9\x0a\x52\x2c\x2d\x3b\xe6\x1e\x34\xce\x0a\x1e\x02\xfb\x1c\xb3\x5d\x57\x5a\x21\xb6\x14\xa2\x14\x97\x30\x12\xe6\x7c\x55\x3a\x10\x84\xcb\x00\x62\xcf\x65\x60\x45\x4c\xc9\xfb\xa5\x69\x9c\x68\xc5\x35\xd0\x4b\x3d\x4c\x04\x3e\x94\x02\xa5\x65\x2a\xb4\x29\x94\x4a\x7d\x64\x27\x06\x2d\xde\x4e\x55\xc8\xe7\x8a\x1a\x30\xa0\xdf\xcf\xb7\x77\xa6\x98\x9a\xcc\xa3\x55\x55\xe4\x9f\x95\x02\x71\xfb\x26\xab\x92\x51\x5d\x60\x97\x13\x26\xea\x0e\x7f\x37\xa1\x00\x0b\xf5\xcb\x88\x3e\x1d\xe4\x27\x04\x0f\xaf\x00\xcb\x6a\x4a\x89\x74\xa8\x26\x1b\xb8\x96\xaf\x66\x56\x41\xd2\x47\x81\xe7\x68\xe2\x00\x5e\xf2\x03\x85\x37\xad\xf4\xcf\x89\xad\x37\x0f\x5a\x78\x0e\x78\xc1\x74\x99\xb3\x42\xce\x84\x0f\xb5\xc5\xec\xd0\x27\xc1\x65\xf6\x48\x2d\x18\xf5\x27\x74\xfe\x48\x07\xa1\xf7\x15\x80\x09\xea\xea\x82\x1a\x7c\x09\x79\xe2\x47\x0c\xca\x13\x78\x4a\x8a\x8a\xbe\xef\x53\xd9\xfc\xd9\x0f\xe1\x2c\x7b\x8e\xe6\x42\x3b\x29\xbc\x1e\x2f\xea\x11\x3e\x72\x1c\x45\xff\xe0\x78\x10\x80\x06\x28\x02\x87\x1f\x8c\x58\x02\x51\x2e\x8d\xe7\x4a\xe3\x86\xde\x9f\x7b\xc0\x96\x0a\x70\x63\xf9\x5b\x18\x79\xf4\x8a\x88\x5f\x71\x72\x14\xd8\xe7\xaa\x21\xda\x75\xdc\x8d\x7b\x07\x38\x96\x09\x66\x37\x3c\x93\x94\xbd\xe4\x6e\x31\x36\x6d\xb1\xaa\xb4\x60\x0b\xc1\xad\xca\x5a\xa8\x90\xe6\x09\xce\x01\xe4\xca\x76\x45\x64\xa4\xf8\x30\x73\x9c\xb8\x14\x05\xcb\xfe\xcc\x13\xa7\x97\x20\xee\x8a\x82\xc0\xb9\x02\xc0\x73\xb8\x69\xae\xb1\xb8\x29\xa8\xd6\xb8\x8b\xfe\x63\x1f\xcd\xb8\x6b\x55\x3d\x16\xbc\x32\x00\x42\xdc\xef\x7e\x87\x8a\x1d\x67\xad\x53\x05\xe1\x10\x77\x3a\x53\x70\x79\x4b\x64\xf0\x04\x5a\xe5\x5e\x89\x96\x20\x5a\xec\x07\xa1\x91\xd7\xc5\xec\x06\x1c\xb1\x74\x45\x7c\x87\xc6\x58\xa6\x0b\xdf\x0b\x3f\x7c\xca\x75\x0c\xf3\x99\xe4\x6e\x04\xb8\x61\x40\x49\x18\x9c\x57\xdd\x94\x00\x5f\xcb\x2b\x97\x25\xf2\xfa\x54\x21\x71\xeb\x4c\xed\x18\xc4\x18\x6b\x08\x80\x5a\xe4\x05\xc7\xbc\xf0\x02\x83\xc9\x1e\x01\x9f\x0b\x91\xe2\x07\x20\x5d\xaf\xda\xe5\x20\xf6\x27\x5a\x1a\x02\xd4\xce\xbb\x2a\x40\x7f\x70\x89\x1d\xa1\xd4\x30\xf9\x4c\x03\x4d\xd0\x10\x8c\x45\x29\x64\x81\xc4\xfd\x7c\x79\xbe\xc0\xe6\x17\x01\x8b\xee\x7b\xee\xc4\x2f\x36\x65\xee\x60\x91\xc6\x77\x2a\x1b\xa2\x67\xd9\xd2\xa8\x15\x6e\xee\x8c\xbf\xa7\x08\xd0\x6c\xae\x72\x90\x13\x4d\x62\xee\x3a\x61\xd7\x42\xe7\x22\x23\x93\xd0\xaa\x2d\xbe\x22\x70\x1d\xe2\x8f\xe5\x06\x7d\x33\xe5\x98\x26\xba\xcc\x4d\xe2\x6a\xdc\x93\x0f\x8c\x3e\xe6\x2d\x65\x62\x07\x58\xbe\xa4\xfa\x7e\x30\x7b\x0b\x6a\xcf\x31\x9f\x0b\xcf\x6a\xa4\xa9\x38\xfd\xb0\x16\x47\x0a\x85\x76\x8b\x50\xfb\xa3\x5a\x8a\x0e\x44\x21\xfa\xf9\x11\x82\x25\x0a\x4b\x99\x90\x57\x17\xf7\xed\x72\x04\x1e\x0c\x72\x5e\x61\x5a\x75\x0a\x78\x27\x59\x34\x09\x0c\x42\xf1\xdc\xb8\xe0\x04\x7a\x15\xad\x70\x1c\x2a\xdc\x81\x90\x26\x10\x8c\x98\x89\xef\x29\xb0\xc2\x43\x55\x0f\xd4\x7a\xfa\xfc\x25\x78\xd2\xd1\x37\xea\xe5\x0d\x62\x23\xfc\xca\xa0\xfa\xc1\x72\x88\x2d\x52\xf9\x8d\x4c\xc5\xde\x70\xb1\x87\xe8\xc6\xdc\x1e\x60\x99\x4f\xb2\x38\x81\x86\xe6\x88\x4d\xf3\x28\x02\xeb\xfc\x6b\xd1\x07\x2d\x09\xd7\x38\xad\x96\xcc\x2e\xe3\xc8\xe7\xeb\x09\x7b\x39\xb6\x6c\x69\xf9\x48\xf6\x5a\xae\x3a\x0c\x65\x30\xeb\xea\x99\x3b\xc4\xf1\xbc\x63\x32\x49\x53\x69\xa3\xeb\x4b\xf0\x10\x9c\x64\x29\x06\x90\x2a\xa7\xc9\xdf\xaa\x07\x68\xf3\x3e\x35\x21\xf3\x0a\x57\x31\xad\x32\x4d\x64\xc2\xa1\xcb\xfa\x1a\x54\x59\x99\x57\xd3\x1c\x42\x04\x2b\xec\x06\x08\x0e\xbf\x36\x97\x33\xfb\xc0\x08\x43\xd0\xb1\xaa\xe6\x7b\x15\xff\xf5\x7a\xbd\x99\xb9\x72\xbd\xae\xc9\x1a\x77\x8d\x2a\x91\x94\xa1\x59\x5d\x1d\x52\xb0\x12\x4e\x07\x15\x53\x40\x63\x76\xba\x12\xe4\x82\x15\x8a\x8d\x25\xdd\x29\x7f\x65\xed\x3d\x8d\x88\x15\x4b\x0a\x4f\x69\xbf\xa6\xbf\x86\x9b\x84\xe7\x37\xae\xd1\x16\xd7\x61\x03\xfd\xde\x2e\xb3\xda\xb1\x4a\xd4\x8e\x5c\x68\xbc\x43\xfd\x5e\xb2\x45\x38\x44\x2b\x5a\x94\x30\xd6\x81\x70\x12\x2f\x0a\x31\x9b\x17\x71\x2f\x57\xf5\xd0\xd9\x2c\x3b\x97\x22\x7b\xfe\x46\x49\x3a\xcb\xa0\x5e\xf2\xb2\x50\x33\x9f\xfa\xeb\x7b\x77\xba\x22\x48\x04\x51\x58\x39\x51\x2f\xe6\x5c\xec\xc4\x9a\x1f\x20\xd2\xbd\x32\x80\x41\xc9\x04\x2b\x74\xb8\xba\x27\x20\x28\x17\xab\x1b\x8a\x7a\xf3\xc3\x15\x99\x91\x3a\x6e\x4a\xea\xe7\x07\x32\xc9\xa9\xaf\xc0\x3c\xdc\x24\x10\xc4\x65\x39\x17\x24\xaf\x63\x9f\x2e\x9e\x47\x0a\xcd\xd7\xa1\x95\x0d\xa2\xaf\x49\x85\x28\x14\xb5\x28\xa8\x87\xca\x65\x3e\x12\x41\x5f\x41\x3e\x4e\xa1\x98\xaa\xbc\x77\x0d\xaa\xa0\xf2\x02\xb5\x16\xb6\xef\x55\xf3\xef\xc8\x6e\xbc\x6b\x9f\xa8\x33\x7a\x3d\x90\xeb\xf3\x62\xb9\xbb\x8f\x9a\x12\x08\xa7\x72\x28\x0b\xef\x2e\xf6\x95\x54\x08\x2f\xb4\xbc\xaa\x2a\x72\x0c\x7c\x35\xa1\x77\x5c\x25\x6c\x50\x83\xac\x37\x09\x0e\x7b\x87\x08\x69\xa1\xc3\x43\xe6\xa9\x35\x0d\x45\xdc\xfc\xc1\x35\xf6\xa8\x83\x1e\xa8\xea\x20\xc6\x88\x5c\xd9\xaa\xc7\x64\xb7\xe1\xac\xfd\x12\x6a\x97\x90\x30\xb5\x11\xb6\x25\x2a\x41\x73\xf0\xac\xcd\x20\xe7\x08\xcc\x41\xc4\x81\xdf\x15\x85\xbe\x77\xf1\x45\x5c\x63\xa3\x76\xc1\xe8\x66\x18\x08\x10\x44\xd5\x1e\x1c\xfa\xc1\xa7\xc1\x53\x03\xab\x15\x55\x49\xa2\xcb\xce\xaa\xc5\x49\x42\x94\xab\x5a\xbe\x71\x4d\xa6\x60\x9b\x55\x58\x9d\x9c\x61\xe9\x8c\xdc\x5a\xa9\x9a\x12\xcc\xaa\xaa\x53\x5e\x5d\x9b\x19\xfc\xa9\xd2\x7d\xa9\x08\x65\x75\x5c\xeb\x60\x6c\xd5\x66\x69\x5d\xbd\x72\xd5\xd6\x51\x22\x1f\x2b\x3d\x72\x81\x4b\xbc\xae\xa4\x32\x44\xa1\x59\x9f\x37\xbf\x22\x3a\x78\x70\xd0\x66\x3d\xd7\xc0\xc3\x77\x1b\x1a\xb9\x14\x69\xe8\x0d\xf1\xbe\x4c\x27\xa0\x29\x62\x26\x4b\x04\x5b\xc2\xca\x19\x80\x63\x09\xdd\x91\x99\x2b\x2a\x14\x75\xe2\x85\xac\xf3\x66\xad\x75\x90\xeb\xac\x6c\x4c\x29\x4c\x2b\xa9\x54\x00\xc6\x82\x51\x40\x59\x38\x2b\xf6\x78\x35\x9d\xbf\x1d\x9a\x5c\x43\xd7\x0a\x9d\x82\xb9\xe0\x53\x00\x43\x62\x9e\x65\xfd\xad\x10\x3e\x46\xdd\xd2\x39\x77\x2a\x3d\x24\x62\x96\x05\x2e\x7c\xdf\x24\x55\x7c\x18\x59\xb5\x13\x0a\xa1\x39\x43\x6f\xfd\xdb\xa1\x6a\x91\x57\x5a\x63\x45\xcd\x65\xc7\x61\xf4\xdd\xea\x8b\xb3\x32\x2b\x78\x2e\x30\x0d\x02\x81\xfa\x51\x07\x9e\xc0\xe4\x23\xfc\x13\x84\x9d\x3c\x5d\xe7\x42\x17\xa8\x3d\x54\x5a\xec\x60\x73\xda\xfa\x86\x86\x06\x29\x00\xd0\x5c\x7d\x51\x39\xa0\xdf\xeb\x69\xd0\x72\xec\xab\xaa\x80\x82\x49\x22\x07\x4a\xe0\x50\x9f\xde\x99\x2c\x2a\xed\xdc\x2b\xed\x8f\x96\x92\x72\x91\x71\x22\xec\xca\xde\x1d\x2b\x00\x5d\x12\x09\xe1\x71\x7c\xf0\x04\x1a\x54\xf9\x9f\x8a\xa9\x86\xd0\xe5\x42\x95\xb8\x50\xe2\x58\xd8\x69\x03\x8b\x10\xda\xc3\x91\xa5\x9e\xd0\x60\x35\x78\x2f\x7c\x2c\x33\xe1\xb1\xa1\x40\xd8\x83\x16\x63\x6d\x05\xa0\x47\x11\xc2\x96\xdf\xb1\x08\x87\xed\x5b\x81\x42\x88\xd0\x8c\x50\x95\x37\x4b\x99\xcc\xd1\x2d\xa3\x34\x2b\x73\xbc\xb7\x02\x01\xc3\xb0\xcf\x88\x85\x89\xab\xdd\x45\xb5\x11\x90\x35\x0e\x79\x16\xc4\x80\x88\x3f\x10\x57\x47\x04\x78\x9d\x83\xd9\xc6\xcf\x05\x3c\xef\xca\x57\x00\xf3\x83\x38\xae\x15\x55\x19\x7a\x15\xe0\xa6\x03\x62\xaf\x40\x6e\xca\x1c\x9c\xb6\x54\x47\xcd\xb1\x05\xbf\x3c\xf2\xaa\xea\xc8\x94\x14\xba\x58\x10\x02\x93\x3a\x25\x39\xf6\x0d\x98\x4f\xf4\x66\x51\x6f\x2e\x1c\x06\xd4\x16\x7c\xf6\x9b\xea\x04\x5c\x36\x39\xf4\x8b\x8a\x66\xe9\x52\x5d\x7c\x87\x3d\xbb\xfc\x89\xa6\x51\x0b\x57\xea\x20\x54\xe2\x88\x77\x9d\x8c\x75\x07\xdb\xb5\x6f\xbb\xa6\x00\x54\x89\x09\xc1\x66\xa1\xfc\x85\xd5\x32\x46\x60\x36\x9c\x60\xb9\x65\x48\xfc\x07\x25\x68\x86\x2d\x2a\xa1\x97\xb0\x2a\x4d\xa8\xdd\x1f\xf7\x5f\xba\xb5\x26\xa4\x06\x84\x5c\x9c\x81\x5b\xed\x99\xec\x6e\x02\xf6\xc0\xc5\x39\x4a\x74\xa0\xe3\x31\xc9\xe3\xb6\x5d\x31\xc2\x9c\x10\xdb\xbe\x60\xc0\x37\x64\x3c\x94\x73\x9f\xea\x04\x49\xcd\xfb\xa9\xca\x71\x2f\xa8\x84\xa4\x1c\x33\x00\xdc\x31\x33\x85\x43\x64\x95\x4e\x52\x1a\x2a\x95\x0c\xa3\x0e\x45\x38\xc7\xc0\xb2\x68\xa2\x98\xe3\xee\x93\x95\x3d\xc3\x24\x59\x8a\x6c\x1b\x22\x86\x1e\x3f\x5c\xbd\x53\xf1\xf9\x05\x1c\xa2\x9d\xb0\xfd\x56\xe6\xca\x84\xdd\x12\x98\x62\x28\x32\x29\x6e\x5c\x6d\x90\xa1\x58\x96\x73\x28\x9b\xcd\x52\xb7\xbc\x20\x24\x9f\xb7\x5d\x64\xad\x9e\x08\xb9\x8f\xbd\x78\x97\x92\xff\x4c\x94\x9c\x88\x90\x48\x57\x6e\x04\x0a\xbd\x82\xcb\x84\xdc\x4d\xc3\x05\x8b\x2e\xc6\x70\x11\x82\x73\xd8\xff\x0a\x7d\xc8\xc8\xd7\x63\x5d\x67\x29\x2b\xdd\x72\x51\xec\xbc\x5d\x99\xcb\x0a\x6b\x81\x7a\x19\x03\x97\xf0\x7d\x72\xd9\x44\xa8\x89\xe6\xf3\x29\xa0\x20\x2a\x0b\x8d\x72\x73\xeb\xed\xc5\xfd\x72\x12\x40\x9e\x91\x1f\x28\x7e\xb9\x52\x8f\xd7\x35\x4b\xb2\xfa\x01\x04\x0e\x03\x39\x90\xbb\x94\x06\x05\x2f\x24\x07\x63\xed\x12\xbc\xef\x54\xb9\x24\x5a\x85\xcc\x47\x4a\xcf\x95\x46\xe4\x0e\x78\xae\xfc\x34\xb9\x41\x3f\xbe\x73\x8d\x53\x24\x8e\xea\x7e\xac\xd9\xe6\x2f\xb0\xfd\xf6\xda\xfa\xaa\xe0\x26\xa2\xe4\x44\x2d\xb0\x89\x20\x9d\x81\x5c\xdc\x0e\x06\x39\xf9\xf4\x4d\xbd\xd2\xef\x9a\xd2\x3a\xa0\x53\x58\xe5\xd9\x5e\x3b\x39\x43\x48\x92\x5d\x6c\x2e\x6e\x99\x1f\x0b\x4c\xbb\xa1\xb0\x0a\x83\xb4\x92\x41\xe6\xcc\xcc\xa5\x96\xbe\x36\x9b\x8b\xb2\xb8\xf2\x72\xf6\x98\x97\xe8\xf8\xc3\x12\x14\xd8\x91\xb6\xe0\x12\x6a\x69\x50\x59\x00\xf8\x88\x2f\x22\x87\x20\xfb\x91\xd0\x3e\x22\x0e\xaa\x7d\x88\x69\x10\x3c\x17\xda\xa1\x5b\x46\x5a\x4a\x03\x26\x5b\xb5\xc2\x70\x08\x41\x47\x3a\x35\xf9\xcd\x4d\x54\x4c\x2d\xd4\x67\xa9\x4a\x64\xe0\xb1\x11\x5a\x17\xc5\x36\x16\xcd\x80\x56\x7b\x50\xdd\x85\x46\x81\x50\x64\xa5\xb0\xaa\x4f\x74\x8c\x0a\xaf\x17\x71\xdf\xe5\xaa\x8e\x49\x17\xd0\x65\xb0\xf8\x80\x90\x76\xd0\xc2\xca\xe7\xdc\xd6\x87\x18\xfd\xfa\xa3\xb2\x44\x87\x28\xad\x07\xa1\xd6\x10\x3f\x73\x22\xa3\x4a\x96\x00\xf3\xa0\x5e\x65\x76\x2a\xee\x11\x4c\xc5\x7a\xc4\x4c\xfc\xe9\xfe\xb2\xed\xf4\x53\x87\x4d\x8e\x2e\x10\x18\x0b\x4b\x29\x9c\x10\x6b\x0b\xa5\xaa\xe2\x9a\x3b\x98\x57\x52\xb9\xe8\x75\xed\x3d\x5f\x11\xf6\xc2\xb2\xba\xf6\x56\x8a\xaa\xb0\x71\x15\x58\xad\xe5\x10\xcc\x7e\xd2\x44\xbd\x40\x89\x84\x70\xcc\x25\xa9\x4e\xc7\xfa\x22\xe3\x95\x0f\xbe\xc2\xa5\xac\x78\xf0\x1b\xa8\x18\xac\x66\xc2\xde\x46\x83\x82\x45\x84\xf6\x88\x0e\x80\x86\xc5\x80\x01\x6b\x37\xc2\xc6\x76\xee\x8e\x4e\x4a\xf0\x4f\xd1\x7c\x8a\x5b\xc5\x26\x0a\x82\x37\x63\xbc\xa5\xfa\xa6\x52\x5b\xc9\x14\xbc\x28\x5d\xa1\xaf\x2c\x8b\xfc\x16\xe8\x6f\x2f\xeb\x25\xc2\xc8\x11\x3b\xd7\x6a\xa6\xbc\x8b\xc1\x40\xef\x9b\x09\xe9\x7c\x5a\x90\x3c\xf2\x2f\x4d\x90\xfd\x64\x8b\x76\xbd\xf4\xf7\xe9\x99\x2f\xea\xef\x8f\xc9\x57\x6d\xf6\xb2\x7b\xd8\xb9\xea\x77\xa1\xb6\xfc\x71\xef\xe5\x45\xe7\xe2\x1d\xeb\xf5\x5d\x35\x97\x23\xf6\xea\xa2\xdb\x85\x82\xf7\x6f\x3a\x17\xaf\xbb\x89\x7d\x0e\xfb\x07\x9c\x9e\x0d\x06\xb9\x6f\x13\xf0\x8a\x6a\xd7\xd3\x10\x89\x2b\xfe\xdf\xfd\xcf\xcb\xee\xe9\x25\x3b\xef\x5e\x9c\xf4\x2e\x2f\xbb\x47\xec\xe5\x3b\xd6\x39\x3f\x3f\xee\x1d\x42\x25\xfe\xe3\xce\x5b\x28\x67\xf2\x9f\x87\xdd\xf3\x4b\xf6\xf6\x4d\xf7\x34\xd4\xd1\x67\xfd\xcb\x8e\x7d\xa3\x77\xca\xde\x5e\xf4\x2e\x7b\xa7\xaf\x61\xc4\xe5\xc2\xfe\x9d\xd3\xa3\xfd\xa8\xfd\x07\xb4\x10\xe8\xfa\x06\x07\x95\x95\xc5\xcd\xa9\xd7\xb4\x3a\x18\x0c\x72\x6a\x76\xd0\x83\xe1\xa8\xe7\x41\xf7\x68\x75\xd7\x83\x64\x45\xdb\x03\xa0\x92\xd5\xa4\xf1\xe9\xbb\x3b\x20\x40\xf1\x9b\x75\x4d\x10\x06\x83\xdc\xb7\x96\x46\x7a\x9e\x5e\xf6\x2e\xba\xec\xa2\xd7\xff\x9e\x75\xfa\x8e\xca\xff\xb8\xea\xf8\xa1\xce\xbb\x17\xaf\xce\x2e\x4e\x3a\xa7\x87\xb0\x6f\x38\x93\x68\x67\xa1\xed\xc0\xbb\xb3\xab\x36\x63\xfd\x37\x67\x57\xc7\x47\x15\x02\x59\xa2\x75\xd9\x51\xf7\x55\xf7\xf0\xb2\xf7\x43\x37\xb1\x4f\xb2\x4e\xbf\x7f\x75\xd2\xa5\x1e\x12\x87\x67\x7d\xe8\x67\xd0\x39\x3e\x66\xa7\xdd\xc3\x6e\xbf\x6f\xdf\xeb\x77\x2f\x7e\xe8\x1d\x02\x3d\x2e\xba\xe7\x9d\xde\x05\xf6\x60\xb8\xb8\xc0\x66\x07\x81\x33\xfd\xb9\xda\xbb\xe1\xea\xf4\xd8\xae\xfb\xa2\xfb\x8f\xab\xde\xc5\xaa\xe3\x61\xc7\xe9\xbc\xbe\xe8\x62\x3f\x89\xde\xa9\x3d\x74\x74\x1a\xde\xf6\x8e\x8f\xb1\x8f\x43\xed\x48\x24\x8c\x1a\x3c\x84\x03\xf1\x8e\xbd\x7d\x73\xc6\x4e\x3a\xef\xb0\xce\x90\xdd\x65\x3c\x36\xec\xa2\xeb\x4b\x11\x55\xcf\x4a\xa7\x1f\x1d\xdb\xce\xcb\x33\x4b\x8d\xd0\x43\xe2\xf2\xcc\x92\x66\x30\xc8\xed\x96\x51\x07\x89\xb8\x19\x86\xfd\x3c\x55\x48\x4a\x58\xff\xbc\x7b\xd8\xb3\xff\xe8\x9d\x1e\xf6\x8e\xba\xa7\x97\x9d\x63\x6c\x58\x73\x78\x76\xda\xef\xfe\xe3\xca\xee\x6a\xe7\xd8\x37\xa2\x70\xfd\x23\xa8\x73\x44\xd4\x13\xa2\x77\xea\x4e\xcd\xe5\x19\xa3\x6b\x1b\x6d\x6f\xf3\xce\x66\x1c\xc7\x67\x7d\x38\x80\x47\x9d\xcb\x0e\x83\x59\x5f\x76\xd8\xcb\x2e\xb6\xde\xb9\xe8\x9e\x1e\x75\x2f\xe0\xba\x75\x0e\x0f\xaf\x2e\x3a\x97\xf0\x41\xfb\x4e\xb7\xcf\xfa\x57\xfd\xcb\x4e\xef\x14\x37\xc8\x1e\x09\xb8\xee\xbd\x8b\x23\x7f\xdb\xa8\x2d\xfa\xab\x4e\xef\xf8\xea\xc2\x9d\x3c\x4f\xcb\xcb\x33\x76\x76\xde\x85\x41\xe1\xfc\x85\xcd\x71\xfd\x2c\x5a\x09\x9c\x08\xd6\x7b\x65\xd9\xf5\xd5\xe1\x1b\xda\xcb\xd0\x09\x03\xb7\xf1\x4d\xa7\xcf\x5e\x76\xbb\xa7\xac\x73\xf4\x43\x0f\x6e\x25\x7e\xe9\xfc\xac\xdf\xef\x11\x6d\xce\x5e\x31\x3b\xc2\x60\x90\x13\x45\xeb\xcc\xf0\xde\x5e\xb9\x51\x1f\x8c\x37\xea\xd6\x0a\x93\x0e\x18\xce\xe8\x59\xbe\x04\x15\x03\x1b\x80\x6b\x76\x2a\x6e\x49\x88\x62\x78\xd6\x61\x90\xc1\xb9\x8c\x65\x1e\x31\xb5\x8b\x55\xaa\x31\x47\xd5\xd8\x29\xb6\x4d\x02\x19\xeb\xda\x41\x06\x64\xa5\x90\xa1\xd3\x00\x41\xb1\x84\xf2\xb6\x80\x33\x9a\x89\x3c\x75\x75\xaa\x65\x51\x93\x21\x64\xfb\x09\xd7\x2f\x03\x0b\x5f\x57\xab\x37\xbb\x1a\x01\xe8\xe9\xc4\x32\xed\xcc\x28\xb0\x55\x50\x97\x47\x81\x53\xf3\xf2\x2c\x95\x46\x62\x4d\x68\xbe\x9c\x15\x42\xe7\x1c\xeb\xfd\x26\xeb\x43\x66\xf7\xd4\xa2\x6c\xc5\xd5\xa3\x7d\x1a\xa1\xfb\x54\xc2\x78\x51\x70\x0a\xa5\x07\xf5\xcf\xe7\xf4\x55\xca\x74\x63\x49\x4e\xd0\x23\x0c\x1f\x5b\xdb\xcf\xaa\x1f\xfe\xfd\x99\x7b\xdc\x14\x14\x5e\x03\xe4\x27\x01\x03\x00\x82\x0d\xf1\x08\x53\xb0\xa8\x92\x31\x2a\x97\x37\x62\x41\xd1\xfc\x51\x56\x3a\x80\x51\xb5\x54\x08\x0c\x06\xa3\x50\x1d\x69\xc4\x73\x14\x1e\xa6\x83\xbd\x38\x1a\x5e\xc5\xb1\xa2\x29\x93\x39\xf9\xff\xd8\x5c\x81\x59\x88\x8d\x89\x04\x95\xf6\x84\xa8\x0d\x45\x11\xa5\xd5\x55\xca\x3c\x8d\xce\xb8\xdd\x69\x18\x22\xc6\xfd\x10\x35\x0c\xcb\xf9\xcc\x0d\x3e\xd4\x52\x8c\x99\x4c\x05\x47\x28\x39\x16\xc4\x74\xc5\x64\xec\x50\xd5\x26\x2f\x0b\x6b\x6c\xe3\x00\x56\x8b\xc1\x12\xd6\xfe\xb3\x54\x6b\xd8\x5b\xc5\x95\xa3\xf8\x8d\xcf\x3f\xac\x9c\x3f\x54\xfa\xf7\x7d\xc9\x02\x5f\xfd\x7e\xcd\xc9\x89\xca\x17\x2f\x67\x8e\xb2\xd0\xa4\x1c\x92\xb1\x23\xcd\xf9\x4e\x9d\xf1\x1b\xb2\x0e\x68\x88\x9b\xd0\xf9\x86\x55\x1b\x15\x43\x18\xb3\x59\x2d\xb5\xd2\x5a\xb6\x1e\xda\xeb\x69\x12\x87\x93\xc9\x4e\x9d\xaa\xb9\xf0\xc5\x48\x9d\x72\x89\x29\x86\x0e\x2d\x67\x4d\x3c\xa7\xae\x58\xd6\xe9\x54\x96\x6f\x7c\xc6\x05\xa5\x7a\x80\x1f\x1d\xaa\x15\x84\xae\xe1\x0e\xe2\x56\xd7\x3b\x94\xbe\xb7\xf7\x92\xd5\x11\x84\x2f\x84\xe9\x28\x7c\xb7\xa1\xeb\xda\x43\xa2\x11\x6a\x22\x5a\x58\xf6\x12\x5f\x82\xd5\x70\xa8\x87\xef\x70\x9c\x5e\x16\xa8\xfc\x0d\x93\x63\x7b\x37\x56\x18\x02\x51\x5f\x6c\x18\xa9\xde\x9a\x28\xd9\xb4\x31\x91\xd5\x2a\x32\x03\x66\x37\x75\xc0\x20\x2f\x5c\xce\xa6\x28\x46\x00\xc5\x8a\x35\xfd\xed\xa9\x14\x99\x18\x15\x5a\xe5\x72\x44\x45\xe8\xe7\xd0\x74\x40\xba\xa2\x1a\x11\xc9\x20\x0d\x60\x22\xe8\xec\x89\xd9\x3c\x53\x0b\xa1\x59\xd3\xe5\xeb\xfa\x3a\x0e\x64\xb6\xcd\x84\x86\xc6\xdb\x14\xa4\x36\xd6\xbe\xcc\xd0\xbf\x9f\x43\x83\x06\xc8\xea\xc1\x34\x82\xe0\x5e\x0a\x45\x95\x5c\x89\xb5\x65\xbc\xa4\x43\xbd\x5a\xce\xfa\x86\xaa\xcb\x72\x66\x20\x80\xf0\x0d\xa5\x59\xdb\xb7\x2c\x9f\x08\x38\x8f\x77\x6a\xa1\xd2\x45\x2e\x1c\xa9\xa9\x7f\x9d\xfb\xa0\x71\x9d\xcd\x68\x22\xc0\xf5\x04\x00\xd0\x3c\xc8\xc2\xdd\xa3\xff\xfb\x95\x56\xc3\xc1\x9f\x58\x33\xd4\x14\x81\x99\xde\x52\x41\xed\xeb\x5c\x0d\x4d\xcb\x43\x25\x87\x0b\xf6\x9d\x9d\x0a\xbb\xe0\x79\xaa\x66\xec\x0d\x1f\x5d\x0b\xed\x0f\x26\x62\x05\x4b\x0d\x3c\xed\x72\xc1\x0e\x95\xdd\xe0\x03\xd6\x99\x6b\x99\xb1\x83\xaf\xbf\x7e\x86\x72\xc8\xfd\xe5\x5c\x0b\x23\x5d\xc9\x91\x1f\xa4\x6b\xaf\x75\x69\x45\xed\x9f\x7c\xef\x0c\x24\x0b\xb8\x35\xfe\x63\xa9\x55\xd7\x48\xa5\x62\x26\xb5\x56\x9a\x1a\xdc\xba\x7e\xa8\x71\xc7\xc1\x2a\xeb\x7d\xfe\xec\xe0\x2f\x76\x25\x27\x5c\xcb\xf7\x39\x7b\xc3\x6f\x84\x1e\x8a\x6b\xc1\x66\xf0\x8b\xe9\xdf\x27\x70\x6c\x46\x54\x57\x15\x5b\x01\x6c\xbf\x6f\x60\xd4\xc4\x7f\x6b\x9d\x03\xc1\x47\x0f\x27\x66\x2b\xbd\x03\xd1\x45\xbd\x9d\xee\x81\x9b\x34\x48\x8d\xfb\x07\x42\x4a\xd8\xe7\xd1\x41\x90\x82\x71\x9f\x41\x0f\xc1\x60\x21\x6f\xdc\x45\xd0\x5a\x1e\xdb\xeb\x23\x68\xd9\xf8\x56\x3a\x09\x82\x69\xb6\xc5\x5e\x82\x83\x41\xbe\xb5\x6e\x82\xb5\xed\x0c\xfd\x04\xa1\x7f\x36\x07\x17\x58\x4e\xbc\xa9\x33\xe7\xa3\xa0\x05\x55\x5a\x58\x3f\x4b\xd8\x77\x3c\x87\xde\x80\xcf\x9f\x3d\xfb\xb2\xda\x8a\x9b\xc3\x7b\xd5\x36\xdc\x74\x92\xd6\x15\x08\xbe\xb2\x8b\xbe\xe8\x9e\x5f\x9c\x1d\x5d\xc1\xca\x12\x78\x2a\x2e\x17\x8c\x23\x1c\xb4\xd9\x51\x94\x33\xe1\xa6\xdf\x08\x95\x72\xe9\xf8\xcf\x04\xcf\xab\x9e\xe1\x3a\x56\x06\x78\x85\x43\x2d\x3b\xf4\x71\x05\x7c\x49\x61\x86\x28\xe1\x34\xca\xdd\x71\x91\xaf\xaf\xbd\x8f\xdb\xb1\xc0\xfa\xac\x94\x5e\x31\xad\x70\xa1\xd5\x6d\x8e\x19\x86\x22\x2f\x64\xb1\x88\xeb\x0d\x7b\xdf\x6f\xfd\x69\x97\x47\x0c\xfc\x3c\x00\x91\xe2\x68\x07\xf4\x45\x98\xf0\x8c\x75\x61\xd8\x15\x53\x28\xf3\x28\xe4\xcd\x31\x78\xea\xe6\x60\x99\x3b\x30\x42\xf4\x0d\xc3\xaf\x3d\x54\x96\x8a\xe8\x24\x94\xd5\x06\x3f\x64\x30\x5d\x50\x95\xed\x6f\x51\x8f\xb7\x86\x2a\x40\x4d\x5d\xd9\x1d\xd2\xdb\x78\x41\x1f\x6a\x83\xf3\x37\x8a\x38\x07\xcc\x45\x48\x8d\x49\x9c\xad\x04\x63\x84\x42\xbb\x4d\xd9\xc2\x57\xd5\xad\xd0\x09\xe1\x09\x62\x34\x41\x82\x05\xf6\x28\xeb\x26\x24\xa9\x61\x04\x60\xc6\x73\xee\xf0\x2c\x2e\xfb\x1b\x26\x15\x5a\x7f\x0c\x5d\x1f\xc3\x51\x1d\x78\x82\x36\x81\x94\x2d\xdc\x10\x33\x95\x73\x08\x4a\xc8\x71\x01\x52\x74\x64\x87\x6d\x7e\xf5\xec\x7f\xb4\x98\x53\x8d\x83\x11\x5c\x16\xd0\x68\x00\x50\xd2\x53\xae\x85\x71\xa3\xc9\x16\x1b\x8a\x5c\x8c\x25\xc0\xe2\x2b\x23\x47\xf3\x0b\x1b\x0c\x5d\xfe\x1a\x00\xbe\xc2\x9f\xec\x49\x6b\xc5\xfb\xcc\x73\xa0\xc6\x8d\x4c\x4b\x3b\xa2\x66\xd5\x33\xe1\xaa\x24\x41\x1e\x68\x54\x41\xca\x81\x94\x56\x64\xd4\xe3\x97\xfb\xd4\xcd\xab\x81\xa0\xd1\xda\xc9\xaa\xd5\xe3\xc5\x0e\x13\xcb\x15\x78\x13\x5f\x25\xd8\xfe\xc9\x9a\x3b\x35\xfc\x90\x57\x36\x2a\x89\x67\xf5\x6e\xec\xf8\x47\x57\x4c\x32\x1f\xcb\x49\xa9\x23\x35\x24\x4c\xfa\x8c\x52\xac\x97\x27\x0d\xd0\x2e\xfb\x3b\x2d\x4c\x99\xc1\x4d\x80\xd8\x1d\x65\x4b\x8d\x40\x5d\xc1\x7a\x9c\x41\xbd\xd7\x95\x9a\xc7\x00\xa7\xa2\x62\xc5\xf6\xa1\x58\x73\x19\x42\xdf\xf7\xda\xe2\x42\x25\x8a\x90\x68\x97\x90\x2b\x7f\x49\xa3\xf2\x65\xd5\x54\x08\x41\xfa\xc8\xcd\x4c\xa4\x92\xb3\x62\x31\x8f\x17\xfb\x16\x50\xd2\x4b\x97\xde\x55\x0c\xa0\xfe\x91\x53\x39\x0f\xc7\xdd\x9a\x3f\x2e\x33\xc2\x0a\x1d\x4a\xa3\x87\xc5\x40\x2a\x0e\xbf\xe1\x32\x8b\x30\x2d\x15\x23\x99\x1b\x0f\x6c\xc4\x0a\x8c\xab\x72\x4b\x1d\xe3\x8a\x9b\x1b\x43\x1a\x53\x61\x65\x86\xaf\xc4\x4a\x10\xef\x26\x04\xaf\xc1\xc4\x80\x20\xb3\x43\x07\x93\xe2\xd8\x99\xcf\x45\x9e\xca\x0f\x58\x00\xbc\x15\xd6\x7e\x14\xd0\xa1\x96\x0c\xa6\x46\x07\x07\x54\x5c\xbd\x72\x76\xe6\x33\xf1\x61\xe5\x6e\xca\x1e\xd5\xd8\x84\x84\xe3\x50\xfe\x0e\xb9\xd0\x5b\x30\xc5\x72\x4c\xcb\xf2\x29\x1f\xf6\x8a\xa5\xb2\x50\x50\x12\x02\x22\xca\x88\xe0\x02\x38\x84\x83\x73\x89\x8c\x0f\x95\x76\x3f\x79\xec\x4c\xe5\xae\x50\x86\x0d\xc4\x81\x93\x08\xea\x93\x40\xc1\x03\x87\x18\x58\xde\xdd\x65\x0e\x1b\x29\xf3\x7e\xef\xea\x04\x23\x6a\xc5\x69\x36\x08\x13\xa5\xc2\x59\x33\x6a\xf3\x02\xe9\x06\x2e\xc5\x07\xa6\x3e\x13\x00\xad\x02\x20\x66\x13\x13\x6c\xe0\x34\x58\xb3\xb0\xe5\xb6\x37\x60\x1e\x98\x1a\xbb\xa4\x1f\x4f\xc0\xa5\xc9\x80\x61\xa5\xc6\x61\x7f\x0f\x23\x4c\xcd\x9a\xbd\xad\x9f\x71\x7f\x19\x1d\x9c\xac\xd6\xb2\xcd\xc9\x41\x3f\x0b\xec\xea\x51\xab\x3f\xeb\x6a\xbc\x91\xb9\x01\xd4\x80\x37\x94\x5e\x3b\xed\x24\x3a\xf4\xd4\x3f\x82\x52\x67\x4c\x39\x0c\x4d\x8c\x9d\xae\x00\xe7\x07\x66\x6b\xa2\x4a\xe9\xf0\x91\xa5\x66\x05\x20\x21\x10\x42\x8e\x25\x4f\xd7\xf3\xfa\x58\xad\x80\xfe\x97\xf6\xd3\xf6\x34\x0f\xc5\x94\x67\xe3\x50\xaf\xaa\x36\xfa\xc3\x24\xb4\x15\x3f\x7e\x35\x83\x41\x03\xea\x2c\x41\xb3\x01\xc7\x58\xd5\x38\x72\x7b\x24\x58\x8e\x3a\x83\x13\xe3\x0c\x76\xab\x2c\x94\xb9\x83\x30\x19\x84\x22\xd2\x81\xf1\xc4\x21\xf8\xb7\xbf\x0a\x18\x4a\xad\xf1\xda\x9a\x18\xc1\x44\xae\x68\x6c\x95\xc7\x2e\x18\x6b\x41\x63\x22\xaa\xc1\x96\x91\x21\x31\xdc\xa9\x2d\x88\x69\x32\x8e\x09\x03\x9e\xd5\x32\xff\xd1\x75\xc8\x74\x8a\xd2\x88\x50\xb3\xf0\xfa\x50\x4c\xe4\xc4\x63\xa2\xa3\xdd\xae\x21\xee\x52\x69\x46\xa5\xc1\xe6\x27\xf6\x6b\x33\xe0\x7b\xa4\xe4\xbd\x05\xbe\x85\x02\x25\x20\x75\xaa\xeb\x73\xe7\xad\x5a\x86\x7b\xc6\xf5\x35\xd4\x3d\xaa\x64\xf1\x44\x59\x93\x32\x67\xae\x84\xf9\xea\x93\x46\x5d\x26\x4e\xa1\xaa\x51\x7c\x07\xdb\xb8\xe5\xb5\xcb\xb9\xa4\xf7\xfa\x45\xbb\xfb\x75\xa7\x6a\x12\x93\x0d\xcd\xeb\xea\x47\x43\xef\x06\xef\x52\x1c\x2e\x2a\xdf\xa8\x94\x81\x03\x54\x92\x47\x43\x60\x66\x50\x74\xb9\x88\xb9\x3c\x6f\xb3\xd7\x56\xf7\xb1\xdf\x0c\xae\x18\x8f\xff\xed\x57\x4d\xf7\x95\xb6\xc5\x8a\x12\x9d\x10\x0e\x88\xe8\x52\x71\xc7\xb8\x98\x12\xe3\x56\x05\x9b\x8b\xa2\xe4\xe0\x02\xbe\x55\x3a\x4b\x6f\xa5\x55\x0a\x72\x95\xef\x51\xb4\xe1\x06\x7e\xdc\x73\x7e\x9b\x18\x91\x9b\x60\x39\x3d\x35\xe2\xd8\xeb\x3b\x6a\x2b\x11\xf2\x09\x9c\xc1\x03\x85\x3a\xa0\xaf\xc7\x32\xe3\x42\x9e\x8c\x21\x27\x4c\xa2\x9c\x67\x7c\x41\x3e\x14\xfb\x1b\x4a\xf0\x5d\x72\xa0\xd4\x40\xc7\x83\x41\xee\xd9\x29\xe8\xaf\x4b\x5f\x5a\x21\x77\x81\x5d\xd0\x6e\x7c\x11\xed\xc6\x39\x62\xc9\x7f\x9f\x5b\xd1\x0c\xc9\x4e\x50\x87\x2a\x74\x88\x24\xc4\x63\xab\xde\xa3\x92\x50\x8f\x49\x00\x95\x26\x98\x23\xe9\xd2\x9a\x2d\x13\x17\x59\x96\xd0\xff\x95\xb3\xb9\xd2\x45\x12\xdc\x80\x98\x19\x45\x25\xe4\x03\xeb\xc0\xa2\x36\x5a\xb8\x6e\x80\xd5\xf2\x89\x00\xde\x73\xe5\x73\xdd\x94\xc8\x53\x8b\xcf\xd2\x82\x86\x54\x7e\x3a\xa6\xa4\xe7\x7f\x71\x81\x04\x07\x10\x76\xe1\x18\xa9\xc1\xc9\x19\xae\x71\xd3\xb4\xc0\xa9\x2f\x3c\x36\xb2\xde\x42\x51\x6a\x56\x7b\x21\xae\x93\xfa\x96\xea\x96\xa3\xca\x55\x9d\x14\x0d\x7f\x0b\x99\x50\x24\x9d\x00\x23\x85\xed\xd1\xa5\xef\x07\xe1\x89\x5f\x10\xc8\x9e\xf1\x09\xb7\x7f\x06\x36\x45\x46\x71\x33\x08\x19\xd0\x6d\xb5\x32\x66\x0f\x0b\xd9\x02\xb8\xae\x84\xa2\x81\xf0\x33\x56\xbe\xe6\xb7\xa6\x94\x45\x0b\x53\x2a\x7c\x86\xb2\x9b\x34\xca\xed\x1a\x4f\xbb\x8b\x45\x45\x0d\x2c\x1c\x7a\x1e\xc7\x18\x85\x4d\xf0\xbd\x4e\xe3\x7c\x0d\x97\x30\xb0\xd4\x09\xd5\xaa\x31\xce\xd4\xa3\x93\xbf\x02\x4b\x3a\x76\x7b\x0b\x93\x40\x7e\xee\xd3\xcd\xac\x48\xf4\x8e\x43\xa8\x41\x4f\x07\xcb\x53\x52\x62\x55\x0d\x17\xaa\xfc\xb2\xcd\x2e\x2a\x31\xe5\x90\x56\xe8\x79\x53\x9d\x97\x54\xbc\xb1\x8e\xab\xdc\xa1\x72\xd5\x7b\x54\xb8\x8c\x20\xf2\x20\xd7\x6a\x10\x51\x75\xaf\x75\xbc\xa8\x9e\x67\x8b\x67\x07\xfa\x08\xdc\xe3\xbe\x6d\xf2\x56\xad\xe8\x50\x9c\x31\xe3\x5b\x0d\xc7\x9a\x27\x18\x5e\x4b\xcb\x5a\x5d\x0d\xe8\x1b\x8f\x9c\xcc\x9b\xcb\xed\x06\x82\xfe\x6a\xcd\x14\xd7\x20\x7b\x7d\xbb\x81\x4a\xab\x81\x77\xab\x5a\x0d\xc4\xdf\x8b\x1b\x0a\x68\x51\x70\x09\x9e\x7a\xf2\x1e\x7b\x1b\xd8\xa1\x2c\x97\xed\xb1\xdc\x7f\x26\xf6\xc7\x57\x82\x41\x09\x1d\x56\x68\x2d\x94\x0a\xab\xbe\xf8\x3c\xb8\x22\xdc\x18\x17\xfe\xf7\xf9\x3b\xb5\xef\xc7\x9c\xaf\x0e\x6d\xae\x94\x03\xa6\x94\xc0\x39\xa1\xb8\x5d\x44\xc4\xd7\xc4\xb7\x03\xd5\x17\x12\x93\x04\xcb\x59\xf8\x9d\x24\xbb\xc9\x60\xac\xed\xf4\xec\xb2\x77\xd8\xb5\xfa\x50\x21\x3e\x50\x69\xba\xa8\x72\xb8\x84\x00\x46\x7c\x2b\xa2\x3b\xbb\xe2\x94\x2f\xd1\xce\xd5\x9f\xf7\x45\x11\x98\x2f\xf9\x13\x47\x59\x57\x11\x8e\x4a\xec\x40\xca\x01\x71\x1c\xb8\xc2\x38\x65\x98\x6a\xb2\x04\x0a\x5f\x41\x39\x4c\x09\x5f\x41\x3b\xb6\x8a\x72\xd8\x47\xc6\x01\x22\xe2\xd2\x4f\xd1\x8d\x42\xac\xfb\x0b\xc7\x08\xb9\x9b\x53\xa0\x61\x35\x63\x82\x9b\x3b\xbf\xf9\x4d\xcc\x51\x2b\xc7\x04\xa0\x9e\x15\x7f\x0b\x93\xe3\x70\xef\x6b\x35\x4d\x97\xc7\x55\x3a\x09\xd4\xe3\x4e\x63\x8a\x9c\x39\xa4\x50\xaf\xa0\xc2\x98\x8e\x10\x48\xe5\x1b\xa1\x91\xf8\x90\xdf\xb7\x87\xfd\xe6\x1c\xad\x7d\x55\x0b\x2c\xf1\x8c\x50\x76\x57\xc8\x28\x90\x2f\xda\x37\x90\xc6\x68\x4f\x7a\xbf\x15\xcf\x22\x4b\x2e\xcf\x7c\xeb\x15\xaa\xf8\x1c\xe7\x4c\x92\xa6\xe5\xd8\x33\x4f\x53\xc4\x3e\xa9\xdb\x3c\x3e\x49\xe8\xda\x82\x29\x12\x05\x1e\x72\x62\x13\xa4\xaa\xc1\x8e\xfe\x4a\xbb\x8e\x1b\x69\x2a\xf2\xb4\xf4\xf8\x9c\xca\x8e\xbb\x2b\x8e\x46\x90\xdb\x1e\xc7\x4d\xb0\x52\x02\x59\xe8\x3c\x5b\x7d\xd8\xc1\xf1\x42\x0d\xec\x4c\xa1\x4b\x77\x6e\x42\x8e\xef\xb2\x2b\x7d\x25\x01\x82\x76\x0d\x1a\x1d\x55\xd7\xc5\xbf\x2f\x75\x59\xa3\xbc\x3c\x9a\x71\x3c\x49\xc8\x28\x76\xed\xb3\xbd\xf2\xb7\x42\x99\x45\x7f\xd4\x8a\xa8\xc5\x52\x81\x77\x35\x5e\x31\x0b\xca\x7e\x77\x69\x9b\xab\xd5\xf1\xd8\xad\xe4\x0f\x3f\x8c\x55\x22\xac\xbb\xfa\xe1\xa5\x60\x49\x45\x92\x79\x25\x14\x33\x57\xe3\x34\xd5\x4a\x92\x65\x4d\x21\xae\x92\xfe\x2b\x50\xf4\x5d\x80\x13\x8c\xb2\x28\x9d\xaa\xcd\xae\xb0\x80\x8a\xdd\x21\x97\xe5\x92\x2d\x70\xc8\x30\x83\x84\xda\xc0\xd7\x34\xad\xc8\x19\x13\xd4\xc3\xf5\xee\x17\xd4\x7a\xdf\x61\xde\x5b\xc5\x29\xe1\x03\xae\x75\xf4\xd2\xfd\xe6\x88\x8b\x69\x43\x87\xb8\x70\x2a\x08\xfc\xa4\xe3\x9c\xe4\xc1\x20\x3f\x55\x85\x7d\xc1\x47\x0f\x0a\x17\x1f\x0e\x09\xf6\x98\x56\x4c\x53\x32\xe5\x5c\x68\x23\xb0\xc0\x37\x9e\x70\xa2\xbf\x47\x57\xc1\x61\x70\x55\x43\xbc\x39\xe0\xd3\x6d\x5d\x9e\x02\x58\x21\x58\x74\xc5\x0b\x8a\x40\x00\x2c\x4e\xea\xcb\x2f\x56\xf7\x08\x37\xf2\xcf\x6d\x76\xe9\xc4\xb8\xa9\x35\xf8\xf4\x99\x13\xa0\x8b\xae\xe9\xc9\x0b\x4a\x80\x65\x35\x7c\x06\xa9\x52\x7e\x30\x6b\x01\xe9\x1b\x39\x02\x50\xc4\x35\x3a\x50\xe9\x94\x22\x18\xa5\x0a\xe7\x42\x56\x1d\xec\xb1\xb8\x4e\x52\x68\x57\x42\x18\x49\x2a\x12\x0e\x25\xc2\x31\xc7\xc6\x8c\xb4\x1c\x86\x34\x43\x74\x23\x2e\x39\x0f\xeb\xc5\x90\x88\x4b\xb3\x65\x16\x4d\xe4\xf9\x4b\x9b\x1d\x55\x3a\x9b\xbd\x25\x24\x97\x3f\xe2\x7e\x9e\xc3\x85\xcb\xf5\x83\x92\x80\xfc\x16\x6f\x36\xec\x59\x8a\x49\x1f\xce\x8f\x93\x84\x2d\xf2\x2d\xbb\xfd\x3c\x9b\x0e\xa8\x18\x1b\x64\xf1\x93\xb2\x30\xd5\xad\xc4\x36\x13\x79\x05\x4f\xff\xb2\xd3\xef\xf5\x2d\x45\x6b\xf1\x7f\x42\x07\x47\x71\xde\x0a\x1e\x80\x12\x73\xa8\xf2\x07\xae\x80\x40\x6c\x91\x33\x2f\x59\x81\xf9\x48\xd0\xc5\x8b\xe4\x21\x30\x43\x85\x4b\xaa\x31\xbb\xec\x5d\x1e\x77\x13\x76\x7a\x76\xba\x17\x07\xfe\x93\x25\x04\xc1\x12\x1c\x6e\x30\xc8\x57\x01\xe2\x5c\x8a\xbe\x51\x99\x80\x5a\x05\xd5\x2c\xfd\x54\xa0\x3d\x14\xce\x45\xd4\xc7\x2e\xa7\x9a\xbd\xd8\xe4\x10\x0e\xd9\x52\x0d\x89\xe0\x75\x36\xa6\x9c\xb9\x6c\x5a\x2d\x0d\x30\x65\x0f\xb2\x81\x5b\x07\xfc\x38\x2e\x2e\x10\x07\xee\x56\x94\x23\xc1\x03\xf6\xd7\x36\x3b\x0e\xb8\x19\x35\x66\xc7\x92\x0f\xa1\x9e\x57\x9b\xf5\xac\x7c\xf4\x3d\xa7\x5c\xf1\x95\x5c\x61\x61\x61\x3b\x41\x85\x8d\x7d\xa2\x70\x49\xa1\x74\x11\x5b\xc4\xb9\x98\x64\x72\x22\xf2\x91\x68\x25\x3e\x68\x9a\x54\xbc\x8d\xe0\xc0\xb8\xf7\x30\x37\x51\x8c\x1b\x96\x8a\x4c\x0e\xb1\xc2\x9f\x9d\xd4\xc4\x9a\xdb\xe0\x36\x77\x9f\x2a\x18\x1f\x15\x06\x02\xac\xab\x0f\x3f\x32\xc1\x0a\xe7\x57\xda\x95\xae\x76\x65\x1b\xed\xd6\xc2\x1e\xf2\x19\x9f\x54\x5d\xc9\x50\xfd\x8c\x22\xc9\x21\xa6\x4c\x55\xcb\x28\x78\x09\x98\x30\xf2\x64\xfb\xac\x53\x40\xd5\xd0\x80\x2c\xf4\x64\xb3\x24\x11\x9a\x71\x8d\x01\x57\x2b\x6d\xb1\x90\x44\x99\x2d\xa5\xa6\x02\xe5\xca\x6a\xfb\x49\x4b\x78\xda\xb4\x88\x33\x3a\x7b\xb8\x79\x67\x28\xd5\xcd\x06\xea\x45\x2a\x3c\x91\x13\xa5\xd2\x5b\x99\x39\x17\xd7\x35\x33\x85\x9a\xcf\xf9\x44\x24\xa1\x80\xe3\x98\xcb\x0c\x50\x72\x9a\xcd\x78\xe6\x8a\x34\x26\xae\xf7\x5f\x1d\x28\x00\xd0\x74\x3d\xaa\xac\x1f\x3f\x28\x4c\x8b\xba\x0b\xc8\xf1\x92\xef\x68\x30\xc8\xbd\x37\x97\xa7\x98\x77\x49\x2b\x47\x34\x3c\x2e\xda\xc5\xc1\x69\x68\x3a\xda\x5f\xb7\x59\x07\x6a\xa8\xd8\xa5\xbf\xf5\x08\x58\xcd\x3a\x41\xa0\x46\xa7\xfd\xed\xd4\x6a\xc6\xd5\x4b\x18\x87\xa0\xee\x0c\xe5\xbc\xab\xe6\xed\x15\x8a\x4a\x32\xba\xf0\x6c\xad\xaf\x63\x52\xab\xee\x62\xca\x39\xba\xe9\x1c\x50\x17\x0e\x96\x98\xe5\xb2\x58\x50\x2d\x20\x57\xa8\xca\x6d\x74\x5c\x31\x82\x30\x6a\x54\x49\x24\x4a\xfe\xf6\x78\xd8\x50\x49\xa2\x1d\x8a\xef\x58\x9b\xc4\x13\x08\x08\x58\xa9\x26\xe1\xd5\xdb\x51\x01\x16\x01\xfa\xde\xbd\xa2\x4b\x4e\x78\x70\x2c\xd2\xaf\x21\xfb\xde\x33\x41\x6a\x9e\x67\x0f\x9c\xf7\xd9\x53\xc6\x9b\x77\x77\x44\x7b\x4d\x3e\x4a\xea\xd0\x0a\x9c\xd5\xde\x5e\xaa\x2d\x60\x69\x31\x06\x5a\xa4\x62\x2c\x72\x2a\xc8\x04\xd5\xe1\x97\x5d\xb7\x5c\xcf\x80\x9d\x38\xad\xd6\x53\x0d\xef\x66\xa9\x75\x88\xc2\x38\xbc\xa9\x31\x42\xdb\x3b\x41\x0e\xbe\x64\xd9\x8f\x39\x5c\x90\x1e\x80\x8b\x88\x8a\xf4\x38\xa6\x00\xaf\xdc\x46\x27\x2d\x52\xdd\xfc\x1c\x5c\x96\xed\x7d\x59\x27\x9d\xf3\xf3\xee\xe9\x51\xef\x3f\x5f\xb8\xa4\x93\xd0\x3f\xa9\x8a\xc0\xb2\x7f\x83\xc9\x44\x65\xb9\x2e\x1f\xf8\xf8\xea\xdc\x09\xab\xd2\x2a\x99\x09\x3d\xcf\x2c\x9b\x45\x23\x29\xaa\x23\x3c\x96\x22\x4b\x0d\x13\x39\xf4\xbf\x07\x6e\x3d\xd4\x7c\x74\x2d\x0a\x08\x04\xfd\xf8\x13\xc6\x7d\xb4\xa0\x6e\xea\xf0\xe2\xc2\x1d\x1c\xea\x26\x87\xcd\xd2\x83\x01\xda\x66\xcd\x23\x95\x0f\xfe\xe4\x43\xcb\x74\xf9\xdc\xc8\xff\x81\xad\x37\xc1\xe2\x23\x14\xf4\x50\x84\x39\x90\x46\x1e\x09\x58\x8a\xef\xd9\x7b\x60\x16\x79\xc1\x3f\xf8\xa0\x1a\xd8\xc0\xf8\xe1\x36\x7b\x2b\x10\x4d\x1d\xf2\x67\xd0\x61\xed\x4a\xee\xe3\x19\x31\x51\xaa\x04\x6a\x7b\x3e\xe3\xd8\x85\xe8\x62\x64\xa5\x2f\x72\x04\xf5\xd2\x06\x83\xc6\x5c\x4b\x70\xa7\x5a\x36\x0a\xbd\xfe\x4d\x2d\x92\x16\x15\xd9\x16\xdc\x48\x88\xdf\xba\xbe\x7b\x14\xbf\xf3\x5e\x8a\xe0\x03\xe0\x7a\x34\x95\x37\x9e\xe5\x85\xd0\xd4\x8f\x8b\xc5\x62\xf1\x13\xfb\xd1\xa5\x67\xd4\x42\x76\x3f\xe1\xf3\xc7\xae\xa3\x67\xb0\x50\xaa\x87\x25\x61\x11\xb8\xcf\x03\x77\xa3\xfe\xf3\xdf\x50\x6b\x5f\x57\x5e\x06\x85\x0f\xf9\x76\x5d\x2d\x37\x28\x7e\xe0\xcb\x14\x45\x05\xaa\xbd\x26\xe2\x5b\x85\x01\xc2\xb8\x96\x03\xe0\x31\xfe\x45\x00\x4e\xdf\x81\x29\xa4\x6c\xd5\xbd\xe7\xed\x67\xf8\xfc\x43\x34\xe5\x75\xaa\x42\xc8\x11\x58\x5d\xfb\xcf\x97\x24\xa8\x66\x73\x7c\x3c\x85\xd8\xe5\x74\x60\x17\x13\x51\x99\x84\x3b\xdf\x94\x78\x3f\xf2\x5d\xd9\xd9\x44\xdd\x08\x9d\xd7\xe1\x5c\xe8\x81\x08\x3a\xb4\x59\x5e\x58\x7b\x09\xae\xfe\xfe\xe7\x52\xe8\x85\x25\x79\x04\x55\x47\x92\xd7\x0f\xe1\x77\xfd\xb8\x88\x82\x0f\x41\xc5\x81\x09\x93\x30\x3f\xb0\x69\x8f\xfd\xd3\xfb\x5b\x44\xab\x43\xdb\xbb\x8a\xa7\xfc\xb1\x68\x75\x07\x6e\x5b\x81\x57\x67\x8f\x43\xab\x93\x8d\xbc\x16\xaf\xce\x1e\x84\x56\xaf\x1c\xc7\xb5\x78\x75\x76\x37\x5a\xdd\xd7\xea\xbc\x0f\xaf\xce\xee\x46\xab\x13\x9f\xfe\x68\x78\xf5\xe0\xbe\x06\x2e\xff\x29\xf1\xea\x90\x9d\xee\x10\xeb\x2b\xf2\xbf\x1f\x84\x57\xb7\x77\xa6\x6e\x6f\x3e\x04\xaf\x3e\x18\xe4\x0f\x43\xac\xb3\x7b\xf0\xea\x04\x44\xbf\x1f\xb1\xce\xee\xc1\xab\x0f\x06\xf9\xa3\x10\xeb\x6c\x0d\x5e\x9d\xb8\xe2\xa3\x10\xeb\x6c\x35\x5e\xdd\x31\x93\x89\x2c\xa6\xe5\xb0\x3d\x52\xb3\x7d\x31\x1b\x0a\xfd\xde\xe0\x7f\xdb\xef\xcd\xbd\x6c\xab\x39\x82\x0c\x9b\xbf\xb2\x77\x62\x5a\xa6\x9c\x7d\xcf\x8b\x5f\x12\x76\xa9\x66\xec\x88\x93\x07\xa8\x4b\x63\x55\x58\xd9\xf6\x13\x6c\x22\xd7\xe0\xd6\x12\x6c\x7c\x9f\xc6\xed\x24\xd8\x20\x03\xd8\x4e\x82\x0d\xdd\xeb\x10\xb3\x78\x62\x82\x4d\x9d\x61\x01\x18\xf8\xd3\x24\xd8\x90\x15\xbc\x4b\xb0\xf9\x37\x4f\xb0\xa1\x85\x3e\x88\x61\x71\xcd\x0d\x2f\xb8\xe1\x8b\x89\xcc\xf7\xa5\xf1\x3c\xcb\x1e\xcb\x28\x33\x90\x35\x4f\x7a\x97\xad\x35\xdc\xeb\xcb\xbd\xe7\xcf\x0e\xfe\xcc\x3a\x9a\x1b\xd6\x71\x83\xed\x52\x00\x77\x29\x80\x3b\x0e\xb5\xe3\x50\x9b\x72\xa8\x19\xd7\x23\x91\xa9\x54\x65\xbf\xf0\x7d\xf9\x8b\xbc\x54\xdc\x14\x2e\x85\x7a\x29\x3f\x90\xad\xff\xdf\x5d\xa9\x83\xeb\xde\x79\x50\x4a\x21\x63\x2b\x5d\x6b\x8f\xcb\x2a\x64\x8c\xad\x4c\x2c\xc4\x79\x6c\x31\xbd\x10\x07\xdc\x62\x92\x61\x6d\x86\x1b\xa6\x1a\xe2\x68\x4f\x4c\x38\x0c\x53\xd9\x42\xda\x21\x0e\xb6\x9d\xe4\x43\x1c\x6b\xe3\x14\x44\xbf\xbe\x2d\x24\x22\xe2\x58\x1b\xa7\x23\x46\x54\xda\x34\x29\x91\x86\xda\x4e\x6a\xa2\x27\xd5\xe6\x09\x8a\x38\xd4\x93\xd2\x14\xfd\x2c\xb6\x96\xac\x88\x23\x6e\x21\x65\x11\x07\x7a\x58\xe2\xa2\x5f\xc6\x86\xe9\x8b\x74\xb9\x37\x4c\x62\xc4\x51\x36\x4d\x65\x0c\x7c\xf0\x81\x09\x8d\x9e\x08\x9b\xa7\x35\xe2\x50\x5b\x48\x6e\x74\x7c\x65\xa3\x14\x47\x1c\xe4\x49\x89\x8e\x9e\x26\x5b\x4a\x77\xc4\xf1\xb6\x93\xf4\x48\xd7\x76\x5b\xa9\x8f\x38\xdc\xf6\x12\x20\x89\xdb\x6d\x29\x0d\x92\x6e\xf3\xb6\x92\x21\x83\x14\x7e\x68\x4a\xa4\x3f\x09\x1b\x26\x46\x86\x2f\x6f\x9e\x1e\x49\x63\x6d\x9c\x24\x49\xc4\xdd\x56\xaa\x24\xed\xfc\x96\x12\x26\xd7\x2a\x4c\x4f\x4e\x9b\xc4\x11\xb7\x93\x3c\x19\x6d\xc1\xe6\x29\x94\x8e\xdb\x6d\x2b\x91\x32\x88\x80\x2d\xa4\x53\xe2\x60\x5b\x49\xaa\x74\x0a\xc7\xe6\xa9\x95\xa4\xe4\x6d\x37\xc1\x72\xf9\xaa\x6f\x98\x66\x49\x17\x62\x1b\xc9\x96\xfe\xaa\x3e\x2a\xe5\x92\x31\xb6\xad\xac\x4b\x77\x1d\x37\x4e\xf8\xc3\x81\x36\x4e\xfb\xab\x6b\x08\x4f\xca\xc3\xc4\x41\xb6\x92\x8d\x89\x43\x6d\x96\x93\xc9\x18\xdb\x4a\x5a\xe6\xe7\xb9\x57\xdb\x4a\xd4\xc4\xd1\xb6\x92\xae\x49\xeb\xdb\x42\xd2\x26\x8e\xb4\x59\xea\x26\x8e\xb1\x85\x04\x4e\x5a\xd6\x16\xd2\x38\x71\xa4\xcd\x92\x39\xe9\xa6\x6e\x9e\xd2\xe9\xf5\x8b\x8d\x13\x3b\xfd\x48\x1b\xa5\x77\xe2\x28\x9b\x27\x79\x92\xb8\x7e\x54\xaa\x27\x63\x6c\x1b\xd9\x9e\x11\xd7\xda\x28\xe7\x93\x54\xab\x4d\x33\x3f\x9d\x86\x76\x7f\xfe\x27\xb1\x94\x27\x66\x81\x32\xff\xbf\xc7\xe7\x83\xd2\x97\x37\xcf\x0a\x0d\x93\x78\x54\x7e\x28\x7d\x7f\xe3\x2c\xd1\xf0\xf9\x8d\xf2\x45\xc3\x30\x4f\xcd\x1c\x0d\x23\x6c\x94\x43\x1a\xaf\xe7\xce\x6c\x52\x22\xe0\xe6\x39\xa5\xe1\x8b\x5b\xc8\x2e\x0d\x83\x6d\x98\x67\x1a\x06\xda\x30\xe3\x34\x0c\xb4\x61\xee\x69\x18\x68\xe3\x2c\xd4\xe8\xb4\x6d\x92\x8f\x1a\xed\xdc\xc6\x99\xa9\x4b\xf4\x7e\x5a\x8e\x6a\x34\xcc\xc6\xd9\xaa\x4b\x04\x7f\x5a\xde\x6a\x4c\xa5\x4d\x32\x58\xc3\x38\x1b\xe7\xb2\x46\x2b\xdb\x2c\xab\xb5\xc6\xfd\x9e\x9e\xdf\x5a\x39\x91\x77\x65\xba\xe2\x43\x5b\xc9\x77\xc5\xa1\xb6\x90\xf5\x8a\x03\x6d\x21\xf7\x35\x0c\xb4\x41\x06\x2c\x0e\xb2\x95\x3c\xd8\x20\x08\x1e\x9a\x0d\xcb\x18\xdb\x5a\x42\x2c\x9d\x87\x6d\xa4\xc5\xe2\x50\xdb\x48\x8e\x75\x24\x79\x7a\x8a\x2c\x8e\xb0\x9d\x44\xd9\xb0\x41\x9b\xa6\xcb\x06\xde\xfb\xa8\xa4\x59\xc6\xd8\xd6\xf2\x66\x89\xb9\x6d\x25\x7b\x16\xc7\xda\x56\x0e\xad\xe3\x95\xdb\xc9\xa4\x65\x8c\x6d\x9e\x4c\x4b\x97\x63\x93\x94\x5a\x1c\x62\x0b\x89\xb5\x38\xd0\xe6\xe9\xb5\x38\xce\x96\x92\x6c\xbd\xe4\xde\x28\xd5\x16\x47\xd9\x4a\xc2\x2d\xed\xd8\x36\xd2\x6e\x89\xc5\x6f\x31\xf9\x96\x31\xb6\x95\xfc\x5b\xaf\x7b\x6d\x98\x85\x8b\xe3\x6c\x23\x17\x97\xb8\xca\x16\x32\x72\x71\xa4\xed\xe4\xe5\xd2\x51\xdf\x46\x76\xae\x93\xf7\x1b\xe7\xe8\xd2\x35\xde\x3c\x53\x97\x0e\xc1\xa6\xf9\xba\x74\x83\x37\xcc\xda\xc5\x51\x9e\x9e\xbb\xcb\x18\xdb\x4e\xfa\x6e\x90\xd5\x1b\x25\xf1\x3a\xad\x68\xf3\x54\x5e\x6f\x01\x6c\x9c\xd0\x8b\x23\x6d\x23\xad\x97\xe6\xb4\x85\xe4\x5e\xcf\xff\x37\x4a\xf1\xc5\x51\x36\x4c\xf4\xf5\x97\x7d\x0b\xe9\xbe\x7e\x59\x1b\x26\xfd\x3e\xb0\xdb\xdc\x46\xa9\xbf\x38\xd7\x8d\x13\x80\x49\x79\xdf\x20\x0d\xf8\xd7\xdf\xe2\xd0\xf5\xe6\xc9\xc0\xe1\x2a\x47\x29\xc1\x8f\xcf\x09\xc6\x61\x36\xcc\x0c\xc6\x41\xb6\x90\x1f\x8c\x03\x6d\x94\x25\x4c\x07\xfd\xb1\xb9\xc2\x95\x7e\x6e\xbf\x2e\x16\x8b\xc5\x6f\xec\xd7\x35\xe9\xc2\xbf\xf9\x57\xb6\x93\x31\xcc\x18\xdb\x42\xd2\x70\xe4\x92\x78\x50\xde\x30\x23\xa9\xf4\xc8\xf4\x61\xc6\x1e\x64\x1e\xdc\x9f\x41\x1c\x3b\x5b\x37\x4c\x22\xde\x5c\xf3\x8f\xf3\x88\x59\xe8\xec\xb6\x59\x2a\x31\x68\x6a\x0f\xca\x26\x1e\x0c\xf2\xef\xc5\x62\x94\x29\x7e\x8d\xe9\x2d\xe1\x2c\x42\xde\xca\x85\x48\xd9\x1b\x5e\x60\x7f\xb0\x27\xe4\x7c\xaf\xc1\xad\x4f\x55\x56\xec\x9f\xf3\x39\x3f\xe7\xda\x88\xc7\x67\xd5\x7c\xc5\x4e\x78\x51\x4c\xc5\x2d\x7b\xa3\xb2\x62\x97\xf0\xb7\x9d\x84\xbf\x50\x48\x73\x4b\x09\x7f\xcc\xa8\x04\xab\x7c\xef\xd2\x69\xb6\x91\x4e\xe3\x2c\x74\xea\x70\xbc\x61\x3a\x4d\x94\x9f\x0c\x5d\x8f\x9f\x9c\x4e\xb3\x22\x3f\xd9\x2e\xfa\xc9\xe9\x34\x95\xfc\x64\x6c\xc8\xbc\x51\x3a\xcd\x1d\xf9\xc9\x73\x2d\xcd\xec\xbd\x01\xae\xf4\xd0\x84\xe4\xe7\xec\x58\x70\x2b\x5e\x21\xde\xbc\x4b\xe4\xdb\x25\xf2\xed\x7a\xf9\xed\x12\xf9\x56\xf5\xf2\x5b\xab\x00\xa5\x2a\x55\xfb\xb9\x4a\xc5\x9e\xc9\xca\xc9\xba\xd4\x61\xf6\xbf\xff\xeb\xff\x61\xff\xfb\xbf\xfe\x8b\xfe\xd3\xb4\x6f\xb5\xb6\xaf\xe9\x6c\x99\xdb\x3c\xb2\x12\xcb\xbd\x5a\xce\x96\x38\xcd\x3d\x55\x58\x36\xd0\x70\x1e\xca\x65\xf6\xf7\xd9\x76\xf5\x9b\x27\xf0\x18\x3b\x87\xad\xf2\x98\xa7\x56\x5f\x59\xab\xdb\x6c\x83\xbf\xdc\x57\x79\xe5\xe9\x7a\xcd\x06\xbc\x65\x5d\xd5\x95\xad\xeb\x34\x11\x9f\xe9\x2b\x5d\x58\xdb\xf8\xbb\xbe\xff\xe7\x60\x90\xff\xdd\x35\x89\x2f\x2e\xca\x21\xff\x4f\x8e\x79\x67\x66\xfa\x77\x5d\x0e\xf9\x07\x4e\x35\xa5\xc2\x53\xea\x56\xe4\x33\xf0\xbc\xdd\x8a\xfc\xf9\x17\x5f\x7c\xf5\x55\x68\x6c\x6c\x1f\x74\x81\xd6\x93\xde\xe5\x5d\x93\x29\x6e\x87\x66\x7f\xa8\x54\x61\x0a\xcd\xe7\x8f\x37\xfa\x0e\xf6\x9e\x3f\x3b\xf8\x9a\x5d\xde\xca\xa2\x10\xda\x9b\xa4\x6b\x9f\x9b\x0a\xf6\xd2\x7d\x8d\x75\x30\xa7\x66\xa7\xb0\xed\x14\xb6\x9d\xc2\xb6\x53\xd8\x1e\xd5\x7c\x79\xa2\x32\x9e\x4f\xc0\xd3\xf5\x61\x7f\xa4\x17\x73\x70\xbd\xac\x60\x3d\xcf\x90\xeb\xbc\x56\x8e\xdd\xb4\x59\x27\xcb\x9c\x2a\xa3\x85\x11\xfa\xc6\xc3\xaf\xab\xc0\x6b\x8c\x2c\x23\x04\x83\x52\xb3\xec\x6f\x86\x32\xa7\x4e\xfa\x33\x73\x5f\xa3\x1c\xcc\xb9\xc7\xeb\x07\xde\xeb\x0a\x3a\x7a\xdd\x75\x62\xe8\x14\x9d\x89\x22\xc0\xa2\xff\xcf\x1a\x2a\x1c\x4e\x7f\x9c\x30\x16\x41\x86\x03\x78\x27\x5c\x44\xdf\x72\x22\xc1\x7b\x98\x49\x53\xa0\x3b\x3b\x7c\x35\x4f\x6b\x53\x4a\x3d\x26\xa4\xbd\x6e\x16\x32\x8f\x09\xe2\x66\xe1\x70\xea\x7e\x22\x2b\x3a\x9b\x3e\x6d\x22\x81\x0f\x57\x59\x38\xf1\x43\x4a\x86\xe5\x85\xd0\x92\x67\x51\x5e\xb0\xf3\x92\xd7\x9a\xc6\xf8\x75\x9d\x92\x1b\xd8\x8e\xec\x5c\xfd\xaf\x95\x9a\x64\x02\x84\x1a\xcb\x55\xf8\x9b\x09\x60\xe1\xb8\xc8\x19\xb8\xdb\x87\x10\xd5\x06\xfe\x29\xf2\x54\x69\x8c\x70\xcf\xb5\x9a\xa9\x42\x38\x9c\x90\xa9\x24\x06\x2f\xb9\x35\x9d\xe4\xf0\x1e\xe6\xb9\x96\x51\xe6\x62\x60\xa1\x9e\xe3\xf5\xfa\xab\x59\xde\xcb\x77\x70\xbd\x96\xb9\x03\x85\xd7\xb0\xaa\xc7\xd9\x05\x06\xd8\x82\x37\xdd\xfe\xd9\xb2\x8c\x65\xa5\x32\xe2\x71\x11\x43\x4c\x1c\x47\x04\x66\xe2\x78\x62\x02\x1f\x5f\x7e\x71\x05\x73\x84\x2f\x46\xdc\xd1\x72\xb7\x95\xfc\xf1\xa2\xcb\x8e\x7a\x7d\x60\x65\xdd\xa3\x75\xba\xa6\x5f\xaf\xe5\x45\x6f\x4f\xbb\x17\xe4\xff\xf7\xcb\x5d\xc1\x1d\x8f\x7a\x17\x5d\xcb\xde\x7a\xa7\xe1\x5f\x87\xbd\xa3\xee\xe9\x65\xe7\xd8\xf2\xb4\xfe\x79\xf7\xb0\xd7\x39\xb6\xb2\xa1\x7b\x72\x7e\xdc\xb9\x78\x97\xd0\xa8\xfd\xee\x3f\xae\xba\xa7\x97\xbd\xce\xb1\xe7\xad\xcd\x7b\x29\x73\x7e\x71\x76\x78\x75\x01\x0c\xde\x92\xa3\x7f\xf5\xb2\x7f\xd9\xbb\xbc\xba\xec\xb2\xd7\x67\x67\x47\x40\xf1\x7e\xf7\xe2\x87\xde\x61\xb7\xff\x0d\x3b\x3e\xeb\x03\xd1\xae\xfa\x5d\x3b\x95\xa3\xce\x65\x07\x3e\x7e\x7e\x71\xf6\xaa\x77\xd9\xff\xc6\xfe\xfb\xe5\x55\xbf\x07\xd4\xeb\x9d\x5e\x76\x2f\x2e\xae\xce\x2d\xc7\x6d\xb1\x37\x67\x6f\xbb\x3f\x74\x2f\xd8\x61\xe7\xaa\xdf\x3d\x02\x32\x9f\x59\xd6\xfe\x0e\x59\xeb\xd9\x05\x48\xbe\xd5\x02\x20\xf0\xfc\xfe\xe5\x45\xef\xf0\x32\x7e\xcc\x32\xee\xb3\x0b\xbb\xaa\xb0\x56\x76\xda\x7d\x7d\xdc\x7b\xdd\x3d\x3d\xec\x56\x04\x44\xcb\x0b\x08\x90\x2a\xef\xd8\xdb\xce\x3b\xa7\x7a\x13\xf7\xc7\x7a\x89\x95\x83\x9c\xc0\xb6\xb2\xde\x2b\xd6\x39\xfa\xa1\x67\x27\x4f\x8f\x9f\x9f\xf5\xfb\x3d\x3a\x36\x40\xba\xc3\x37\x44\xf8\x58\x3e\xcc\xaf\x27\x6d\x99\xef\x73\x93\x1f\xec\x0d\x85\x6e\xdf\x1c\x3c\x51\xbd\xfd\x8a\x9d\xc8\xd1\x94\x8b\x8c\x9d\xc8\xa2\x50\x39\x6b\xce\x66\xf0\x8f\xa0\x71\x83\x07\xc0\x69\x25\xa3\xa5\xc8\x08\xd6\x1b\x9b\xa8\x3d\x37\x99\x9d\xea\xbb\x53\x7d\xff\xad\xa2\x24\x3b\xd5\x77\x7b\x45\xc7\x3c\x6b\xcb\x52\x3e\x6f\xdf\x3c\x5f\xfe\xd5\x17\x9f\x9e\xd3\xd9\x89\xec\xb8\xdc\x8e\xcb\xed\xb8\xdc\x8e\xcb\x6d\xc6\xe5\x78\x26\x3e\x8c\x84\xe1\x5a\xed\xff\x5c\xaa\x42\xa4\x80\x04\xe3\xc3\x4c\x3c\x89\xd1\x7d\xc9\x3a\x99\xf8\xc0\xf3\x54\x0b\x76\x08\xc3\xee\xa0\x2a\x3b\xa8\xca\xbf\x05\x7b\xda\x41\x55\xb6\x15\xd6\x09\xcc\x29\x4f\x17\x13\x5d\xe6\xb7\x3c\x4b\xf7\x27\x6a\xef\xbd\xd4\xfc\x49\x96\xe6\x57\xac\x93\xa7\x0b\xf6\x9a\xc6\xda\xa9\x4c\x3b\x95\xe9\xdf\x82\x27\xed\x54\xa6\x8f\x5a\x8d\x3a\x9d\x68\xf9\x9e\x67\x37\x7c\xff\xfd\x6d\xb1\x37\x59\x13\x23\x39\x78\xce\x8e\xf8\x8d\x60\xaf\xe9\xe1\x8f\xa2\x11\xed\x20\x2d\xff\x3d\x90\x96\xad\xf3\x9c\xcf\x21\x0a\xbb\x83\xb4\x7c\x76\x90\x96\x98\xcd\x8c\x79\x21\xa7\xfb\xa6\xd0\xe5\xa8\x78\x4a\x43\x0e\xf6\xca\x0e\xc0\x3a\xda\x64\x7c\xd7\x89\x63\xa7\xfb\xec\x74\x9f\x9d\xee\xf3\x34\xdd\x27\xe6\x4a\x88\x11\xd9\x9f\x6b\x55\xa8\x61\x39\xc6\x07\x5f\x2b\x97\x87\x0c\x89\x5c\xe7\xf6\x8f\x23\x95\xb1\x97\xe5\x78\x2c\xb4\x61\x7b\x14\xf5\x1f\xfc\xc9\xb0\x94\x17\x1c\x8b\x4d\x63\xe5\x36\x4a\x7f\xac\x73\xb1\xe7\xcf\x0e\x9e\x2d\x81\x4c\xd6\xa1\x4c\x56\x28\x69\x2b\xe7\xf9\x19\x43\x51\x3e\x13\x2c\xca\xbf\x2c\x18\x65\x87\x46\xd9\xa1\x51\x76\x68\x94\x7f\x25\x34\xca\x4a\xa6\x6f\x6f\xf3\xfe\x44\xed\x41\xd3\x60\xcb\x04\xf2\x75\x59\x27\x5f\xd0\xdd\xdf\x41\x17\x77\xd0\xc5\x1d\x74\x71\x27\x2c\x76\xc2\xe2\x5f\x56\x58\xac\xb2\x63\x66\xc3\x67\xfb\xa9\x1c\x8f\xd7\x3a\x6f\x4f\xb8\x2e\x64\xce\xfa\xa3\x69\xce\x87\x22\xfb\x9d\x88\x09\x16\x84\xc4\x41\xbd\xe6\xf9\x63\x45\x44\x85\x2f\xbb\x6a\x1b\x8f\x96\x12\xcf\x97\xa7\xf1\x40\x19\xb1\x3c\x13\x9c\xc4\x53\xc4\x04\x5b\x25\x24\x70\xb8\x87\x4a\x0a\x56\x97\x13\x3b\x4e\xbb\xe3\xb4\x3b\x4e\xfb\x00\xb5\x3c\x2f\xff\x32\xe5\xc5\x68\xba\x3f\x51\x65\x29\xd3\x25\x96\x7b\x88\x68\x49\x36\x5c\xb0\xef\xf5\x2f\x0b\xf3\x4b\xa1\xc6\xec\x7b\x75\xcb\x33\x79\xcd\x46\x53\x2d\xcd\xdf\x71\x88\x36\x94\x34\xdd\x01\x8b\x76\x4d\xef\x77\x8e\xec\x9d\x23\x7b\xa3\x20\xfe\xfc\x7a\xb2\x2f\xb4\xf6\x48\xea\x65\xf0\x50\x82\xf1\xfb\xc3\xa9\xc8\xc5\x82\xa5\xfc\x46\xfc\x7d\x04\xff\x6e\xe7\xc2\x2a\x6c\xbf\x37\x7d\x70\x53\x8f\xc1\xb2\x3a\xf8\x04\x6d\x70\xe5\x3c\x36\xd3\x07\xb7\xab\x0e\x7e\x62\x6d\x30\x66\x3b\xf6\x8c\x3d\x55\x1b\x64\x35\x5d\x30\x30\xa6\xc7\x69\x83\x6b\xf8\xce\x85\x1d\xf0\x11\xda\x20\xad\x77\xbd\x32\xe8\xe0\x93\xf7\xa9\x83\xec\x21\xca\x20\x28\x6a\x6b\xd5\x41\xf6\x38\x65\xd0\x32\x94\x95\xea\x20\x7b\x82\x32\x68\x19\x4d\x5d\x1d\x64\x1b\x28\x83\x96\x7b\xa2\x3a\xc8\x7e\x2f\xca\xa0\xe6\x32\x5f\x8c\xf8\x5c\xec\x97\xb9\x4c\x85\xe5\x3c\x2b\x62\x7f\x5f\xb2\x0b\xfb\x1c\x3b\xe4\x73\xc1\xfa\xed\xe3\x36\x9b\x8a\x2c\x53\x7f\xf7\x6f\x53\x4d\x0e\x7b\x47\x76\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x77\xfd\xff\x57\x68\x08\xbb\xfe\xff\x9f\xfb\x5e\xed\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\x2f\x33\x61\xb6\xeb\xff\xcf\x1c\xb7\xdd\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\xdf\xf5\xff\x87\xff\xed\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\xef\xfa\xff\x57\x26\xfa\x6f\xd4\xff\x7f\x55\x0a\x78\x61\x05\xf3\x44\xed\x17\xae\x84\x27\xdb\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xdf\x41\xc9\x77\x50\xf2\x1d\x94\x7c\x07\x25\xff\x3d\xee\xd5\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\xbe\x83\x92\xef\xa0\xe4\x3b\x28\xf9\x0e\x4a\x7e\x0f\x94\x3c\x42\x92\xa7\x22\x97\x46\xe4\xd7\xd0\x82\x72\x6f\x66\xcc\xcf\x59\x3a\x5c\xdb\x59\xac\xde\xd5\xf8\x77\xd1\x48\x62\xd7\x7f\x72\xd7\x7f\x72\xd7\x7f\x72\xd7\x15\x6d\xd7\x15\x6d\x5b\x8d\x30\x5e\x96\x3a\x2f\xfa\xa5\x99\xca\xd0\x0f\xeb\xa4\x77\xe9\xe5\x58\xf3\xa4\x77\xd9\x5a\xdb\xbc\xf8\xf2\xec\xe4\xd8\xa1\x5e\xb7\xdf\x13\xcd\x75\x07\xdb\x66\x4f\xb4\xc0\x29\xb7\xd2\x13\xcd\x72\x29\xc5\xb6\xd3\x13\x2d\x6a\x1e\xb6\x51\x4f\xb4\xc1\x20\xaf\x75\x45\x63\x9f\xaa\x27\xda\x60\x90\x73\xdf\xec\x6d\xd7\x13\xed\xdf\xb6\x27\x5a\x6d\x3b\xed\x0e\x37\x7e\x4a\x7e\xfc\xfa\xa7\xe4\xc7\x67\x49\xa3\xf1\xd3\x4f\x49\x63\xca\x4d\xf7\x86\x67\x8d\x17\x63\x9e\x19\xf1\xdb\x9f\x92\x99\x28\xf8\x8b\x5f\x67\x2a\x2d\x33\x71\xca\x67\xe2\x45\x03\x2e\xbb\xfc\x45\xec\xcf\x55\x6a\xf6\x31\x00\x62\x7f\xc4\x03\xb8\x5f\x88\x19\x18\xda\xed\xe9\xd0\x34\x7e\xfb\xad\xf5\x07\xd1\x4e\xc5\x98\x97\x59\xf1\x6d\xf1\x5b\x2b\xc1\x4c\xc0\xe6\xda\x51\x48\x0b\xd9\xf7\xb9\x6f\xba\x91\xfc\xd8\x10\x1f\xec\x31\x35\x8d\x9f\x12\xe7\xf3\x6b\x8a\xd6\xaf\x08\x66\x6a\xe3\x90\xe7\x5a\xcd\x85\x2e\x16\x4d\x91\x34\xfe\xf9\x4f\x61\x4e\x60\xca\x8d\xe4\xd7\x1b\x9e\x95\xe2\xc5\x7f\x3c\xfb\xad\x95\x84\xa9\xdc\x28\x99\xb2\x67\x7f\xb8\xe1\x9a\x15\xdf\x76\x67\x43\xa1\xdb\x87\xfe\x8b\x6d\xf1\xa1\x10\x79\xda\xfc\x95\xcf\xe7\x27\x76\xfd\xf8\x80\xcc\xe1\x73\x14\x51\x6a\xb6\x9e\xbc\x36\xad\xca\x42\xc4\xcb\x4a\x1a\xc2\x7e\x61\xcf\x58\x6b\x46\xec\x59\x56\xbe\x3f\x93\x1f\x64\x6e\xf6\xed\xbf\xad\x49\x0c\xb9\x39\x7b\xf0\xe6\x1e\xfc\xa9\x42\x8b\xa4\xd8\x16\x35\x72\xa2\xc6\x85\xfd\x92\x23\x44\xe1\x9e\x4c\xee\x21\x49\x62\x04\x70\xa3\x75\x7f\x9e\x64\x6a\xc8\xb3\x75\x7f\x1d\x8a\xb1\xd2\xe2\x44\xa5\x22\x6b\xb6\x7e\xb5\x0c\xae\x3d\x11\x45\xb3\x41\x83\xb6\xa5\xe9\xa4\x33\x99\x37\x5a\xff\xeb\x7f\xc1\x1f\x01\x50\x0a\x3c\xf3\x52\x35\x1b\x96\x52\xed\x4c\x4d\xec\x03\xbf\x25\x33\x1a\xe5\xb7\x84\x8f\x0a\x79\xc3\x0b\x51\x19\x72\xa8\xd5\xad\x11\xba\xd1\x6a\x1b\x51\x5c\xca\x22\x13\xcd\xc6\x39\x05\x06\x0f\x01\xfa\x95\xa9\x49\xa3\x55\x3d\xbf\xf9\x23\xf6\xd8\x5d\x83\xff\xae\xd3\xfb\xe6\xf2\xe4\xf8\x25\xd7\xa6\xed\x3e\xdc\xfc\x55\xa6\x2f\x1a\xe6\xe7\xdb\x9f\xaf\xbf\xff\x85\x37\x92\x61\xa6\x46\xd7\x2f\xfe\xf4\x6b\xc3\x2c\x66\x43\x95\x99\xc6\x8b\x1f\x7f\x4a\x1a\x1e\xed\x60\x7f\xfe\xf1\x20\xf9\xf1\xf9\x5f\x93\x46\xc6\x17\xaa\x2c\xf6\x33\x35\x51\x7b\x53\xc1\xad\xfc\x6d\x24\x79\x99\x65\xc9\x8f\x3f\x36\x0a\x4b\xac\x46\xd2\x48\x85\x19\x35\x92\x86\x1c\x29\x60\x22\x8d\x23\x22\x48\x44\x3e\x1c\x6d\xa4\xf2\x11\x2f\x2c\x1d\x5c\xd8\x4b\x97\x39\xe8\x17\xf6\x81\x2f\x93\x1f\x1b\x74\xa6\xec\x35\x40\x11\x08\xac\x88\x75\xf1\x87\x15\x8f\x51\xda\x0e\x3e\xd6\x1c\x96\x32\x4b\x57\x3c\xe5\xb2\xb2\xe0\xb1\x56\xe3\x27\x58\xc2\x4f\xf4\x18\x00\x48\x78\x0e\x97\xaf\x67\xd7\x90\x34\x3a\x79\xae\xca\x7c\x24\x1a\x3f\xd9\xff\x25\xc0\x01\x91\x35\xa2\x28\xb4\xcb\xb4\x14\x7a\x9e\x34\xc2\x7e\x23\x4e\x70\xcf\x2e\xd7\xbd\xb2\x19\x1b\xad\x1f\xa0\x27\xf2\xd1\xdf\x33\x8f\x89\xf8\xc0\x8b\xf8\xc6\xfc\xb3\x2d\x4d\xf7\xe7\x92\x67\x4d\xd1\x2e\xac\xea\x5a\x58\x52\x46\xbb\xd1\x96\x79\x2a\x3e\x34\x5a\x7f\xfc\xe3\x0a\xfe\x10\x9e\x42\x50\x58\xf6\x94\xeb\x6d\x04\xd7\xa3\xe9\xe7\x21\x9d\xee\x66\xa6\x1c\xd3\xec\x5f\xfc\xaa\x05\x50\xa5\xd9\xfa\x55\x8e\x9b\xab\x98\xea\x6b\x18\x87\x58\x6b\x4b\x8b\xa2\xd4\x88\xcf\xc1\x07\xf1\x33\x8d\x56\xdb\x0f\xf4\xdb\xd2\x71\xfc\xc3\x03\xe9\xf6\x7b\x3e\x95\x9f\x56\xf2\x55\x36\xe9\x11\xf2\x6f\xfd\x76\xe2\x96\xf4\x0b\x5e\x94\xa6\xd9\x7a\x84\x9c\xec\xc3\x8b\xac\x9b\x4f\x64\x2e\x36\xb8\x44\x9f\x89\x88\x9c\x7d\xbf\x7f\x34\x99\xfc\x67\xe7\xe3\x8b\x48\x24\x5c\x23\x69\x5c\x08\x94\x59\xe0\x9a\x46\x6a\x22\xe7\x5a\x2f\x9c\xe8\xdd\x7b\x44\xd3\x5f\x63\xd1\x84\x23\xef\xd1\xc8\x6e\x72\xf1\xb6\x83\x90\xc4\xbf\xff\x94\xfc\x88\xdf\x86\x83\x63\x45\x26\x8c\x86\x5c\xa4\x61\xff\xf8\x45\xf2\x2c\xf9\xd1\x0a\xb7\xf0\x0a\x08\xd4\xe5\x09\x6d\x6a\x49\xd4\xce\xc7\x13\x25\xa0\x99\x15\xf3\xdf\x15\xa3\x36\xfc\x46\xf4\x4f\x2e\xcf\x37\xe7\xd4\x6e\xa4\x43\x28\xbb\x80\x43\xc1\xbe\xb6\x2d\x51\x5a\x6d\xcb\x58\x9b\xe2\xdb\xbf\x89\x15\xac\xfc\x61\x74\xdd\x31\xf2\x4f\xc4\xc8\x69\x69\xfd\x1f\xce\xdb\x53\x6e\xa6\xcd\x5f\xed\x76\xbc\x58\x71\x06\x26\xa2\x88\x8e\x40\xeb\xb7\x47\x71\xf8\x93\xcb\x73\xd6\x17\x45\x21\xf3\x89\x79\x12\x87\xb7\x67\xe4\x33\xe1\xef\xdf\xcd\x7e\xfe\xbf\xde\xab\xfd\xb7\x1f\x9f\xbf\x9f\x70\x99\xb1\xbe\xd0\x37\x96\xdb\x34\xfa\x10\x21\x59\x40\xe2\x38\xc0\x50\x05\x20\xfb\xb8\xcc\x6a\x90\x52\x23\x10\xc6\x5b\x1a\x80\xbd\xdd\x48\xc2\xa1\xe5\x2a\x8a\x84\x0b\x3b\x8c\xb9\x53\x40\xe4\xe9\xe3\xc4\xc3\xac\x98\xef\x19\xb7\xc9\x7e\x71\xc8\xff\x93\x86\xe3\x21\x8f\x91\x0c\xd1\x3b\x1f\x4b\x34\xc4\x07\xeb\x89\x82\xe1\x33\x39\x97\xf3\xe3\xa3\x2f\xfe\xda\x7d\xf7\x8f\x87\x9d\xcb\xaf\xfc\x99\x9c\x71\x53\x08\xbd\x97\xf3\x1b\x42\x43\x35\x92\x1f\xed\x1e\x35\xfe\x6e\xa0\x5c\x81\x48\x7b\x85\x98\xc1\x81\xf4\xbb\x6b\x37\xc2\xef\x40\xb2\x3c\x58\xa1\x54\x36\xe4\x9a\x46\xfa\x09\x76\xf3\xd7\xda\x0c\xdc\x69\x2a\xec\x08\x7f\x49\x1a\xa9\xbc\x69\x24\x85\x2e\xed\xe6\x1e\x3c\x4b\x1a\x00\x1f\x69\x24\x8d\x5f\x54\x2e\xf6\x0e\xec\x43\x7f\x0d\xce\xc5\x87\xbf\xf9\xdc\xbd\xe9\xdf\xba\xff\xc5\x8c\x0f\x45\xc6\x46\x2a\x53\x7a\x6f\xa2\xf9\x62\xef\x2f\xcf\x9e\xad\x1a\x66\x30\x28\xbc\x9b\xc2\xdd\x89\xb5\x0e\x88\xe8\xe0\x06\x57\xc4\xca\x97\x22\x77\x44\xfc\x92\x73\x4c\xac\x7c\x27\x76\x4e\x44\x2f\xb5\x2a\x4b\x5e\x22\xde\xa3\xa9\xf9\xc5\xf2\x3e\xc0\x15\x9c\x73\xcd\x67\xa2\x10\x1a\x0e\xdb\x6f\x75\x66\x11\x0e\xc8\x44\xcb\x74\xdf\x25\xb7\x3d\xe2\x80\xd4\x46\x30\x32\x15\x0f\x3e\x60\xf7\xaf\x8d\x86\xdb\x23\xbc\xfc\x9a\xbd\xbe\x6f\x10\xcc\x79\x5f\xf3\xf2\xfd\xef\xa3\x18\x08\x6f\x73\x2b\xd3\xa5\x29\xb0\xe0\xcf\xd2\x76\x3d\x74\xd8\x4c\x9a\xda\x82\xec\x4f\x5f\xda\x3f\xe4\xd7\x7b\x85\x0a\xac\x1a\xe4\xb9\x38\xa4\xf7\xfc\xb4\xf8\xc4\xf2\x50\x7b\xc6\x40\x49\x43\x46\x80\x9c\xc1\x4a\x2b\xcb\x1c\xe8\xeb\x2b\x7c\x22\xeb\xf6\xa5\xa8\xfd\x3f\x5a\x84\x0c\x4b\x38\xf0\x53\xa8\xb9\xfd\x52\x2b\x20\xd9\x9d\xa2\x2b\x62\x53\x28\x38\x56\x30\x8f\xd5\x13\x58\x47\xc5\xdc\x92\x20\x50\xf1\xb5\x5b\xde\x7d\x37\xc1\x39\x09\x3f\x36\xbd\x81\x65\x99\x4f\x42\xee\xc3\xa9\x18\x5d\x0f\xd5\x87\x8f\x48\xee\x63\x5a\xdd\xe7\x42\xed\xb1\xca\x52\xfb\xcd\x4f\x41\xee\xd7\x5a\xa6\x1f\x91\xd4\xfd\x39\x1f\x89\xcf\x88\xd4\x56\x8b\xfd\x34\x84\x3e\x87\x80\xfc\x47\x24\xf5\x95\x55\xd0\x4f\x7c\x25\xcb\xcf\x87\xe6\x13\xad\xca\xf9\xa7\x22\xba\x9a\x67\xe2\x63\x13\xfd\x35\x2d\xf0\x73\x21\xb8\xcc\x0b\x31\xa1\xc2\x7e\x9f\x84\xec\xbd\xea\x04\x3e\x16\xf1\xab\x9f\x79\x04\xf5\xe5\xb8\xe1\xcc\x46\x72\x7d\x58\x62\x56\x9c\x1f\x6e\xd6\x4b\xc4\xfb\xd8\x9b\x67\x6d\xc8\x07\x6f\xda\xd6\x55\x9d\xfc\x71\xc2\xe0\xd1\x5b\x16\x3b\x21\x3e\x9b\xfb\xc2\xcb\x62\xfa\xa9\x48\x7e\xac\x46\xd7\xe2\x23\x13\xbd\x13\x5c\x9c\x4b\xaa\xff\x3d\x74\xc7\x3c\x45\xb8\x2d\x7f\x4d\x1a\xe2\x67\x7f\x6f\x82\xad\x68\x0a\xa5\xf9\x44\x9c\x23\x5e\x58\xa3\x0b\xa6\xbe\xda\x7e\xa1\x74\x78\x24\x69\xf4\xff\x71\xec\x4e\x41\x58\xf9\xa7\xb9\x6f\x2e\x74\xf1\xe0\xed\xdf\xfa\xa5\x73\xb1\x93\xc7\x9c\x80\xc7\x6b\x62\xf4\x99\x87\x6d\xfe\x43\xd8\xe7\xba\x03\x11\x79\x29\x96\x17\x4d\x30\x96\x46\xd2\xe8\xe6\x85\xd0\x73\x2d\x8d\xe8\xfa\x17\x3e\xed\x51\xe0\x65\x2a\x8b\x4f\x78\x12\x5e\x96\x45\xa1\xf2\xce\xa8\x4e\x8c\x8f\x72\x1e\x3a\x76\xb1\xec\x18\x90\x21\x1b\x1d\x89\x4d\x8e\x4a\xa6\x1c\x4f\xfa\x29\xb1\x1b\x34\x9e\x2a\x70\x2f\x7c\xca\x53\x30\xe4\xa3\xeb\xf2\x93\x89\xe0\x23\x5e\xf0\x21\x37\x8f\xd3\x59\x1f\xbd\xf9\x2f\x61\x8d\xec\x8f\xec\x42\x58\xf6\x2d\x76\x6c\xe1\xae\x03\x21\xb3\x4c\xe6\x93\x4f\x75\x22\xde\xf0\x3c\x35\x53\x7e\xfd\xb1\x8f\x84\x5b\xe5\x16\x4e\xc2\x47\xdd\x0e\x82\xa0\x7d\x12\xc3\x26\x06\xe1\x7d\x24\xa3\x26\x00\x14\x1f\xac\xa7\xd5\x96\xbd\xc6\xb7\xbb\xea\xd7\x2b\xbc\xf6\x77\xba\xdf\x57\x39\xcf\x9d\x97\xfb\x31\xce\x73\x02\x2a\xaa\xb2\xc8\x44\xd1\x58\x8e\x09\xde\x3d\x8f\xfb\xff\xb8\x41\x0c\x6f\xc3\xf0\x1d\x38\x98\x3e\x0f\x60\x87\x9d\x4a\x1f\x63\xff\xab\x01\x01\x8d\x12\x42\xeb\x04\x1a\xe8\xdf\x8c\xd6\x3c\xe6\xa2\xf6\x89\x59\xe4\xa3\x5e\x7e\xae\xd5\x44\x0b\x63\x5e\xfc\xc7\x41\x62\x47\x80\xda\x2a\x2f\x9e\x7f\x95\x64\x8a\xa7\x57\x76\xfd\x76\x79\x21\x86\x1f\xcd\x03\x23\xff\x87\x6a\x36\xcf\x44\x21\x9a\x22\xa9\x3e\x05\x23\x35\x5a\x01\x02\x82\xa3\x18\xfb\x77\x8a\xfc\x0a\x8f\x15\x00\x54\x8a\xca\x3b\x29\x7c\xd3\x7e\x72\x09\x72\x52\xfd\x32\x4f\xd3\xa6\xa8\x8f\x3d\x09\x63\xb7\xda\xf3\xd2\x4c\x71\x5b\x9a\xf8\x1d\x3f\xbc\x79\xd8\xf8\x2f\xcb\xec\xda\x7f\xa3\xd9\x72\x1f\x09\x84\x69\x34\x68\xdc\x23\x81\x14\x58\x4f\x28\x2d\x66\xea\x46\x3c\x6c\xb4\x3e\xbf\xb9\x73\x2c\xc3\x1f\x3a\xd2\x39\x37\xe6\x56\xe9\x14\x21\x2f\xeb\xc6\x2b\xe7\x29\x2f\x44\x78\xb6\x2d\xd3\xa4\x80\xf7\x5f\xc9\xac\xc0\xdd\xa8\x7d\x41\xe0\x44\x17\xf9\xe8\x7b\xb1\x18\x65\x8a\x5f\x3b\xa0\x07\x6c\x6f\xf5\x68\x35\x92\xff\x78\xd6\x4a\xea\xb8\x91\xfe\xcd\xc8\xae\xa5\x32\x44\x7d\x49\xab\x07\x3b\xa0\xc1\x56\x91\x6e\x91\x8f\x8e\x8f\x3a\xe7\x1b\xcc\x06\x5f\xdf\x6c\x26\x4f\xe5\x34\xbf\x67\xa8\xd3\x83\x19\xd4\x3d\x98\xa8\x15\xb0\xa6\x5a\x52\xc6\xe3\x91\x4c\xb9\xb8\x8d\xd1\x4c\xe7\x5a\xcd\xa4\x11\x35\xbe\xb1\x9e\xb3\x35\x1a\xc9\xc1\xb3\x67\x74\x26\x8a\x6f\xff\xf6\xab\x68\x16\x76\x9b\x1f\x83\x73\x82\xe3\xf1\x14\x7c\x13\x9e\x8c\xcf\x04\x48\x72\xbb\x9f\x16\x57\xaa\xf3\xfe\xe3\x03\x9c\xea\x01\x90\xa4\x81\x3f\xb0\x21\x37\x72\x14\x57\x3e\x49\xd8\x9c\x58\x17\xa6\xcc\x47\x45\x16\x1e\x14\xc1\x79\x30\x8a\xc9\xee\xc4\x1e\x44\xde\xc3\xf4\x31\x04\x95\x34\xbc\x6c\x89\xff\x6d\x1e\x03\x68\x0a\x23\x84\xec\x91\xfb\x1e\x35\xeb\xd1\x4f\x77\x2e\x02\xe2\xfe\x4b\x6b\xa8\xb3\xb7\x48\x8a\xdb\x6f\xc6\xdc\xde\xff\xc2\x72\x4b\xf8\x01\x45\x05\xfc\x13\xa5\x21\x3e\xc2\x6f\xf0\x1f\x4e\xba\xac\xa4\x08\xb8\xee\xab\x1f\xf7\xbf\x0f\x73\xb8\x9b\x78\x95\xd9\x3d\x80\x82\x7e\xf2\x0f\x78\x96\xd6\xf6\x80\x27\x69\xe9\x0f\xf9\xbe\xa5\xcc\x03\x9e\x8b\x08\xf7\x91\x70\x6e\x55\x06\xf3\x28\x4d\xd9\x25\x63\x7f\x1e\x2a\xf2\x63\x27\x0d\xd0\xf2\x35\x53\x4f\xc2\x4b\x24\x6f\x11\x22\x09\xc7\xe0\x63\x8a\xd7\xe5\x75\x45\x32\xd6\x4d\xfd\x6e\x39\xeb\x9e\x6a\xb4\x12\xb7\xab\x77\xbf\xe0\x85\x4b\x2b\x21\xa0\xd2\xdd\xcf\x3b\x34\x53\x2b\xc9\x64\x7e\x7d\xf7\xb3\xf6\x09\xfb\xa0\x1a\xf1\x0c\xe2\x06\xeb\x9e\xb3\x0f\xec\x51\xf8\xe1\x7e\x2d\x01\xf4\x1d\xbd\x16\x57\x8d\x98\xad\x4b\x3e\x7c\xd1\x28\xd4\xa8\x91\xfc\x5c\x0a\xbd\x38\xb7\x46\xa6\x79\xf1\x63\x03\x0a\x9c\xe5\xc5\x39\x9f\x88\x5e\x6a\x19\x1f\xd4\x8f\x69\xfc\x94\x8c\xa2\x5a\xa2\x98\xb6\xf0\xa2\xd1\x48\xa0\x1a\xd6\x8d\x9d\xbe\xff\x4d\xb0\x58\xfa\xf8\x29\x34\xf4\xbd\xa6\x8c\xea\xa2\x9f\x05\x58\x3a\x56\x3d\x9d\xaa\x5b\xfb\xd5\xaa\x76\x1f\xa9\x0b\x23\xbb\xf5\x56\x9d\xf9\x3f\xe6\x7c\x22\xf6\x1a\x6d\x74\x67\x34\x45\xcb\x5b\x06\x47\xb4\xbb\xd5\x31\x6a\x27\x63\xbd\x95\x00\xc7\x78\xd1\x2f\x47\x23\x61\x4c\xb3\x61\x47\x4c\xad\xce\x9a\xdc\xa9\xbe\x08\xfc\x0b\x78\x37\x5a\x6b\x9f\xb5\x1b\x76\x14\x4a\x79\xb9\xb7\xc4\x87\x91\xd0\x73\x6b\x0a\xda\x35\x1c\xaa\xf9\x02\x69\x60\x2f\x4f\x26\x0a\x96\x7f\xbb\xbc\x8e\xb6\x4c\x1b\xad\x44\x45\x7f\xb1\x04\x31\xf6\x84\x7e\xfb\xe3\xaf\x73\xd8\xb9\x17\xe2\xb7\x9f\x1c\x81\xee\xa2\x84\x55\xe5\xa6\x32\x4b\xb5\xc8\x9b\x2a\x11\xad\x56\x22\xbf\xfd\xf1\xa7\x3f\x98\xf6\x58\xe9\x2e\x1f\x4d\x9b\x4d\x91\x28\x4b\x20\xf9\xa3\xfa\x69\xc5\x5c\xc2\x48\x23\x37\xf7\x3c\x11\x6d\x9c\x84\xb5\x94\x5a\x49\xa4\x5c\xf2\x2c\x6b\xca\x98\xec\xf9\xb7\xdf\x7e\x5b\xfc\xf1\x8f\xcd\x70\x30\xe6\xee\xe0\x35\x62\x52\x62\x9a\x61\xfb\x9f\x78\xb4\x4f\xa4\x3d\x0b\x72\x08\xb6\xe3\x58\x0b\x33\x6d\xc6\x0f\x47\x17\x0f\x57\xe8\x8e\xc5\xb1\xcc\xaf\xcd\x0a\x72\x00\x41\x57\xda\xe2\x76\x28\x83\xb6\x38\x59\x51\x27\xea\x46\xfc\x5b\x6d\x11\x11\x23\x4f\x9b\x20\x71\x27\x02\xe5\x78\xda\x48\xac\xd6\x2b\x92\x11\xcd\x0d\xf8\x77\x30\xd2\xef\xa7\x11\x10\x28\xc7\xdf\x01\xb9\x4c\xf4\x50\xd0\x4a\x5b\x7f\x90\xe3\x26\x3d\x36\xd7\xaa\x70\xfc\xf5\xdb\x6f\xbf\x35\xd6\x5a\xa1\x5f\x5c\x2e\xe6\xa2\x7d\xac\x46\xd7\x94\x8f\x63\xdf\x12\x61\xf0\x6f\xbf\xfd\x96\x7e\xd2\x22\x83\x7a\x9d\xbd\x34\xe4\xee\x80\xac\xb9\x95\x79\xaa\x6e\xdb\x2e\x52\xd3\xd6\xc2\x9a\xae\xcd\xd6\x1f\xec\x02\xe4\xb7\xb0\x6b\x2f\x44\xbb\x50\xdf\xf5\xcf\x4e\x9b\xbf\x52\x61\x8f\x5e\x8a\x82\x0b\x74\x8a\x62\xcd\x5f\x7f\xfb\xc3\x5d\xdb\xe2\x7c\x0c\x13\x61\xf7\x37\x22\xc8\xf2\x3e\xac\xe6\x50\xc9\x5d\xa3\x8f\x45\x31\x9a\xda\xc1\x4d\x53\x25\xcb\x99\x30\x56\xc3\x59\x7f\xfe\xf1\xd4\x26\xe2\x11\xd7\x4b\xdd\x77\x91\x7e\xf3\x0e\x18\x7f\x96\x2c\xbf\xb6\x54\x2e\xd6\x5e\xa5\xfc\x5b\x70\xbd\xa8\x6f\x45\xdb\x1d\xb8\xca\x79\x71\xd7\x4b\xde\x79\x01\xe2\xab\x64\x92\xbc\xf5\x87\x30\xc1\x9a\xdc\xb3\xfa\x64\x2b\x51\xff\xb3\x29\xc1\x57\xd6\x74\x77\x36\xff\xed\x6e\x6a\xa7\xb0\x20\x24\x77\x91\xe4\x2b\xb6\xf0\xfe\x6d\x5a\x47\x83\x27\x6f\x9e\xa5\x78\xeb\xc5\xc3\xa6\x6d\x67\xfd\xb9\xcc\xd9\x9e\x92\x5e\x6e\x84\x2e\xa8\x5b\x79\xe4\x9b\x5c\xe3\xb6\x28\xee\x99\x32\x4f\x53\x5c\xe5\x9a\xf9\xc6\x6e\xd3\x3a\xe3\xc2\x00\x62\xab\x8d\x4d\x47\xe4\x2f\x02\xa7\x6b\x67\xfb\x87\xe5\xa7\xe0\xd8\xe4\x44\x81\xda\xbd\xc5\x45\x3d\xe6\xea\x3e\x9d\xbe\xf9\x2a\xfa\xba\x79\x41\x39\xf0\x97\xa5\x69\x53\x69\xa6\x30\xbc\xfd\x6c\x27\x4d\x2d\x9f\xb7\x37\xaf\x95\x34\x0a\x3e\x6c\x00\x1b\xb5\x63\x58\x76\xfb\x3f\x97\x5c\x4d\xe0\xff\x8a\xa6\xe8\x94\xe1\x68\x9a\x08\x01\xae\x4f\x9e\x7e\x6b\xb2\x72\xb2\x92\x26\xf5\xe7\xc3\x17\xf0\x0d\x98\xe2\x8b\xe6\xda\xeb\x8c\x4b\x28\xc0\x7f\xdb\x8a\x78\x90\x93\x54\x1d\xf3\x32\x53\xa3\xeb\xc7\x9e\xaf\xaa\x45\x40\x9e\x71\x1a\x28\xbe\x43\x4d\xff\x41\xc7\x2b\xc9\x2b\x7e\xb7\x9a\x8a\xb7\xd2\x2b\xb5\x77\x2b\x2e\xe1\xb6\xae\xd8\x11\xa4\xef\x23\xf7\x21\xa2\xd1\xa5\xf3\x74\xd5\x9c\xe5\x35\x1b\x8a\x54\xeb\x8e\xf1\xcf\xaf\xbd\x67\x49\x71\x9f\x70\x73\x63\x30\xe3\xf4\x70\x20\x60\x09\x95\x52\xeb\x11\x85\x15\xc4\xf3\x0f\xde\xb7\xe8\xd5\x1c\x60\xed\xbc\xfc\x0c\xd2\x46\x24\xc9\xfa\xff\x3f\x7b\xff\xba\x1c\xb7\xad\x25\x8a\xe3\xdf\xf5\x14\x14\xa7\x4a\x69\x8e\xd9\x2d\xc9\x4e\xf6\x4e\x7a\x76\xc7\x23\xcb\x76\xe2\xb3\x7d\xd1\xb6\xe4\x64\xf6\xc8\xaa\x14\x9a\x44\x77\x23\x62\x03\xdc\x04\x28\x59\x91\xbb\xea\x7c\x3a\x0f\x70\xea\x3c\xc0\xff\x59\xfe\x8f\x32\x4f\xf2\x2b\xdc\x48\xf0\x4e\xf6\x45\x6a\x3b\xca\x07\x47\x4d\x82\xc0\xc2\xc2\xc2\xc2\xc2\xba\x8a\xac\xef\x1e\xd4\x97\x9d\x04\x4f\xa5\xe4\x58\xbf\xef\x65\x32\x13\xb3\xd7\xea\xfd\xbf\x4d\xbc\x9a\x77\xff\x1a\x5e\xc1\x60\xbd\x48\x10\x5d\x7e\x19\x18\x38\x03\xd3\xf4\xb6\x5b\x25\xd1\xd8\xce\x0e\x93\xdf\x33\x30\xcd\x4b\x57\x15\x97\xd5\xc6\xdd\x72\x6a\x6e\x92\x17\x3e\x12\x17\xce\x0c\x7f\x31\x74\xbf\x03\x3d\x0a\x6f\x98\xe4\x69\x91\xe2\xb1\xb8\x61\xd9\x4e\xce\x84\x60\xb0\x74\x1d\xa9\x7a\x6b\x2a\x0e\x6e\x19\x18\x0f\x6d\x1d\xbd\xb4\x50\x26\x45\x91\x0c\x9c\x7f\xf6\x21\x94\xb2\x74\xed\x02\x4d\x21\x4b\xbf\xe8\x76\x4f\x03\xe9\x77\xda\x72\x6a\x0e\x5f\x66\x83\xac\x62\xb7\xe9\x57\x8d\x42\x42\x23\xc9\xad\x75\x46\xce\xc2\xd5\xb7\xdd\x95\xc5\x20\xb1\x17\x92\xb3\x08\x30\xd0\x00\x5b\x56\x88\x48\x08\xd9\xc5\x09\x25\x29\x1a\xa6\x29\x9b\xe5\x62\x86\x8e\xf8\x29\xbe\x4d\x5f\x9a\xef\x32\xf6\x09\x3c\x30\x7e\x9a\xad\x22\x12\x08\x21\x66\x20\xfe\x30\xdf\xa8\x6b\x06\x1e\x88\x3f\xcc\x37\x2a\x38\x54\xbc\xd4\x7f\x9b\xef\x33\xf8\xc6\x03\xe3\xe7\x7d\xcb\x68\xe5\x92\xc6\x14\x32\x11\x72\x24\xc4\x0d\x5a\x7e\xc6\x95\x12\x96\x30\x4e\x29\x9a\x72\xe1\xd3\xaa\x5b\xef\x50\x0b\x2d\x92\xa1\x7c\x0a\x01\xf6\x8f\x82\xa0\x27\xd9\x1a\x34\xd8\x5a\xaa\xbe\x4c\xae\x83\x4a\x5c\xff\x19\xf9\x95\x27\x97\xb8\xd6\x1f\x08\x79\x32\x80\x78\xca\x66\x19\x56\x25\x6f\x73\x89\x86\x43\xd8\x15\xa5\x44\xcd\xd2\x16\xb2\x9f\x85\xb3\x80\x01\x85\x16\x1c\x9d\x5f\xec\x54\x40\x45\xdb\x42\x95\xf0\x62\x2a\x95\x73\x7c\xd6\xa7\x4c\xd8\x16\xa1\x81\x88\x72\xc5\xc6\xb2\x88\x60\x4f\xf1\xe8\xb7\x81\xca\xac\xda\xc3\x2e\x74\x86\x58\x4e\x36\x7b\xef\x5e\x6e\x46\x38\x6f\x72\xaf\x36\xac\xe6\xb4\xff\x5f\xb2\xc5\xbd\xb3\x35\xa0\xb5\xb6\x5e\xee\xaf\xfa\xa6\x8a\xc5\x39\x6e\x6b\xc3\x7f\x67\x1b\x40\x5b\x75\xbc\xe9\x32\x90\xc8\x24\x70\xc0\xc8\xc0\x38\xbe\x07\x52\xcb\xbf\x23\x0f\x95\xde\x6f\x03\x44\xdf\xc6\x41\xd0\x63\xce\xe7\xcf\xfc\xc7\x07\x2c\x97\xcb\xef\x31\xc7\xd9\xdb\xeb\xb1\x91\xcd\x29\xab\x8d\xe7\x40\x33\xc7\x14\xfe\x6d\xf4\x25\x89\xcc\xf5\x48\xce\x95\xdf\x90\x5f\xc7\x40\x13\xf1\x8f\x95\xb1\x50\xe6\xb8\x50\xdf\xbd\xb4\xdb\x83\xc1\xbe\xc4\xa3\xaa\x81\x77\x4c\x27\x28\xa5\xca\x4f\x94\xfe\xbf\xca\xcd\x7a\x1a\x4f\x26\xe8\x53\xa9\x05\xc0\xf8\xa2\x51\xf5\xef\x16\xb2\xc9\xa8\x63\x73\x58\x0d\xa6\x6a\xa1\xc8\xb1\xb1\xa1\xab\x9f\xd4\xb4\xd4\x7f\xba\x02\x7b\xc3\xa2\x72\x4d\x1c\xaa\x35\x1d\x88\xf7\xda\x4c\x56\xd7\x50\x37\x71\x8d\x03\xbe\xa6\xb9\xd1\xca\x15\x47\x7e\x4d\x5b\xf1\x5e\x7a\x60\xd4\x35\x93\x0d\x5c\x2d\x09\xd4\xb4\xd4\x4d\x5c\x43\x24\xa8\x69\x6e\xb4\xe2\x54\x47\x21\x8b\xc3\xd4\x6e\x69\x5c\x89\x7e\x13\xe5\x20\xc5\x03\x17\xe6\xe4\x26\x96\xca\x4d\x30\x2b\x34\xb1\x44\x68\x82\x79\x59\x8c\x19\xb2\x18\xcc\x6e\x03\xa1\xb2\x49\x3b\x53\x52\x12\xd3\x52\x92\x7a\xac\x57\x85\xbf\xd1\x7f\xa7\x5d\x99\x92\x19\xcb\x4a\x66\x30\x23\x96\x31\x2d\x96\xc1\xac\xc0\xc1\x14\xd2\x93\x17\xa9\x48\xc6\x0c\x91\x0c\x96\xc8\x63\x2c\x2b\x8f\xc1\x92\xe3\xb9\xfd\x31\x3c\x30\xce\x47\xc7\x70\x53\x4a\x73\x5c\x66\x57\x68\x30\x18\x80\x68\x1a\xab\xb1\x95\xbc\x94\x58\x23\x0f\xdc\x83\xd6\x8e\x4b\xb9\xf3\x75\x4b\xfc\x96\xde\xfd\x57\x70\xf5\xf7\x0f\x3f\xfc\x7d\x5d\x09\x70\x84\x63\xf4\x7d\xe5\xb9\xc9\xfb\x5f\x7f\xe7\x26\x3b\x24\x41\x3f\x55\x3e\x3e\x3a\x5d\x0f\x17\xa3\x6d\xd7\xfe\x4f\x9f\x78\xaf\x94\x13\xce\x63\x57\xef\x38\xed\x6b\x93\xee\x33\x1b\xe9\x04\x4f\x2b\x26\x85\x79\xbc\x74\x72\x9e\x27\x55\xd3\x55\x2e\x4d\x85\x29\xa7\x18\x4f\x7c\xcb\xc0\x58\x84\x23\x88\x2d\xab\x19\x85\xad\x71\x41\x65\x36\x03\xd7\x9c\x76\xba\x5d\xb3\xcc\xc0\x56\xb7\xd2\xc4\xa9\xe9\x2c\xa1\x6b\x3b\x6b\x96\x97\x1e\x50\x5a\x7d\x26\x7f\x65\xf4\xa1\xa9\x07\x14\x07\x2f\xf1\x73\x92\x50\x26\x3f\x25\xb0\xc9\x4f\xbd\x50\xd9\xdf\x46\x83\x64\x0e\xc9\x93\x64\x2a\x69\x9f\xc6\x8c\xea\x93\x2e\xca\xb9\xb6\xf4\x62\x4a\x50\xd1\xb2\x7d\x82\xa9\x36\xfe\x54\x09\x22\xdb\x34\xce\xe3\xb9\xd2\x35\xae\x45\x3e\x85\xaf\x37\x4d\x51\x39\x1c\xfd\x29\xe9\x33\x12\x96\xf2\xb7\x36\x9f\x4b\x7f\xb2\x7e\xb2\x32\xed\x26\x95\x0f\xea\xd1\x0b\x75\xf8\xd8\x88\xea\xf9\xa1\x4d\x30\x8f\xbc\xb4\xca\x34\xdd\x2a\x14\x28\x0d\x61\x9b\xb2\x24\x84\x2d\x73\xa0\xda\xf2\x5a\xce\xbf\x3a\xd0\x04\x66\xeb\xdc\x5e\x10\xe2\xfe\x77\x22\xb9\x57\x42\x47\xe7\x4f\xaa\x68\x2f\x51\x1e\xd8\x17\x95\x39\x9e\xd4\x4c\xbf\x75\xd5\xc1\x2f\x18\x16\x43\xa1\x91\x30\x75\x46\xae\x9f\xc3\x00\xdc\x08\x8c\x7c\x77\x50\x8e\x3d\x39\xd6\xbe\x47\x82\x00\x84\x22\xb8\xb0\x3e\x98\xa8\x80\xeb\xd2\x78\xa2\xfa\x2d\x90\x27\x81\x18\xed\xc7\xa8\x2f\x58\x68\x94\x9e\x32\xe8\x0f\x19\xf7\xf5\x98\xa3\xed\xa2\xf4\xfb\x0a\x26\xae\xc9\x48\x78\x6b\x69\x74\x48\xcb\x63\x81\x81\x6b\x39\xd1\x64\xdc\x59\x6e\x9d\x77\xf0\x4a\x3d\xaf\x94\x33\x6a\x46\x87\x9f\x3c\xcb\xda\x37\x52\x46\x2d\xe0\x58\x92\x53\x17\x19\x73\x81\x0d\x0b\x8a\xce\x40\xdc\xe0\xea\xaa\xe7\xd2\xca\x7d\x34\x3b\xd5\x96\x9f\x14\x30\x51\xcd\x4a\x97\x08\x3c\x5b\x63\xec\x59\x0d\x47\x4c\xe4\x82\x39\x64\x60\xb9\xb4\x6d\x49\x17\xda\x6d\xbd\x29\x7f\xdb\xec\xb0\x31\x2a\xf0\xb0\x28\x6c\xc9\xd7\x29\x6e\x6b\x73\xb9\xcd\x1e\x97\x83\x0a\xa9\x57\x33\x84\xbe\x88\xb7\x1d\xa5\x12\x23\x80\xc9\x0c\x50\xb5\x2c\x4e\xed\x6e\xe9\xa2\xcf\xa0\xdf\xf7\xe5\x15\xa0\x00\x96\x17\x41\x61\x64\x4c\x22\x30\x0b\xbe\xcd\xb9\x60\x64\x4c\x58\xdf\x08\x48\x2e\xed\xaa\x38\x7b\x91\x01\x31\x9b\x98\xa3\x34\xf8\xb8\x34\xe4\xf4\x7f\xfe\xf7\xff\xb3\x54\x07\x56\xa7\xc9\x15\x46\x2d\x73\xdc\xde\x78\x14\x68\x1b\xc9\x59\xec\x90\xf5\x88\xcd\x99\x3b\x6d\x9e\x2d\x17\xf4\x79\xfc\x83\x8c\x3a\xef\xfe\xa4\x63\x13\xf0\x06\x5e\x5d\x9c\x46\xda\x4b\x6e\x36\xe5\x91\x19\x1d\x8e\xd2\x27\x15\x47\x69\xd9\x7a\x5e\x21\x78\x9d\x08\x80\xc9\x72\x66\x25\x1e\xbd\xac\x4a\x3f\x92\x2c\xaf\xd6\x60\xa4\xa7\x6b\xa2\xa9\x31\x94\x26\xd5\x47\x6e\x76\xdd\xf3\x07\xb0\x79\x7d\x52\x92\x9a\xbe\x0e\x24\xa7\xb2\x76\x0c\x16\x3f\xb4\x0b\xaa\x11\x50\x92\xfc\xcc\xb8\x4b\x65\xfa\x51\x2e\x2e\x5d\x0e\x79\x11\x4d\x93\xb3\xe1\xe6\x1e\xe6\xef\x6d\x26\x42\xab\x28\x54\xa2\xb7\x8a\x60\x15\xb2\xdb\x13\x70\xb2\x02\x5d\xe5\x8a\x52\xaa\x6e\x2f\x6c\x74\xb8\x0a\x6a\x01\xbc\xdd\x25\xb0\xad\xfc\x92\x10\x45\x8b\xb6\x09\xcd\xb4\x14\x72\xb4\x93\x6f\x8b\xe6\x59\x92\xeb\x30\x47\x4d\x91\x77\x2d\xaa\xd5\x06\x8f\xe5\xc9\xbd\xd3\x37\xad\x6e\xd7\x77\x1b\xef\x5f\xa1\x73\x5c\x2e\x94\x49\x67\x4b\xae\x8a\xfb\xff\x4a\x22\x83\x1a\x02\x68\x54\xe2\x8e\xf7\x0a\x19\x43\x71\x98\x18\x61\x2f\xcf\x80\x77\x99\x71\x75\x69\xf2\xa9\x51\xe5\x92\x16\x2e\xc1\xba\xd3\x5c\xb4\x4c\x6e\x48\x6d\x8d\x7e\x4f\x82\x60\xcc\x47\xcb\xb9\xe5\x15\x8d\x6e\x91\x6a\x59\xef\xfc\x5a\xe5\x4c\xd5\x76\x02\x4b\x98\x9a\x53\x92\xfa\xc2\xcd\xcd\xd5\x59\x25\xb6\xc7\xca\x9c\x8d\x1f\x6f\x0e\x00\x37\x3c\xd8\xea\x6d\xa5\x19\x8a\x92\xf9\x02\x8c\xc0\x00\x4d\xb6\x54\x7b\x6f\x18\xce\x29\xc2\x6e\x9b\x38\x7a\xf0\x41\x25\x2c\x9c\xee\x21\xbf\xba\xa9\x60\x13\xe9\x2a\x92\x50\x4b\x12\x95\x25\x2d\x4f\xfa\xb1\x32\xf9\xb2\x9c\xcd\xb7\xaa\x68\xc7\x76\x9a\x59\x37\x65\x14\x4d\xb0\x64\x8c\x99\x62\xce\xd9\x5a\x73\xe5\xf2\xa6\x47\x93\x2e\x0c\xda\x31\x7f\x28\xef\xa3\x1f\x0f\xf6\xf6\x60\x15\xb3\x35\x9a\x9f\x1f\x5c\x74\x35\x19\xee\xb4\xf6\x38\xb8\x03\x57\x83\x15\xf8\xf3\x96\x98\x2b\xff\xf5\xf2\xc3\x5f\xbe\xbd\xbc\xbc\x2a\x35\x57\x1a\xf5\x1c\xbe\x48\xc3\xa5\xd2\xe9\xc8\x6b\x6f\xc1\x66\xe7\x83\xe8\x52\x5c\x4f\xa7\x33\xa1\x43\x01\x42\x85\xc2\x61\x8c\xc4\x6d\x6d\x4c\x22\x1f\x46\x42\x6a\x3f\x17\xf2\xa1\x5b\xf1\x6f\x43\x46\x31\xe3\xfe\x9c\x81\xa4\x3f\x16\x79\x1b\x0d\x6d\xc8\x0c\xce\x05\x04\x71\x18\xc2\xc8\x03\x14\xea\x34\x15\xaa\x18\x88\xbc\xbc\x06\x48\x48\xf9\xe7\x1c\x09\x0a\x8c\xea\xc4\x63\x51\x44\xae\x5f\xc3\x09\x2b\x55\x56\x69\x6d\x60\x8d\x34\xce\xa5\xaf\x86\x84\x00\xb5\x7a\xa5\xfb\x32\xe5\xfe\x59\x4d\x6e\x77\x58\x19\xe4\xfd\x8b\x5f\x5e\x9d\xbe\x7a\xf7\xf6\xb4\x42\x65\xb8\x42\x51\x10\x08\xbc\x59\xa2\xe7\x4c\x8f\x9d\xca\xe4\xda\x75\x09\xfc\xc4\xe0\x95\xd6\x3e\xc4\xe0\xbc\x68\xc5\x33\xf4\xbe\x85\xf3\x4b\xec\x97\x27\xee\xa1\x64\x6f\xca\x92\x97\xa4\x1f\x6c\x65\xc2\x4b\xcf\xc2\xb4\xa7\x3a\x45\xf7\xfa\x13\x12\x9e\x45\x08\xe0\x69\x00\x4f\xe7\x20\x08\xde\x0b\x0e\xb8\xb9\x2c\x91\xd5\x6a\x6c\x31\xf9\x1a\xd5\x7c\x53\x7a\xc4\xba\x5d\x7e\x78\x1f\x89\x0e\xd7\x9c\xeb\x70\xd9\x94\x46\xc7\x72\x3c\xeb\x7d\x2a\xb1\xd9\xfc\x6f\x78\x6d\x85\x7c\x3b\x91\x98\x5a\x0a\x26\x4b\x46\x06\xc9\x84\x46\x5c\x4e\xb5\xf8\xc5\xd6\x82\x3e\x62\x75\x49\x8d\xce\xd0\x1c\xca\xb3\xa1\x49\xef\x5c\xaa\x3a\x4e\x04\x8b\x8c\x05\xb6\x9d\xc9\xd5\x10\x43\x53\x01\x45\x6c\x2b\x75\x2b\xcf\x9a\x53\x57\xb7\x98\x9a\x0c\xc8\xad\xe3\x0a\x95\xa7\xa8\x01\xd9\x26\x74\x59\xfa\x20\x5b\x49\xa3\x55\x14\x4d\x97\xd4\x6a\x7d\xc1\x8a\x87\x8e\x39\x69\x3a\xab\xc2\x3a\xe9\x21\x5a\x6b\x37\x4a\xf5\x10\xf9\x08\xa1\x57\xbe\xf2\xea\x2c\x77\x10\x97\x8d\x7e\x13\x71\xbd\x85\xc8\xa4\x86\x6f\x0d\xe7\xf2\xd5\xdc\xd8\x1b\x42\xa8\x5e\xe5\xf4\x1c\x25\x11\x54\xac\x3e\x82\x8a\xd5\x45\x50\xb1\xa6\x08\x2a\xd6\x10\x41\xc5\x2a\x23\xa8\x58\x5d\x04\x15\x6b\x8e\xa0\xca\x7b\xec\xe6\xbd\xf0\x5b\x69\x64\xa6\x26\x2a\x9c\x8c\x0e\xc6\x78\x65\x90\x75\x49\x8e\x83\x32\x7d\x4a\x3e\x1c\x52\xa8\x7c\x83\x8c\x2e\x46\x22\x28\xe3\xf2\x3e\x4d\xd1\xe3\xe4\x1c\xc7\xa7\x19\xfc\x38\x45\x57\xf1\x69\x1e\x41\x4e\xce\x4d\xbe\x32\xc8\x4b\xc4\x5c\x65\xfc\xd9\x57\x88\x07\xcb\x64\x94\x85\x51\x44\x44\xfe\x52\x34\xe9\xc1\x4c\x15\xe3\xac\x96\x77\x1f\x13\xd6\x9f\x90\x18\xfb\xb6\xe3\xee\x1e\x76\x57\xf1\x2a\x58\xb7\x23\x11\x5a\xbd\x6e\xbf\x33\x7f\x34\xd4\xfe\xc7\x00\x7b\x69\x5e\xce\xba\xb4\x08\xaa\x14\x78\xba\x46\xb2\x28\x74\x79\x74\x7a\xe6\x5d\x21\x41\x82\x7c\x5b\x15\x6f\x98\x7b\xab\xbe\xce\x06\xee\xaa\xc4\x26\xf9\x8f\x92\x00\x3b\x1d\xcb\x6b\x1c\x6d\x32\xf0\xed\x4e\x12\xe2\xc0\x22\x43\xcd\xa4\xc8\xc1\xb9\x7c\x1d\x6c\xb5\x7c\x1d\x9a\x09\x7f\x31\xab\x97\x31\x57\x0f\x0d\xcc\x2c\x16\x85\x28\xe8\xd5\x82\xb0\x4b\x60\xad\x4e\x5f\x3d\xd8\x74\x40\x76\x19\xe6\x56\x0f\xcb\x6e\x3b\xc7\xb2\xe0\xec\xce\x62\xa7\x66\x8b\x5f\xb2\xf8\xb9\x59\x79\xb2\xb5\x5d\x6b\xae\xc3\x1b\xb7\xd4\xd0\x53\x2a\x80\x64\x50\x21\xa9\x32\x2f\x95\xac\x3f\xe0\xae\x73\x10\x9b\xb0\x52\xd5\xe6\x8e\x9a\x42\x96\x5a\x95\x6b\x11\x61\xf0\x6d\x99\x45\x48\xc8\xdf\xf2\xa0\x68\x1e\x40\x24\xb4\x58\x72\x90\x45\x77\xc3\x87\xde\x9e\x5b\x62\xf6\xf0\xdf\xbc\xf1\x1e\x7d\xff\x7c\xfc\x15\x45\x69\x3d\x18\x3b\x4a\x8c\x1d\xba\xee\x7f\x37\xa3\x87\x94\x3d\xff\x4c\x66\x8f\x25\x2c\x1e\x95\x2e\xbe\xd0\x47\x8c\x98\xa4\x97\xe2\x3e\x51\xee\xa9\x78\x0b\xe9\x0d\x9c\xf3\xe8\x4c\xf0\x2f\xbc\xc1\x12\x9b\x45\xc5\x82\x16\x96\x3a\xaf\xe4\xd3\xcf\xb3\xa1\x15\xfa\xa9\xf4\xd8\xcf\x3f\x2d\xf8\x32\xb6\x24\x95\x5a\xbf\xb6\x8c\x47\x5f\x95\xd2\xb4\x34\x62\x45\xf2\xce\x7e\x0a\x95\x91\x51\x5d\x48\xa1\xaf\xd5\x86\xe1\xa8\x7f\x43\x7c\x98\x62\xd8\x44\x3e\x92\xfe\xb8\x1d\xbc\x50\x6d\xf9\xde\x3a\xca\x28\x23\xf8\x56\x6c\x83\xdb\xea\x35\x6a\x8f\xdf\xcd\x7a\x10\x6e\xd2\x43\x30\x7f\xe2\x2d\xa7\x4d\xd5\x09\xa2\xbe\x28\x17\xc1\x7a\xad\x40\x43\xbe\xed\x4e\x32\x6d\x67\x89\x39\x09\x67\xe7\x72\x58\x4d\x6e\x90\xd3\x24\x35\x48\x36\xa1\xb7\x88\x15\x70\x33\xe9\xb9\xd6\xe5\xac\x78\x06\xc6\x59\x3f\x45\x66\xa4\xf3\xfe\x0a\xd2\x71\xbf\xd7\xc9\xa5\xcd\x8c\x87\x8d\x99\xa8\x97\x51\x90\xa9\x2d\xf3\x70\x15\x5c\xd3\x55\x70\x5b\x6f\x82\x7f\xea\x0c\x2a\x4b\x5d\xc2\xd4\xce\xd8\x92\x5b\xd8\xfb\x9f\x5e\xfc\x74\xf9\xf2\xf1\xa7\x87\x5b\xd8\xc3\x2d\xec\xc1\xf5\xec\xc1\xf5\xac\xb5\xeb\xd9\xbb\x50\xc5\xa8\xad\xcd\xf1\x6c\x23\xbe\x63\x2a\xb0\x34\x91\x14\x97\x74\x17\x13\x65\x5d\xd2\x4e\x1a\x3c\xc5\xd6\xe9\x26\x76\xaa\xd3\xd3\x6e\xb0\x6e\xad\x72\x43\x4a\x87\xaa\xe9\xbd\xf1\xe5\xfa\xd6\x8c\x0b\x82\x53\x12\xdd\xac\xb6\x68\x69\x2f\x77\xb8\x6a\xc7\xe9\xa0\x1b\x5b\x35\x39\x04\x82\x5b\xb3\x5e\x0c\x4c\x57\x5b\x2a\xd1\xc1\x1d\xae\xd2\x99\x18\x6f\x53\x0b\x74\x06\x3a\x6d\xa5\x42\xf6\x83\x3b\x2f\xc5\xae\x86\xce\x68\x95\x32\x6e\x7f\x5a\x78\x38\x12\x71\xef\xb0\xa3\x33\xf0\xda\xe9\xcd\x28\x9e\xb3\x12\xd9\x99\xfd\x34\xfb\x00\xaf\x99\x06\x5f\x13\xef\x32\x9b\xac\xa2\x8d\xeb\xef\x92\xb5\xc9\x2d\xa5\x33\xaa\x25\xcb\x76\xbe\xbd\x99\xaa\xf1\xad\x29\xe7\x17\x79\x73\xba\x6f\xca\x49\x13\x42\xac\x42\x37\x99\xb4\x12\x77\x4b\x35\xc7\x24\xec\x76\xb6\x2c\x43\x33\xbf\xa4\x58\x5a\x17\xb5\x6c\x43\x25\xfc\x95\x1d\xc4\xeb\x38\x75\x85\xbc\xd9\x82\xda\xcb\xcd\x0e\x52\x22\xeb\x27\x8a\xce\x24\x79\x98\x4a\xd0\x52\xe9\xa2\x5d\x48\xbf\x77\xde\xce\x46\x53\x6d\x31\x68\x9b\x51\xb0\x3c\xf1\xdf\x12\xd7\xc7\x56\x88\xce\x0b\x89\xab\x62\x3a\xe9\xef\x01\xd5\x35\xf2\xdd\xaa\x58\xe6\x5d\x3d\x20\xb8\x59\xa0\x59\x15\xcf\x46\x8f\x05\x74\x97\xe5\x76\xca\xe3\xfd\x7d\x2e\x13\x6a\xf7\x35\x28\x64\xb7\x59\xe7\xe2\xbc\xef\x96\xbc\xf4\xae\xd6\x31\x2f\x5e\x74\x5b\x45\x98\xc8\xee\xe9\x3a\xaa\x1e\x97\x59\x44\x23\x5d\xd7\xb6\xac\xa7\xf9\x32\x9b\x9b\x6b\x8b\x56\xfa\xfe\x12\xdb\x14\x6c\x04\xcb\xd9\xad\xb7\xc4\xc2\xe0\xbf\x3d\xf9\xeb\x2f\xbf\xcc\xdf\xb6\xb3\x30\xf0\x3d\xf0\xd8\xb5\x49\xcc\x02\xc8\x57\x6f\x1d\xd5\xcf\x0b\x18\xe9\x84\x4f\x49\xf0\xfb\x02\xf8\xaf\xc8\x05\x40\xc7\x5b\x54\x26\x79\x49\x63\xac\x96\x30\xae\x6b\xff\x70\xad\x51\x94\xc5\xa0\x33\xf1\x04\x5d\x3e\x2f\x2b\xcd\xa5\xd2\xaa\x55\x7a\xf3\xe7\x9d\xa0\x45\x7b\xdb\xd9\xc1\xca\xb2\x2f\xe3\x36\x95\x99\x5c\xfe\x72\x1c\x57\xbd\x1d\x13\xff\x26\x79\x29\x7e\xa4\xef\xb4\x49\xdd\x2d\x96\xbd\x50\x2d\x22\x70\xfd\x4c\x74\xa0\x7c\x37\xf5\xef\xb4\x85\x47\xf0\x04\x4d\x93\x06\xea\xa7\x39\x06\x83\x11\x06\xc1\xa9\x2c\x56\xae\xdb\xe5\x1e\x3b\x65\x05\x95\x44\xae\x1a\x19\x70\x20\x2b\x37\x56\x54\x3f\x5d\x0f\xea\xdb\x3b\x07\x64\xf6\xd1\x97\xec\x17\xd0\x61\xe7\x34\xba\x71\x8b\xe3\x3b\x6f\x69\xd6\x3e\x02\xda\x1e\x5f\x63\x11\x4f\x9a\x9a\xf6\x70\xc9\x67\x2b\x28\x63\x0a\x99\x2a\xe8\x29\x77\x44\x37\x67\xe2\xcc\x22\x6e\xc9\x01\x73\xfd\x8f\x1f\x3e\xcd\x8f\xa7\x07\x0f\x26\xec\x3f\x87\x09\x5b\x8b\xbe\x77\x6e\xbf\x7e\xb0\x25\x6f\xc8\x96\x0c\xc6\x24\xae\x31\x54\x35\xf5\x06\x3f\x99\xf3\x78\x03\x30\x98\x42\x2b\x82\x31\x05\xe3\x00\x5a\x14\xa3\x30\x84\x8c\x5a\x64\x92\x24\x5c\x98\x90\x48\x04\x86\x5a\x92\x96\xb6\x58\xd7\x58\xd8\x89\x2b\x25\xa3\x78\xa6\xf3\xfe\xea\x07\xf2\x24\xb7\xc2\x88\x5c\x21\x9f\x23\xad\xaf\xb0\xa6\x31\xc5\x66\x80\x59\x1e\xc0\xd6\x18\x5a\x48\x15\xf9\xb6\x10\x66\xc4\x02\xf8\xc6\x4a\x2f\x9d\x95\x1b\xf9\x15\x66\x70\x1a\x01\x9d\xd0\xb6\x63\xa6\x0a\x01\x5f\x2b\x77\xf6\x71\x92\x0b\x78\x25\xd7\x75\x45\x10\xf9\xc7\xb2\xf7\xbb\xf3\x43\xbf\xf3\xcb\x67\xe9\xc1\xbe\xcc\x3d\x69\x2b\x62\xa2\xbb\x81\x2c\x13\xc9\x7e\x3d\x57\xbb\x0d\xe7\xc4\xe8\xec\xbe\xad\xfc\x94\xab\x05\xe6\xc4\x91\x39\x05\xbd\x4d\xee\xd1\xac\x5b\xb8\x61\x08\xd0\x7f\x0e\x6d\xdb\x9d\xa0\x80\x71\x61\xe8\x39\xf1\xa8\x4c\x6c\x4b\x49\xc4\x9e\xdd\x0c\x6f\xb9\xfc\x30\xdc\x3d\x70\x55\xee\xa3\xe1\xee\xa1\x2b\xaf\x4d\xe2\x4f\x40\x3d\xfe\x92\x73\xd2\xe1\xee\xe1\x62\xf9\x4b\x30\xb5\x57\x71\xbd\x76\x65\xa6\xeb\xd4\xf1\x3c\x7b\xc1\x75\xc9\xe8\xfc\xc2\xa5\xa3\xf3\x8b\x1d\x98\xe4\x1c\xcd\x92\x25\x39\x67\x17\x23\x5c\x13\x8a\x68\x38\xb5\x2f\x32\x95\x1b\x41\x10\xf4\x88\x79\x79\x24\x65\x43\x10\xe7\x16\xa6\x21\xc5\x3a\xe5\x24\x67\xa3\x22\x67\x89\x51\x8c\x4f\x59\x58\xdd\xdd\x43\xc7\xa5\xe7\xa4\x06\x2a\xe5\x3f\xbf\x28\x01\x88\x9a\x00\xf1\xdb\x32\xf6\x7b\x86\x7e\x30\x29\xf0\x2b\xe3\x4e\x4c\x87\xfd\x34\x9a\xde\xc5\x95\x08\x23\xce\x2d\xe6\xa0\xb1\xfa\x10\xee\x5a\x9c\x15\x2f\xdc\x65\x50\xca\xda\xbb\x24\x62\x45\x18\x6f\x15\xfa\x0a\x39\x0c\xcc\x90\x7c\x1f\x30\x30\x84\x8a\xbe\xcf\x6e\x42\xcd\xd2\xf9\xde\x28\xcd\x46\x20\xae\x7f\x92\xaf\x25\xd5\xd7\xb3\x39\x61\xd2\x8d\x2a\x5c\xbc\xaf\x71\x40\x80\xff\x12\x05\xa2\xf0\x7d\x5d\x06\x80\x47\xf6\x60\xc6\xe6\x81\x0e\xf6\xcf\xc5\x39\xc8\x69\xa6\xc5\xdc\x5f\xaa\x2d\x59\x56\x52\x3e\xc7\x3a\x4c\x35\x8e\xdc\xb7\xb6\xe3\x12\xe3\x61\x2a\x71\x88\xfa\xcb\x49\xa1\x57\xe8\xa8\x04\x20\x22\x59\x29\x1d\xfd\x36\x90\x88\xea\xc1\xcc\x49\xa4\xee\xe5\x50\x5f\x94\x65\x76\x75\xdb\xd9\x1d\x8d\xc8\xe0\x03\xd6\x0f\xfc\x85\xe3\xa2\xae\x7d\x8c\x0a\x7d\xec\xe0\x01\x67\x3a\x7b\x7b\x3d\x34\x42\x03\x39\x1f\x1d\xd8\xe1\xb2\x81\x48\xdc\x70\x2a\x0b\xc2\xbe\x62\x70\xae\xb6\x91\x6a\xa8\x6f\x3c\x42\x49\xa4\x78\x56\xae\x27\x9d\xc5\xad\x55\x67\x49\x63\xde\x9f\x62\x7c\xb9\xfe\x74\x4d\x93\x56\xfd\xa9\x2e\x64\x7f\x9c\x6d\x3e\x15\x7d\x45\xf0\x0a\x46\x14\xca\xc3\x91\xf6\x9a\xba\x7a\x17\xa9\xd4\x63\x5c\x82\x75\x9c\x61\xbb\xd6\x80\x37\x36\xf3\x09\x19\x4c\xdf\x76\x7f\x1b\x48\xcf\x8a\x1e\x75\x91\x8c\x83\x39\x41\xb8\x22\x84\x47\x90\x7e\x28\x5e\x37\x44\xef\x9c\x20\x8c\xa1\x9f\x0e\x5b\xba\xc3\x3f\xe0\xb0\x7e\xa8\x18\xb7\x1a\x4c\xf4\xd3\x3c\xdc\x09\xc2\xba\x42\x40\x65\x06\x75\x31\x6c\xb1\x69\x03\x00\xfc\x10\xaa\x1d\xbd\xa3\x06\xe9\xcb\x2f\xc8\xad\x85\x8c\x7a\xb1\x29\x91\x4a\xba\xe7\x2a\x37\x98\x5c\x76\x28\x9d\xab\x4b\xa4\x47\x4a\x13\x75\x55\x2a\x10\xcb\x53\x94\x27\x9b\xc5\x4b\x1d\x49\x5d\x36\xd0\x63\x99\xdb\x29\x19\x3f\x9e\xcf\x41\x24\xf4\xda\x54\xfe\x59\xd6\xea\x8d\x58\x42\xd1\xd9\x5c\xfe\x39\x43\x61\x59\x12\xf3\xda\xa8\xb7\x36\x53\x52\xfc\x70\x27\x5f\xc0\xdf\x38\x14\xdc\x42\xb6\xf7\x5c\x4f\x74\x27\x9b\xac\xbd\x4c\x5a\x59\xc8\x21\x70\x65\x57\x7a\x73\xd1\x1d\xdc\xb6\x33\xd2\x00\x97\x3a\x0e\xc1\x18\x06\xaf\x7c\xdb\xd9\xa9\x0f\xff\x5a\xb7\x0a\x59\x8c\x3b\xe4\x07\x1e\x27\xfa\x8a\x0f\x44\x23\xea\xde\x22\x7f\x48\x16\x8e\xfc\xa6\xba\x7b\xd5\x5a\xfc\x4f\x50\x2e\x1d\x26\x07\x2a\xab\x39\x50\x13\x14\xf0\xf3\x74\xa1\x2f\x2b\x74\xc8\x92\xcb\x02\x1d\xe2\xf4\xef\xe7\x11\x98\xb0\xb4\x67\x9c\xf6\xcc\xd2\xc4\x7c\x3a\xf5\xd9\x04\x7a\x37\x5e\x20\xcf\x6a\x38\x78\xad\x7f\x0f\x44\x27\x8b\xf4\x3a\x42\x5f\xa3\x2b\xb8\x6a\xa7\xbc\x8f\x85\xe3\xea\xcb\x75\x35\xa6\x92\x16\x6e\x04\x3d\x88\xd9\x91\xef\x97\x8e\x5d\x40\x15\xf0\xfd\xf7\xe2\x0b\x11\x54\x2a\x3f\xfe\x20\x8e\xe5\x76\xdf\xcb\x23\xdc\xe8\x82\xce\xc8\xf5\x29\x03\xa9\x8c\xca\x6f\x46\x11\x21\xfc\xf7\x31\x89\x31\x1b\x1e\xb8\x29\xfb\x18\x16\x38\x16\x12\x29\xe7\x72\xec\xa3\xd8\x2c\x61\x2c\x69\x5b\xc5\x44\x4a\xda\x6a\xf6\x22\x73\xbf\x4d\xf8\xc5\x49\x5a\x59\xd2\x9b\x11\x4c\x37\xa4\x4b\x46\x70\x90\xfb\xd4\xa5\xa3\x03\x21\xce\xcd\x41\xd8\x23\x6e\x26\x17\x57\x6e\x03\xa3\x81\x4a\xf3\x45\x7b\x46\x2a\x2a\xe7\xf3\xe7\x1e\x7d\x34\xe2\x7b\xd9\x85\x03\x13\x1f\x23\x5a\x38\x07\x77\x5a\x9c\x83\x5b\x62\x49\x79\x77\xf2\xe9\x9f\x3f\xfd\x44\x8f\xcb\x33\xd1\x6b\x5d\xe9\x83\x41\x65\x2b\x0d\x2a\x46\x4e\x88\x76\xf6\x14\xb3\x95\xce\x5e\x21\x19\xf3\x57\x1a\x15\x58\xa1\x51\x57\x3b\x51\x90\x77\x91\x36\x12\x07\x2b\x6d\x76\xca\x7a\x57\x25\xbc\xda\x8c\x34\x72\x33\x32\x55\xc2\x5f\xb2\x2e\x58\x15\x1e\x57\x25\x2e\x52\x95\xe9\x54\xea\xfc\xaa\x52\xc0\xd2\x05\x37\x23\xa1\x32\x8d\x0d\x70\xd3\x4c\xcd\xe6\x1d\xaa\x93\x73\xd6\xd6\x14\xe1\x2e\x5b\xe0\xc4\x9e\x56\xb9\xc0\x52\x50\xc9\xad\x6d\x79\x38\x43\xe6\x6f\x21\x34\x98\x0f\xf8\x81\x2f\x12\x64\xab\x43\x3c\xf9\x5b\x9e\xc9\x79\x32\x29\x48\xd9\x45\x89\xda\x36\xcf\x1a\xa3\x81\xd4\xa8\x08\xf2\xd2\xca\x95\x35\xd3\x9a\x42\x4a\x1b\x32\x6b\x45\x9e\x29\x06\xab\x5f\x49\x84\x56\xbf\x17\xf8\x2d\xbc\x4e\xd1\x5d\xf1\x4a\x61\xbf\xd5\x26\xc8\xbd\x4b\xd6\xa6\xb2\x81\x5e\xaa\xe2\xd8\xe6\xca\x55\x6c\xc9\xca\x0d\x96\x2c\x6a\x0b\xe3\x52\x8b\xcd\xb8\xd1\x08\x88\x1c\x25\xb9\x89\x00\xcf\xc1\xeb\xe8\x11\x5b\x67\x83\x16\xbb\x59\x1e\x86\x29\x7f\xff\x80\xc5\x7b\x34\x41\xf2\xb4\x6e\x88\x49\x59\xdf\xf8\x87\xdf\x73\xb9\xe8\x86\x4b\x61\x25\x1b\x87\xcb\x10\xd3\x63\x12\x90\xc8\x4e\xca\x4c\x1c\x56\x34\xac\xae\x0f\x5d\xc0\xba\x51\xe9\x3e\xd3\xcb\xa9\x66\x69\x69\xc5\xfb\xc3\x4e\xb5\x90\xeb\x43\x95\x7e\x70\xcf\xcd\xe9\xf7\xfd\x88\x84\x3e\xb9\xc6\x56\x63\xd8\x92\x90\x42\x44\xc1\x8b\xe7\xe4\x1a\x2b\x73\x70\x51\x4c\x53\x15\xf3\x43\x12\x92\x2b\x68\xb0\x6a\x8d\xfb\x19\xf2\xe1\x3b\xde\x1f\xbf\x9f\x88\x3f\x10\x3d\x9d\xf1\x1e\x5d\x3b\x0c\x80\x07\xb5\x4b\xb3\xd2\x26\xc9\xfe\x60\xc4\x7b\x0c\x05\x4d\x7a\x5c\x74\xb2\xc4\xbf\x24\x66\xfa\x81\x0a\x2d\xe3\x02\x1f\x63\x64\xde\x9f\x23\xdf\x0f\xc4\x62\x74\xa9\x76\x12\x07\xa5\x04\x33\x87\x38\x2e\x15\x4a\x33\x95\x56\xca\xd6\xb1\x32\x58\xae\xaa\x58\xb6\xac\xe9\x81\x4a\x38\x60\xb2\x29\xd1\x92\xf5\xb1\x33\x93\xfd\x56\x56\x16\xee\x33\x52\x5c\x23\xa5\xda\x93\x23\x8b\x10\x32\x11\x9e\x97\xc0\xa0\xb3\x0e\x4b\x4e\x16\x45\xe0\xa6\x04\x74\xf9\x4b\xd8\x18\x52\x68\x8b\xab\x71\x98\x34\xcd\x6e\x9e\x66\x5f\xfe\xb6\x71\x6a\xd5\x95\x4c\xba\x46\x4b\xd6\xc6\xb9\x75\x09\x9c\xab\x16\x68\xbb\xb8\x88\xe8\x72\xf9\x15\x64\x92\xfa\x58\x95\xbe\x96\x75\xe8\xab\x89\xcc\x23\xb8\xb5\xcf\x87\x92\xd2\x92\xd3\xbd\x2f\x32\x44\x24\x70\xe3\x78\xfe\xbc\x4c\xea\x32\x63\x20\xb4\x04\x57\x2d\xb8\x15\x04\xa6\xc4\x7c\x21\x34\xe2\xe2\xff\x42\xd7\xae\x9f\x68\x1d\x79\x51\xb6\xca\x1a\xef\x8c\xd2\xd5\x99\x47\xa6\xf1\xb6\xda\x0f\x25\xcb\xab\xab\xe4\xef\x95\x04\xb8\xae\x82\x5a\xf1\xb2\xa0\x50\x55\x2f\xa9\x9c\xa0\x56\x15\x93\x25\x8e\xdb\x14\x3d\x36\x96\xa0\x45\xf3\x2e\x82\x52\x6e\x01\x5b\x7c\x91\x5b\xdf\x96\x55\xaa\x9b\x63\x51\xee\xcf\xdf\x67\x85\x1a\xca\xaa\x87\x2f\xd9\x84\xb3\x59\x47\x19\x8d\xd5\xfa\xe6\x89\xea\xcf\x71\xa9\x34\x72\x56\x34\xb4\x95\x86\xbd\xda\x35\x46\x4a\x90\x2b\x14\xa3\xc9\x59\x0d\xda\x17\x93\x29\xc9\xfc\xfd\x52\x3c\x2a\x94\xed\xa8\x2c\x20\x93\x94\x80\x31\x63\x1a\xf2\xfd\x52\xc8\x8e\x65\x7d\x00\xdd\x7d\x69\x5f\xd9\x92\x31\x69\xb1\x96\xc4\xf6\xd4\x98\x58\xbd\xac\x26\x4b\x9b\xaa\x2b\x55\xd5\x5e\x4a\x2a\xa0\xa4\xd6\x8b\xa6\xcc\xfe\x41\xf0\xec\x46\x88\x82\x3d\x98\x29\x12\x94\x35\x24\x48\x8f\xa2\x2c\xcd\xa9\x32\x2a\xe0\x0a\xfa\x67\xba\x75\xb6\x13\xd3\x68\x93\x9a\x5b\x92\x50\x01\x01\x6a\x65\x91\x15\x2e\xe1\x93\x00\x0e\x02\x32\xed\x41\xc7\xdd\x44\xcd\x15\xad\xbb\xf9\xfa\x72\xb0\x6e\xd8\xe9\xae\x21\xc5\xeb\x46\x52\xaa\x66\x24\xfb\xc6\x84\xaa\x1b\x4e\x46\x9a\xa7\x9c\x2f\xf9\xa0\x9a\x97\xf0\xf2\x35\x18\xce\xdd\x25\xad\xc9\x15\x29\x47\xf3\x96\xf5\xce\x56\xe7\x2e\xa6\xd1\x56\xd6\xe6\xce\x81\x4d\xdb\x96\x9e\xf3\x1f\xef\xfe\xd7\xfe\x0f\x8f\xfe\x9b\x3d\xc4\x36\x7d\x49\xa6\xb8\xe5\x63\x9b\x4a\x2e\xde\x0f\xc1\x4d\x5f\x76\x70\x93\x50\x4a\x58\x73\x11\x95\xa4\xb5\x00\x0f\x19\x33\x37\x98\x1b\xeb\x0e\x32\x66\xbe\x51\x5a\xb3\x6d\xc8\xba\x68\x9a\xad\xd6\x90\x27\x53\x9b\xbf\x1e\x32\x65\x6e\x70\xcd\x32\x1a\xb7\x95\x52\x17\xe6\x54\x77\x77\xb5\x6a\x4b\x64\x2d\xec\xb6\x66\x27\x19\x0c\x6d\xc5\xa2\xa9\xac\x07\x2b\xad\x97\xee\xe3\x0e\x97\xea\x99\x1e\x72\xd3\xe9\x83\xf5\x40\x5f\x4a\xc6\xd3\x3a\x1b\xde\x9a\x48\x06\x44\xde\x0c\x5d\x19\xea\xe8\xa5\x88\x26\xed\xa5\x39\xcf\xe4\x3a\x29\xe7\x48\x8e\xdb\x35\xcf\x64\x37\xea\x51\x83\xf8\xd6\x71\x2a\xb4\x35\xd1\xe6\xfa\xf2\x92\x0a\xe1\xec\xdd\x35\x86\x51\xc7\x94\xa4\xeb\xa5\x13\x11\x54\xb6\x72\x1e\xdb\xb4\x97\xbb\xa5\x13\x5d\xe2\x69\x93\x64\xf2\x3c\xc5\xd0\x9a\xc8\xe3\x21\xe1\x68\xd1\x43\xae\x32\xdd\x68\xc9\xae\x31\x9c\xc2\xea\xf6\x58\x77\x0f\xb3\x8d\x65\x57\x2c\x0a\x5d\xab\x61\x29\x83\x94\x72\x4c\x25\x65\xef\xd3\x9b\x7d\x8d\x57\x5e\x0b\xbc\x35\x20\x74\x79\xaf\xb0\x35\xa5\x08\x4d\xad\xcc\xeb\xc0\xb0\x61\xc8\xaf\xa7\x44\x73\xdc\x75\x10\xa3\x69\x2d\xdf\x14\xae\xb2\xf2\xe4\x6a\x88\x52\x7d\xd5\x62\x69\x49\xcc\xac\x7b\xfa\x77\x9a\xcb\xbe\x9d\x58\xd6\xde\x29\xae\x24\x45\xa7\x70\x84\x4b\x7a\xac\x5b\x81\x95\x97\x62\x1d\x4b\xb4\xc6\x9c\xcb\x68\x5d\xdb\xbc\x98\x73\x79\x5b\xb1\xd7\x05\x4b\x79\xa1\x6e\x35\x1c\xc9\xbc\x03\x5f\x0c\x86\xee\xcb\xa1\x65\xb5\xdc\xa9\xaa\x93\x2d\x31\xfe\xec\x7f\xf8\xcb\x7f\xff\xf7\xe9\x4f\xef\xef\x2f\x73\x6a\x0e\x1f\x4b\xe0\xb2\xda\x62\xff\xbb\x30\x41\x97\x98\xee\x41\xcc\x66\x25\x8f\xe7\xc4\x17\xe2\xad\x69\x7f\x75\xb1\x4b\xd6\xb5\x18\xb4\xd2\xa4\x8f\x13\x43\x2c\x49\x4d\xb2\xeb\x2c\xa1\xea\x91\xf0\x46\xfb\x67\x88\x8c\x34\x24\xbc\x49\x15\x60\xfa\x89\x19\x83\x39\x03\xf4\x38\x20\x58\xf7\xec\x91\x79\x18\x33\xe8\x0f\x30\x61\x2f\xe6\x21\xbb\xe9\xd9\x1e\x7f\xed\x0b\xb7\x11\x99\x2f\xc4\x78\xa0\xf2\xe0\xa8\x2b\xe6\x2f\x08\x5e\x0f\x6d\x10\x04\x76\xf2\x48\xc5\xe7\x8a\x66\x61\x3c\x0e\x90\x97\x79\x22\x93\x8a\xe7\x9a\xc1\x88\x12\x0c\x02\xf3\x99\x4c\x63\xe2\x11\x3c\xb4\x6d\xf9\x43\xc4\x99\x25\xbf\x9e\x43\xea\x25\x3f\x24\xfd\x65\xfc\x0e\x4e\x67\xe4\xfa\x0d\x5f\x76\xed\x23\x20\x68\xe0\x5d\x08\x71\xcf\xfe\x37\xe0\xfb\x7d\x79\xf8\x4a\xca\x70\x6f\xe9\x8c\x5c\xf3\x05\x76\xed\x7f\xc3\xf0\x5a\xbd\x94\xa6\x6e\x91\x7e\x96\x23\x40\x80\x77\x2a\xa6\x99\x75\x4c\x30\xd0\x93\x54\x7c\x85\x8c\x03\x9f\x6d\x97\xcc\xc9\x68\x25\x66\x55\xd2\x4c\x45\xd5\xc9\x76\x47\xbe\xaf\x9c\x78\x9c\x5b\x38\x08\x23\x78\x25\xaa\x23\x0b\x72\xea\x65\x02\xcc\xa7\x49\x07\x6f\x65\x6a\x10\x92\x7f\xfe\x5c\x64\xc7\x70\x69\xfe\xb9\x80\xcb\x71\x51\xfe\xf9\x6b\xe5\x19\x06\xcc\x20\xf9\x1c\x81\xe8\xf4\x29\x92\x7e\xb0\xce\x9f\xd2\x3b\x70\x13\x47\x04\xa7\x57\xc4\xec\x00\xf8\xfe\x31\xbf\xb3\xf7\x6c\x44\xfb\x08\x5f\x81\x80\xf7\x36\x98\x10\x2f\xa6\x3d\xc7\xdd\x3d\x14\x53\x8b\x46\x32\xdf\x12\x96\x19\x95\x88\x8b\x38\x59\x28\x33\xfe\x2b\x7f\x88\x24\x7d\xbe\xf2\x87\x20\xbb\x1d\xcc\xa8\xfe\xf4\xb1\xda\x34\xc6\x26\xc9\xb6\x4b\x5f\xa8\x96\xcf\x33\x35\x4d\x93\x76\x89\x6f\xa6\xa3\x52\xe6\xd0\x2c\xee\x5d\x3b\x93\x57\x24\x45\x7e\xd9\x0b\xa5\x0e\x29\xbe\xd0\xd1\x95\x99\x37\x19\x82\xe3\xdb\xc5\x71\x1b\x71\x1d\xc1\x39\xb9\x82\x25\xe8\x76\xd3\xed\x71\x1c\x10\x0a\x4b\xf6\x47\x9d\x5f\x1d\xf0\xfd\x5e\x54\x9a\x12\xa8\xd1\x03\x0f\xaa\x7e\x4d\x4f\x20\xe1\xc6\x92\xba\xf4\x19\x91\xd3\xfa\x6f\x99\x36\x48\x65\x2d\x49\xb7\x23\xbd\x46\xcc\x9b\xf5\x0c\xf4\x19\x3c\x8a\x6f\x24\x17\x3a\xb7\xc2\x06\xcf\xd9\xd5\xb0\xd8\x4e\x47\xbe\xe4\xb3\x15\x29\xf9\xc8\x71\x76\xc6\x11\x04\x97\x3b\xa2\x0f\xc9\xd9\xda\x75\x63\x72\xc1\x7c\x37\x9a\x1d\xb6\xec\x29\xcb\x3d\xf3\x9d\x29\x36\xda\xb2\xaf\x0c\xd3\x4d\xbb\x52\x34\xd4\xa6\x0f\xe8\x38\x8b\x9c\x4f\x15\x6d\x3c\xd3\xbf\x64\x5f\xaa\x75\x1e\xdc\x9c\x89\x55\xfb\xe3\x22\xc9\x8d\x9b\x7d\xf7\x96\xf4\xec\x4d\xe9\x40\xcd\x89\x2f\x75\x1c\xf2\xd7\xb6\xb3\xb7\xd7\xab\xca\xaa\x35\xf0\x02\x08\x22\xe9\x85\x5a\xe2\xaa\x29\x3a\x11\x05\xc3\x9b\x4a\x4f\xcb\x5d\xd5\xc6\xd9\xb5\xad\x9b\xa9\x18\x3b\x95\xc0\x8c\x24\x46\xbf\xd1\x38\x54\x0f\xf2\x19\xe5\x12\x9a\x56\xdb\xbc\xd0\x40\x72\x0f\xc1\x33\x8a\x07\xad\x99\x2c\x26\xc9\xa6\xe7\xa2\xd1\xf9\xc5\xce\x6f\x03\x08\x38\x3b\x52\xfd\xba\x32\xa5\x4b\x7a\xac\x9e\xdd\x84\x32\xcd\x07\x1e\x9c\xea\xdf\x83\x13\xc1\x29\xf6\xf6\xc8\x20\x8c\xe9\x4c\xd2\xb4\xf0\x8e\x6d\xfc\x30\x42\x57\x80\xc1\xbd\x3d\xd4\xfd\x4b\xc5\x52\xf6\xf6\x68\xf6\xdb\x85\xe3\x26\x93\x50\x09\x58\xf0\xe8\xc7\x5b\x99\x80\x26\x4d\xbf\xa2\x27\x78\xab\x8f\x63\x9c\xb2\xec\x45\x92\x32\xdf\x93\x51\xc7\x64\x20\x43\x55\x34\x9a\x8d\xb6\x2e\x91\x29\x31\xd2\xa3\xaf\x6c\x59\x74\x80\xb5\x06\x29\x79\x91\x61\xb2\x2e\x49\x9f\xe7\x58\xa6\x6b\x7c\x92\xe5\x80\x2e\x4a\xde\xf0\xdd\xf7\x5a\x84\x10\xa5\x6b\xad\xf6\xab\x72\x8b\xd6\x67\x36\x6f\xd5\x73\x94\x93\x33\x5f\x82\xa6\xdc\x44\x3a\x4d\x42\x47\xef\xc2\xad\xf1\x2a\x3c\x0e\x9e\x3d\xfb\xee\xf7\xdf\x2f\xcb\xf3\x7c\x68\xaf\xb6\x8c\x93\xdb\x12\xbe\x86\xf6\x7f\xea\xfd\xf7\x8a\xc1\xb9\x88\x00\xa4\x69\x40\xe3\xfd\xb8\x20\xde\x5f\xda\x89\x82\xc6\x88\x44\x89\xc6\x48\x05\x7e\x88\x38\xd6\x17\x32\xd7\x71\x1a\x75\x65\xbc\x3b\xf2\xe7\xa8\x95\xf6\xf3\x1e\x9c\x2b\xb3\xd6\xd6\xd2\x19\xb5\xb6\xaf\xb6\x76\xce\x54\x24\xea\x89\xc8\xea\x52\x7f\xcc\x4a\xa3\xe5\x49\x10\xd3\x72\xcd\xf3\xb1\xea\xed\xa7\x08\xc2\x0a\xe5\x74\x26\x5d\x4a\x83\xe5\x25\xb9\xc4\xd6\xc6\x7f\x95\x4d\xff\x71\x7e\xfa\x3e\xba\x42\xbe\x8c\x69\x68\xad\x8d\xab\x5e\x97\x2c\x35\xad\xb2\x2c\x72\x19\x2a\x16\x85\x37\x62\x28\xb4\x65\xac\xf0\x19\xa9\x5d\x15\xc3\x77\xaf\xcd\xca\xd8\xcf\x15\x9b\xb5\xd2\x7a\x25\xb6\x17\x53\x46\xf8\x43\x7b\x1d\x7a\xf1\x07\x2f\xda\xad\xf0\xa2\x95\x92\xca\xb6\xfb\xce\x66\x04\x4e\x61\x69\x0a\x96\x76\xa0\x95\xb7\x62\x25\xb6\xde\xa5\xc3\xd8\x91\x18\x6f\x53\xde\x62\x47\x41\x60\xf5\xec\x92\xfc\x17\xb4\x98\xb4\xc2\xd8\xbb\xce\x7d\x7b\x01\x16\x96\x56\x69\x0f\x56\x5d\x5d\xdd\xcd\x1d\x2e\xf0\xaf\x24\x0a\x36\xea\xbb\x29\xa6\x94\x5d\xe5\xac\x68\xbf\xfa\x1a\xdb\x35\x47\x5b\x46\xe3\x70\x2f\x7e\x5d\x45\x62\x49\x74\x44\x2b\xd3\x4b\xda\xd3\xdd\x7a\x79\x9d\x40\x12\x06\x1b\xf6\xf2\x4a\x2e\xb2\x39\xe2\xc9\xdf\xff\x96\xa1\x9f\x26\x36\xb1\xc1\xc5\xd7\x3a\xbd\x95\xd7\x3e\xe9\xe8\xae\x97\x9e\x8f\xbb\xe1\xa5\x57\x73\xcb\xad\x7c\xee\x7a\xbf\x96\x85\x5f\xbf\x57\x60\xf6\xcd\x77\x5a\x3e\x16\x47\x5a\x94\x5e\x87\x85\x4c\xea\x9e\xdb\x4f\x0e\x0e\xcc\x3b\xf0\x3d\x8a\x55\x49\xfe\xaa\x3a\xce\x9a\x7a\xe6\x75\xb9\x29\x74\x92\xc6\xec\x92\x54\x48\x4d\xc3\x96\xa5\xc2\x7a\xe2\x3e\x11\x24\xac\x92\xac\x1d\x2c\x9d\xe1\x68\x33\xac\x40\x03\x68\x66\x5f\x5a\x96\x1b\x64\xfb\x6a\x66\x08\x4b\xb2\x05\x99\xe2\x4b\x5c\xe6\x6a\xc3\x78\x66\xd0\xbb\x1c\x93\x4f\x19\x26\xc1\xfb\x4e\x92\xa2\x49\x68\xc7\xd3\x49\x3e\x11\x5a\x03\x1b\xe9\xcc\x4c\x0e\x93\xc1\xf2\xa9\xd4\x0e\x5c\x3b\x65\x2f\x39\x52\xe9\xc2\x4e\xba\x31\x95\xfc\xf3\x27\x75\xb9\xa4\x5a\x74\xba\xf2\xf6\x83\xf3\x90\xdd\x18\xfb\xef\x2d\xb1\x52\x4f\xde\x76\x77\xd9\x1a\xf6\x78\xe7\xde\xd1\xe9\xb0\x4b\xe4\xbf\xe2\x8d\x52\x8d\x44\xea\x9b\xa8\x18\xa5\xd6\x42\xa4\x2f\xe6\x90\x52\x30\x15\xaf\x04\x6a\x5b\xe5\xb6\x92\x77\x1b\xe5\x2b\x98\xcd\x6b\x95\x5e\x7b\x72\xce\xd4\x39\xeb\x46\x02\x4a\x8d\x9f\x74\xdb\x1b\xbe\x76\xa5\x11\x0f\x19\x18\xab\x54\x6c\xb6\xd4\x93\xf2\x87\x11\x91\x48\x42\x20\x20\x53\xfd\x10\xf9\x5c\xb8\xce\x99\x95\x97\xd2\x0e\x88\x4f\xfb\xb2\x77\x4b\xfe\x08\xa6\xf9\xb1\x8d\xac\x59\x4b\x9d\x75\xb2\xdf\x7a\x2d\x46\x87\x8e\x38\x25\x49\x0d\x84\xde\x36\xf0\xda\x3a\xad\xa9\x1f\xd8\xa1\x6f\x51\x61\xb8\xdd\x0d\x70\x42\xa2\x79\x86\x79\x13\x4c\xe3\xf1\x1c\x31\xbb\xb6\xe2\x9c\x72\x3e\xb1\xb3\x12\xdc\xf2\xd2\x1b\x07\xa3\x3f\x8d\x48\x1c\x36\xc1\x9d\xe9\x4e\x69\x68\x8d\x0e\x27\x42\xa3\x97\xf3\x74\x30\x90\xac\x7e\xb6\x63\xc7\x6a\xbb\x21\x1c\xc6\xc6\x16\x63\x37\x21\xb4\x15\xf9\x6a\xf8\x45\x9a\xc8\x99\xf6\xc9\x17\xf6\x14\x21\x9a\x89\x62\x92\x05\x78\xd4\x7c\x95\x2b\x9b\x35\x27\x31\x85\x2c\x02\xa1\x56\x01\x5b\xb2\x95\xda\xb8\x89\xf7\x48\xf9\x1e\xad\x45\x10\x9d\x0b\x47\xac\x2a\x8c\x73\xf0\x2c\xfe\x4f\x7f\x1e\x4b\x89\x21\x89\xc2\x9b\x81\x08\x78\x9c\xc1\x5a\x00\xfb\x16\x8e\x45\x1e\x5a\x8b\xe0\xe0\xa6\x05\xfe\xaa\x05\xda\xbb\xa6\x89\x24\xde\x87\x7a\x11\x0a\xdb\x84\xfc\x14\x96\x5f\xb8\x1e\xf5\x73\x44\x20\x56\x5f\x51\x82\x5c\xee\x2a\x62\x00\x31\x23\x1e\x99\x87\x32\xa8\x29\xc9\x75\xaa\x0e\x0c\x49\x20\xc6\x4a\x3f\x57\x39\x10\x33\x24\x92\x10\x86\x6f\xcc\xc3\xb5\xc9\x64\x52\xa2\x94\xfe\x32\x56\xe4\x95\xd7\x65\x29\x6a\x80\x8a\x91\x30\x18\xf4\x43\xe4\x5d\x66\x18\x6a\x2b\x09\xb0\x22\xbb\x6a\xbb\x2b\x45\x62\x13\xee\xa6\x14\xaa\xc0\x12\x5a\xe9\x6a\x90\x78\x8c\xa9\x7b\xc1\x63\x99\x9a\x65\xc9\x3b\x01\x93\x72\x78\xda\x51\x5b\xb4\x96\x6d\x20\x79\x7b\x15\x8b\x24\xf2\x83\x66\x4d\x3b\x17\x72\x70\x35\x4c\x5b\xfe\x56\x41\xd8\x45\xe1\xf0\x71\x43\xaa\xd5\xca\x1d\xb2\x74\xab\xad\xdb\x6a\xaf\x8b\xb7\xf2\xe5\x76\x85\x99\xa5\x79\xb9\xed\x56\x4b\xe4\xa2\x63\x0b\x13\x0c\x9b\x49\x5d\xcd\xc9\xc8\x01\xbe\x04\x91\x27\x8e\x94\x17\xe6\xed\x05\xc3\x52\x0d\x46\x27\x65\x42\xe3\xbe\x6f\x8f\x8f\xf6\xa8\xc8\xa4\x3b\xae\xc7\x0a\x1f\xcb\xb8\x4a\x1f\x8a\xab\xb4\x71\x91\xe6\xef\xd5\xd5\x26\x97\x0b\xb9\x1d\x4a\xb3\xa0\x74\x63\x1e\xe9\x8d\xba\x98\x82\xb9\x5d\x27\x4d\x3c\xa1\x29\xfd\xf2\x17\xb8\xd5\x53\xd9\x57\x38\x02\x2b\x69\x53\xa7\x52\x37\x05\x3b\xfe\xba\xc5\x45\xa3\x9a\x91\x53\xa5\x31\xca\x88\x42\xc9\xfd\xda\x0e\x23\x32\x0f\x85\xa1\xd1\xd3\x62\x8a\x90\x57\x7e\xe1\x52\xd2\x09\x10\xc1\x18\xf2\x89\xa0\x15\xf5\x44\x76\xaa\xc4\xb3\xf2\x39\x98\x52\x92\xb8\xc0\xaa\x8f\x54\xd5\xf5\xda\x5a\xda\x39\x5f\xfd\x94\x67\x08\xe0\x4d\x71\xdb\xf4\xa3\x5e\x8b\xc0\x2d\x46\x80\x73\x80\x82\x9f\x61\x10\xda\x1d\xc5\x70\x12\xde\x58\x69\x96\x3a\xcb\x4c\x6f\x97\x94\x4b\xa7\xd6\x24\x22\x73\x0b\x7e\x42\x94\x21\x3c\xad\xad\x42\xdf\x8d\x34\xe7\x20\x9a\x22\xdc\x67\x24\xec\x1f\x1e\xd8\x05\x05\x5b\x51\xb7\xab\x03\x49\x96\xe5\x8c\xb6\x99\xcd\xcd\xd3\x4a\xc0\x54\xbb\x91\xf2\xb2\xc4\xe9\xc3\xf0\xe2\xbf\x28\xcb\xe6\x5e\xc0\x62\x73\x38\xde\xba\x01\x34\xc2\x07\x6a\x41\xcc\x85\xd5\xdd\x2d\x90\x69\x5e\xe9\x3a\x10\x33\x85\x56\x96\x4d\x87\x5f\xcd\x76\x57\x32\xb9\xad\xae\x38\x99\x10\xc2\x9a\x85\x9a\x02\x47\xcc\xfb\x91\x25\x0e\x64\xca\x33\x4e\x3b\x92\xf9\x88\xf2\xf5\xb5\x4b\x5d\x96\x52\x6f\x24\x70\xa3\xd5\x81\x35\xbe\x62\xc7\x00\x7b\xf2\xd8\xaf\xd2\x1b\x56\x81\xfd\x38\x0b\x76\x7f\x0a\xc2\x82\x0b\xd8\x1a\x27\x5d\xeb\x3d\x57\x70\xc1\x6a\x98\x75\x52\x87\xa7\xbd\x6a\xaa\x8d\x7b\x5c\xb5\x13\xd0\x46\x72\x78\x6c\x2c\x5e\x75\xc9\x38\xd5\xdf\xe3\x79\xc8\x48\x45\x68\xe5\x26\x1d\x8a\x8b\xc1\x91\xb7\xdd\x40\xfe\x92\x23\x47\x02\x84\x2f\x6b\x62\x34\x10\xbe\xb4\x1d\x97\xcf\xf3\x8c\xbc\x46\xf8\x72\x68\xdb\x66\xc0\xc6\x30\x01\x59\x96\xa9\x54\x05\x6b\x8d\xf4\xeb\x12\x45\xb6\x33\xe0\x7f\xfc\x86\xfc\x9d\xfa\x1a\xc1\x2c\x13\xa8\xa5\x80\xd3\xb5\x81\x39\x00\x1f\xa2\x20\xa9\x2c\x0d\x33\x09\xd2\x53\x20\x45\x50\x15\xeb\x99\xd9\xd1\x2b\x00\x9d\xe6\x3e\x74\x76\xae\x11\xf6\xc9\xf5\x20\x20\x9e\x70\xfb\x1e\xcc\x22\x38\x19\xc1\xb6\x3e\xf1\x8a\x20\xb6\xc4\x25\xfe\xd1\x3f\xa2\xd3\x47\xdf\x1d\x7e\xd7\x2a\xd6\x7a\x99\xfd\x9e\x9b\x6e\xa7\xed\x9e\xe4\x4e\xff\xa2\x76\x7c\x0a\xf5\x97\xbc\xe9\xb3\x21\x57\x69\x8c\x88\xb9\x4b\xcc\x00\xa5\xc1\x60\x00\xa2\xa9\x14\xb9\x54\x78\x95\x8a\x20\x49\xe2\x47\x7e\x45\x6c\x46\x62\x76\x1a\x4f\x26\xe8\x53\xcf\x3e\xba\x76\xad\x53\x0c\xc2\xdd\xf6\xf1\x24\x29\x6a\xb7\x64\xfb\xfc\xd7\xd1\x2f\x97\x3f\xfd\x7a\xda\x6e\xfb\xd4\x1a\xf2\x93\x32\x01\x79\x99\x4e\xc9\x83\xb3\xc3\xbc\xb6\xec\x1d\x09\xe9\xae\x75\x36\x03\xcc\x0a\xc1\x14\x5a\x1e\x89\x03\x1f\x7f\xfc\x86\x59\x63\x68\x89\xbe\x06\x25\xa7\xbd\xe8\x2c\xcc\xf7\xf5\x06\xdc\x8c\xa1\xc5\x66\xbc\x17\x99\xd5\xf0\x86\xc4\x1f\xbf\x89\xa0\x15\x10\x72\xc9\xef\x6a\x13\x12\x59\x88\x5a\x98\x58\x01\xc1\x53\x18\x59\xe0\x0a\xa0\x00\x8c\x03\xf8\xb4\xf5\x28\xff\xff\xff\x5f\x55\x53\x90\x41\x0a\x67\xa8\xb6\x6b\xef\x1b\xb8\x78\xaf\x32\xc0\x13\x2b\x71\x7d\x9f\x91\x39\x14\x33\x2f\x6a\xc1\xb2\xbf\x36\x91\x21\xa2\x48\x89\x9d\x38\x5b\x18\x91\x09\x0a\xe0\x76\xf0\xb5\x98\x36\x05\x7e\xc6\x22\x10\xac\xbe\x50\x8b\x93\x66\x30\xa0\xe0\x4a\x84\xfb\xf3\x53\x94\x8d\xe0\x20\x04\x94\x5e\x93\xc8\x77\xf1\x08\x0e\x3c\x82\x27\x28\x9a\x8b\xa3\x73\xa7\x90\xd8\xdf\x80\xc5\x76\x06\xa2\xa3\x34\xd5\xbd\x3a\xd3\x7b\xce\xe8\xc7\x5b\x05\x03\x3d\x89\x20\x85\x98\xf5\x98\xb3\xb7\x97\x7f\x86\x9d\xbd\xbd\xaa\xae\x65\xcd\xef\x13\x05\x59\x2f\x1f\x38\x2d\x83\xcb\xd3\xf8\x72\x18\x0c\x64\x72\x38\x06\x5f\x61\xc4\x10\x08\x68\xcf\x8c\x2c\xd7\x5e\xb8\x8e\x14\x34\x04\xc2\x8c\x8f\x9b\x82\xc5\x65\x59\xef\xae\xd4\xf3\x25\x9f\x2f\xad\x89\xae\x53\x60\x72\x03\x85\x56\x88\xa5\x85\x65\x1c\x64\x5d\xa9\x9d\xcf\x9f\x4b\xe2\x85\x79\x9b\x41\x40\xa6\x08\xdb\x65\x22\x64\x03\x69\x4f\x21\xfb\x40\x33\x85\x82\xf4\xd8\xa5\x30\x0c\xf8\xd7\x82\x2a\x33\xd5\xdf\x87\x26\xa3\x68\x71\xe8\xaa\x90\xda\x49\x1c\x04\xaa\x16\x46\xc7\xd8\x63\x15\xb5\x90\x3e\x48\xea\x17\x95\x07\x43\x0f\x3c\x33\x6b\x02\x1f\xaf\xe5\x51\xaf\x69\x7c\x4b\x0e\xfa\x27\x2f\x7f\x3a\x9c\xe0\xe8\x2f\xf7\x5b\x90\xc2\xd4\xe0\x57\xf8\x8e\x3d\x84\x54\x35\xf9\xfe\x9e\xbc\x7f\xf7\xf2\xd5\xeb\x17\xf5\xea\x94\xba\xfe\xe0\xa7\x7a\xb7\xaa\x53\x28\xc4\xa7\xc8\xd2\x5e\xdc\x16\xc2\x13\xa2\x8e\x3c\x8b\x44\x16\x3f\x9e\x74\x13\x75\x00\x0d\xda\xa9\x74\xd6\x00\xdd\xcf\xe0\x0a\x5a\xc0\x0a\x65\x9e\x41\x0b\xf9\x10\xb8\x16\x8d\xa7\x53\x48\x35\x7c\x94\x4b\x56\x13\x08\xfd\x31\xf0\x2e\x9f\x5a\x75\x32\xda\x1c\xa0\x80\x91\x21\x8d\x43\xbe\x35\xff\x53\xef\xe1\x81\x47\xe6\x06\x14\x3f\x41\x66\x21\x2e\xbd\xc5\xde\xac\x28\x94\x6e\x5e\x8f\x75\xaf\xae\x96\xa9\xf3\x40\x36\x5c\x47\xca\x08\x29\x2f\xe6\x13\x78\x23\xca\x65\x28\xd2\x90\x1c\x50\xb8\x35\x69\x32\x69\x15\xac\xd0\xca\x35\x93\x8f\xbe\xcf\xff\xe9\xab\x71\x52\xf8\x93\xc8\x34\x70\x55\x48\xa9\x57\xa7\xd3\x54\xed\xab\xb5\x99\x77\xad\x6b\xcc\x9f\x21\x9d\x44\x74\x0a\x41\xe4\xcd\xb6\x43\x42\xef\x54\xd4\x6c\xa2\x6b\xbc\xce\x01\xf3\x66\xcf\x89\xa7\xff\x3c\x4e\x4c\x9f\xe2\xe7\x19\x98\xea\x3f\x5f\x8a\xf5\xb7\xa9\x74\x7a\x95\x1d\x0c\x6d\xdb\xd5\x3d\x0c\x77\x0f\x5c\xb3\x8b\xe4\xf7\x19\x98\x26\x7f\xf3\x4e\xf8\x0f\xde\xcb\x70\xf7\xb0\x1b\x9a\xbf\x64\x51\x56\xcf\x9e\x23\x4d\xec\x21\x53\x77\x92\x5c\x83\x6e\x53\x64\xee\xfe\x36\x40\xf4\x03\x96\x60\xf9\x3d\x38\x60\x64\x60\xac\xe1\x40\xb7\x74\x3e\x7f\xb6\x39\xcb\xb5\x47\xa3\xca\x36\xb9\x75\x69\xd5\xb5\x6a\xdd\xd8\xbd\x6a\x67\x2c\x75\xab\xee\xcf\xc0\xb4\xb1\xeb\x33\x30\x35\xa9\xa6\x55\xbf\xbc\x69\x63\xc7\xbc\x91\x22\xc1\x86\x3e\x79\x23\x67\x6f\x4f\x77\x57\xec\x8f\x37\x30\xd3\xa3\x19\xeb\xcc\x25\xe0\x82\xe4\x3c\xcc\x12\x5f\x6b\x11\x3a\xdb\x6f\x7a\x11\x35\x1e\x77\xcb\xd2\x22\xb6\x54\x7b\xad\x9a\xda\x82\x5b\x22\x69\x23\xf0\x73\x70\xf8\xeb\x87\xeb\x75\x49\xda\x65\xe9\x58\x24\x82\x1e\x04\xf0\xfb\x11\xc0\xdf\x70\xc2\xb6\x5e\xde\x61\x66\x83\x92\xef\x91\x22\x86\x96\xf6\xf3\x1a\xaf\x6a\xe1\xb7\x20\x9d\x14\x14\x65\xf5\x0f\xf5\x63\xe1\xce\xa0\xe4\x27\x73\x97\xa7\x67\x73\x3b\xd7\x9d\x06\x57\xaa\x64\xd8\x86\x62\x12\xca\x27\xc2\xc2\x4d\xd1\x05\xab\x78\x28\x6c\x14\xb3\x8f\xdb\x61\x36\x29\xaa\xb2\x46\xec\x3e\x6e\x8b\x5d\xaf\x45\x45\x97\xad\x45\xf0\x93\x76\x08\xe6\xc2\xe3\x3a\x91\xfb\xa4\x01\xb9\x67\x60\xfa\x05\x53\xed\xb7\xed\x90\x2a\xc4\xf0\x75\x62\xf5\xdb\x06\xac\x1e\x31\x06\xbc\xd9\xaa\x2c\xa1\xc3\xb5\xbd\x6d\xa4\xf8\xe3\x7c\xa4\xf8\xfd\x9c\x54\x42\x1a\xb4\xe0\x27\xc0\xef\x20\x35\x25\xbe\x1a\xba\xbd\x42\xf0\xba\xaf\x85\x8e\xda\xe4\x68\xa5\xf5\x22\xa8\x4c\x60\x79\x12\x11\x95\x06\xab\x2c\x47\xd4\x29\x23\x51\xda\xc4\xb5\xdf\xdc\x9c\xfe\xe3\xf5\xea\xb5\xc0\xca\x90\x7c\x83\x19\xf8\xd4\xb4\x57\x5a\x84\xe3\x4a\xb4\x1a\x1d\x81\x30\x0c\xa0\x35\x06\x18\xe0\xfa\x32\x93\x2d\xfb\x0f\x03\x80\x4c\x62\x38\x9d\x91\x6b\x2b\x82\x34\x0e\x18\xb5\xd8\x0c\x48\x56\x0d\x10\xb6\x00\xb3\x02\x08\x28\xb3\x08\x86\x16\x99\x08\x4b\x28\xbb\x26\xd6\x35\x89\xfc\xfa\xd2\x6e\x4b\x4e\xf5\x91\x9c\xeb\xa3\xfb\x98\xec\x98\xb0\xd9\xc6\x67\x36\x07\x1e\xc2\x8c\xc8\x72\x3f\x77\x37\x37\xbe\x70\x7c\x6a\xd6\xc7\x8f\x92\x9c\x3e\x7e\xb4\x5d\x6b\x1c\x33\x2b\x02\xf8\xd2\xe2\xb7\x25\x6b\x86\xa6\x33\x18\x59\x48\x2c\xf3\x8d\x05\x02\x4a\x92\xef\x3f\x7e\xb4\x13\xc8\x3f\x7e\xb4\x37\x88\xa0\xfe\x16\x61\x48\x20\x08\x13\x76\x87\xd3\x7f\xd4\xfb\x91\xc5\x11\x26\x57\x30\xb2\xfe\x46\x59\x14\xfb\x30\x68\x93\x80\x60\x03\x98\xa0\x19\x54\x00\x2c\x50\xa3\x81\x13\xf4\x43\xa2\xb2\x26\x0a\x6a\xfe\xa4\xc7\x79\x08\xbe\xb1\x44\x22\x49\xc7\x20\x38\xfd\x99\x65\xf4\xa7\x09\x90\xcd\x00\x4e\x1b\xa4\xbd\x6d\x02\xeb\x62\x8c\x7f\xbf\x5b\xfc\x4a\xdc\xd2\xd8\x9b\x59\x80\x66\x37\xa4\xfe\x41\xb3\xbf\x40\xec\xc1\x3c\xc2\xd9\x86\x30\xc2\x17\x90\xcc\x15\x05\xac\x69\x8c\x6e\xb4\x07\x3f\x01\x8f\x59\xe1\x2c\x02\x14\x5a\x79\x70\xac\xde\x84\x44\x5a\xf4\x70\x25\xe3\xca\xf4\x90\xf9\x80\x9f\x59\xd7\x88\xfa\x64\x9e\xdb\xcd\xa2\x09\x26\x88\xa6\x3d\xaf\x31\x6b\xd0\x86\x64\x97\x13\x42\xd9\x34\x82\x5f\xaa\x00\xf3\xf9\x5e\x44\x18\x88\x18\x67\x2a\xc2\x4a\xb4\x29\x06\x62\xed\xdd\xcb\xd4\x36\x2b\xb0\xc8\x99\xed\xfe\x49\x8f\xe3\x29\x21\x53\xb1\xb0\x3d\x4d\xbc\x73\xe4\x45\x84\x92\x09\x73\xac\x3d\x6b\x17\x8d\xe7\x77\x83\x90\x19\xb8\x12\x5c\x50\x02\x24\x4e\x01\x45\xd2\x26\x66\xe4\xc1\x90\x80\x98\x43\x16\x1a\xcf\x37\x79\x7e\x0e\xef\xe5\x00\x15\x8f\x28\x03\x11\xb3\xae\x11\x9b\x65\x0f\xd2\xfc\xe9\xaa\x8f\xd0\xae\x27\xe8\xbd\xf3\xfc\xd3\x7f\xbc\x3e\x85\xd1\x95\x51\x90\xf8\x4b\x62\xf9\xef\xde\x7f\xbd\x3c\xff\xe8\xed\xf3\xaf\x96\xeb\xf3\xb9\xbd\x7d\x77\xb6\x4d\xb7\xd5\xbb\x64\xfe\x7a\xd8\x7f\xbf\x73\xf9\xf7\xe1\x6e\xf0\xb5\xdf\x0d\x72\x6c\xba\x83\x92\xb8\xf0\x6c\xab\x33\xe9\x69\xf7\x2e\x6d\x76\x77\xed\x97\x08\xfb\x56\x3a\x7a\x75\xce\x7f\x6d\x85\x6e\x97\x4b\x4f\x5a\xe9\x95\x66\xff\x4a\x94\xf6\xd1\x20\x4d\xf2\x66\x04\x65\x59\x95\x63\xeb\x1c\xf2\x17\x25\x96\x87\x0a\x6b\xc3\x5d\x7b\x6a\xe5\x5c\x10\x3a\x3a\x6a\xb1\x38\xac\x2c\xb7\x99\xb4\x8d\x19\x0a\xe8\x3e\xc4\x1e\x11\xcb\xb9\x59\x57\xa1\x32\x1f\xae\xdf\xc1\xa7\x76\x91\x13\x25\xbe\xe3\xfc\x63\x51\x07\xef\x5f\x31\xa4\xac\x67\xcb\x49\xdb\xee\xed\x1c\xb2\x19\xf1\x87\xf6\xc9\xbb\xd3\x33\xdb\xf5\x01\x03\xc3\x34\xea\x40\xfc\x3e\xbb\x09\xe1\x50\xba\x85\x2e\xcc\x00\x0a\x15\xe2\xa8\x67\x31\x78\x06\x28\xfc\xcb\xb7\x03\x81\x20\xd8\xb3\x87\xf6\x23\x23\xf6\x41\xa4\x85\x78\x94\x7b\xa8\x9d\x12\x2b\x22\x22\x6d\xe1\xa8\xb5\x4f\x29\xd9\xb7\x1f\xc9\x6e\x3f\xbc\x7f\x75\x4c\xe6\x21\xc1\x10\xb3\x1e\x74\x1e\xd9\x4f\x27\xd1\xe8\x90\xc3\xe5\x71\x9a\x94\x80\x15\x02\x21\xea\x3c\x57\xf8\xd2\x97\xf8\x8e\xa9\x22\xab\x77\xe8\x0f\x96\x0b\x98\x93\xd8\xd5\x49\x08\x06\x9c\x89\x48\xdf\x22\x99\xd7\x83\x44\x3d\xfb\x3c\x54\x00\x8c\xfc\xf1\x0c\xd0\xd9\x85\xed\x0c\x14\xd7\xd8\x39\xd8\x1d\x8d\xa0\xaa\x37\xb5\xb7\x67\xdf\xde\x0e\x9e\x3f\xe3\x6d\x16\x0b\x9b\xbf\x69\x1b\x8f\xb0\x3a\x20\x92\x12\x6f\xfd\xb1\xa8\x62\xd9\xba\x1b\xde\xda\xe8\xc6\x95\x1d\x0f\xa1\x2b\x98\xa7\x70\x2d\x94\xf9\x44\x87\xf6\xd9\x0c\xd1\x34\xa8\x0b\x09\x36\xe9\x41\x7d\x94\x51\x0b\x04\x81\x45\xe2\xc8\x62\x10\xcc\x93\xac\x0e\xca\xc1\x07\x04\x01\xb9\x3e\xc2\x04\xdf\xcc\x49\x4c\x8f\x3c\x0f\x52\x3a\xdc\x3d\x74\x27\x28\xa2\x0c\xab\xc2\xaa\x01\x48\xff\x16\x74\xcc\xff\xd0\xb4\x3b\x84\xda\xaf\x0a\x11\xfc\x77\x78\x23\x1a\xc9\x72\xeb\x6d\x67\xab\x9a\x1b\xd3\x5d\x64\x9c\xb5\x72\xd5\x2d\x45\xce\x4b\xb3\x7c\xe8\x18\x78\x97\xd3\x88\xc4\xd8\x97\xe9\x86\xfb\x6c\x06\xe7\xb0\x7f\x78\x70\x60\x3b\x6e\x02\x83\x40\xdc\xc8\xfe\x15\x06\x1e\x3f\xb6\x19\x11\x62\x42\x16\x6f\x82\xfb\x2d\x5c\x1f\x36\x8e\x9e\x29\xa8\x59\x07\x40\xb7\x9d\xb8\x25\x2e\x64\xfe\xf7\xd1\x1f\xef\x4e\x7e\xf7\xdb\x17\x90\x16\xe7\x2b\x9f\x81\x9e\x55\x5f\x31\xd8\xcd\xfa\x44\x2f\x7b\x58\x9a\xb8\xee\x74\x56\xf2\x95\x45\x78\xda\x7c\x5a\x2a\x57\x5b\x4c\x18\x9a\x20\x59\x7a\xe9\x4e\x8f\x4b\xb3\x70\xa5\x51\x18\x39\x16\x5b\x5c\x7b\x40\x0a\xe8\x6e\xf4\x43\xfb\x14\x5c\x41\x5f\xd6\x3c\x7e\x85\x27\x24\xdb\x4a\x3c\xb1\x7f\x25\xd1\x25\x3f\xfd\x45\xa3\x5f\x41\x84\xb3\x8d\xc4\x13\xfb\x25\x40\x01\xf4\xf9\x16\x9b\x42\x26\x9b\xbe\x88\x22\x12\x65\xdb\xca\x47\xf6\x07\x0c\xc6\x81\xd8\x8f\x7c\xa9\x2d\x6f\x06\xf0\x54\x94\xc8\x73\x09\x7e\x26\x32\x8f\x88\xac\x22\x9c\xf6\xb9\x0c\x48\x02\xc8\x79\x74\x4f\xd6\x46\x3e\x93\x1e\x86\x55\x2d\xda\x6e\x3e\xbd\xaa\x85\x83\x70\x93\x7b\x2f\x7b\xfa\x75\xa4\xbf\x2d\x61\x14\xc1\xd5\xbf\x4e\xfd\xc3\x7f\xbe\x69\xc7\x28\xbe\xcd\x3b\x88\x26\xce\x9a\x82\x4b\xd4\x28\xab\x54\xaa\xbe\xbf\xba\xf6\x38\xca\x04\x45\x67\xae\x39\xec\x9a\xb4\x69\x35\x8b\x20\xac\x8f\xb3\x7e\x16\x21\x3c\xd5\x47\x04\x13\xf4\x79\x8d\x70\xff\x1a\x61\x8b\xc6\xd1\x15\xba\x02\x81\x45\x59\x04\x18\x9c\x22\x48\x79\x43\x88\x69\x1c\x41\x2b\x8c\x88\x38\x3a\xa0\xe5\x93\x39\xc2\x52\x98\xb3\x8e\x98\xbc\x92\x62\x5f\xbb\x46\xf8\xe0\xc6\xb5\xa6\x44\xc5\x85\x5f\x83\xc8\x77\x2d\x20\xf2\x75\x60\x12\xcd\x41\xa0\x35\xba\xd4\x82\x57\x24\xb8\x82\xbe\x4c\xfc\xa5\x22\x68\x11\xc1\xd6\x7f\x59\x88\x5a\x44\xde\x75\xa3\x18\x5f\x83\x1b\x4b\x5d\xb4\x2c\x46\x78\x87\xd4\x02\x1c\x46\x08\xe6\x01\xc2\xd0\xb7\xbc\x80\xc4\xbe\x45\x49\x10\x4b\xa0\x3e\x50\x18\xe9\x0e\x61\x72\xdd\xb2\x10\xb6\x22\x08\x82\x3e\x43\xfc\xfa\x8b\x82\x40\xea\x95\xe7\x71\xc0\x90\x30\xc3\x92\xd8\x9b\x85\x04\x89\x64\x64\x24\xb2\xc8\x64\x42\x67\x84\xe3\xab\x7d\xb0\xfc\x03\x7a\x57\x47\x6f\x83\x86\x39\xbb\xcf\x92\xbb\x74\xd3\x3e\xb3\x9b\x72\x3f\x09\xc9\xc6\x2f\x4f\xfa\xd4\x90\xd1\xe9\x54\x9c\xe4\xb5\x29\x9d\x0c\x7e\x6f\xbb\x87\xf5\x91\x50\x9d\x52\x5c\x75\x98\x57\x75\x52\x2b\x31\xbf\x86\x49\x7e\x10\x51\xf1\x5d\xa6\xf9\x78\xcd\xd3\x6c\xe0\x7e\x2d\x9b\xb4\x4b\x00\xb6\x54\xe2\xaf\x95\x28\x44\xc9\x2a\x0d\x51\x72\xeb\xa5\x8d\xa5\xa6\xfb\x4f\xc8\xaf\x56\xf5\xf3\x6d\x45\x2c\x5c\xee\xda\xfe\xe9\xea\x5c\x76\x6d\xd2\xd8\xd5\x4c\x96\xcb\x8f\xdb\x3f\xd9\xf7\xaa\x88\x5a\xe5\x5c\x9f\x43\x99\x03\xbe\x76\xae\x42\xfe\x5d\xf7\x64\xef\x72\xf7\x6f\x32\xfd\xdf\xb6\xb3\x82\x65\xe6\x9e\xb2\x84\x75\x1c\x22\xf7\xc7\x17\x96\x5b\xf7\x8e\xb9\x2e\xb7\x92\x49\x2c\x33\x73\xc5\x2c\x1a\x26\xfe\xa7\xe2\x18\x99\x02\xf1\x6b\x62\x1c\x8d\xd5\xb9\xbf\x30\xce\xb2\x0c\x8e\x1a\x19\x4c\xab\x62\xd9\x5f\x16\x17\x5a\x8e\x96\x6a\x99\x91\x26\xa5\x08\xc9\x0a\x6f\x5f\x3a\xbb\x5a\x06\x45\xf5\x5c\x4b\x61\xc8\x64\x5a\x5f\x1d\x63\xb3\xcd\xd4\xda\x49\x24\xb3\xc6\xb1\x0f\xa2\x4b\x03\xc5\x11\x40\x54\x5d\x8b\xa3\x29\xb4\x5d\x7b\x2c\x1c\xd9\x65\x10\x9b\x80\xce\xad\xf8\xb7\xca\xa6\xce\xca\x56\xba\x55\xdd\xfc\xda\xf5\x6d\xb1\x72\x05\x29\xb7\x72\xd9\x4c\xed\x6b\xc3\x7d\x7d\xa3\xb3\xa9\xd9\xa9\x65\xd7\xb1\x96\xf3\xa9\xbd\x98\x77\x9e\x4f\x9b\x79\x64\xf9\x72\x4b\x30\x9f\x6c\x33\xda\x8d\x4b\x7f\xcb\xe9\x7c\x7b\xe7\x58\x4f\xf2\xfe\xb4\x07\xf2\xbb\xfb\xc3\x79\xa5\x7c\xb3\x3c\xca\xab\x67\xd3\xec\x9e\xb4\x85\x8c\x36\x55\xd3\xa5\xbf\x1f\xb8\xec\x03\x97\x7d\xe0\xb2\x0f\x5c\xf6\x81\xcb\xae\xce\x65\x73\xac\xf5\x81\xcb\x3e\x70\xd9\x07\x2e\xfb\xc0\x65\x1f\xb8\xec\x86\x95\x06\x29\xb3\x7d\xe0\xb3\x0f\x7c\xf6\x81\xcf\x3e\xf0\xd9\x07\x3e\xbb\x7e\x9d\x41\xf2\xcf\x03\x93\x7d\x60\xb2\x0f\x4c\xf6\x81\xc9\x3e\x30\xd9\xf5\xab\x0c\x1e\x98\xec\x03\x93\x7d\x60\xb2\x0f\x4c\xd6\xc4\x39\x6f\xc4\x50\xb8\x7e\x76\x6b\xbf\x85\xd7\x2d\x2a\xc7\x7f\xa5\xac\x77\xcb\xe4\xdb\xbb\x3d\x26\xbf\x10\x56\x75\x27\x24\xf5\x10\x8f\xf3\x10\xee\xf4\x80\xde\x07\xf4\x3e\xa0\xf7\x01\xbd\x0f\xe8\x7d\x40\xef\x03\x7a\x1f\xd0\xfb\x80\xde\x07\xf4\x3e\xa0\xf7\x01\xbd\x0f\xe8\x7d\x40\xef\x03\x7a\x1f\xd0\xfb\x80\xde\x07\xf4\x3e\xa0\xf7\xeb\x40\x6f\xb5\x52\x79\x99\x94\x79\xf9\xbc\x63\x9d\x92\xe6\xc5\x22\x92\x98\x56\x26\xcd\xbb\x93\x64\xa3\xdd\xab\x82\xab\x4a\xf3\x55\xaf\x31\xbc\xa6\xba\x6c\xb4\x6d\xbb\x08\x23\xd6\xcb\x16\x2d\x1e\x0c\x06\x20\x9a\x8a\xf4\x93\xd4\xd9\x51\xf9\x62\xd3\x94\xb4\x72\xf4\xc1\x15\x8c\x44\x41\x7b\xc7\xc5\x25\x6f\x55\x72\x4c\xdb\x19\x30\xf2\x9a\x5c\xc3\xe8\x18\x50\x3e\x3a\x11\x6d\x5d\x3a\x7a\xc4\xa9\xf6\x39\x60\x70\x27\x4d\x45\x0b\x7e\x07\x9f\x7a\xb7\x71\x14\x0c\xed\x19\x63\x21\x1d\xee\x27\x79\x19\x07\xf4\x49\x1f\xc6\xfd\x6b\x48\x59\xff\x70\x00\xe6\xe0\x0f\x82\xc1\x35\x1d\x78\x64\xbe\xcf\x67\xb4\x6f\x0f\x3c\x82\x3d\xc0\x7a\xd8\xb5\xf7\x65\x4a\x4e\xfe\x0b\xba\xf6\x60\xc6\xe6\xc1\x53\x6f\x3c\x4a\x9f\x52\xc7\x65\x22\x3d\xee\x4f\x2f\x54\xf6\x5c\x99\x2d\x97\xb7\xb4\x5d\x2a\xe3\xe8\x87\x66\x5a\x3a\x22\xa7\x87\xe8\x73\x48\x59\x44\x6e\xa0\x6f\x3b\x9f\x3f\xe7\x9f\x8a\x14\x83\xfc\xb1\xa8\xef\x6c\x60\xda\x76\xa1\xb3\x58\xb4\xce\xaa\xa9\x29\xef\x1e\x13\xfb\xb5\xae\x3a\x7d\x12\x11\x3f\xf6\x98\xf5\x16\x5e\xd3\x7c\xde\xd0\xe6\xbd\xb5\x25\x09\x01\x7f\x78\xf5\xe4\xc5\xef\x87\x7f\xfd\xe7\xba\x8a\x4f\x67\x8b\x46\xdb\x2d\xab\x4c\xd7\x57\x8c\xae\xc9\x32\xff\x07\xc1\x50\x56\x01\xae\x32\x9e\xd5\x7e\xf9\xd8\x2e\x29\x90\xd1\xf0\xa1\x08\xcb\xb7\x64\xde\xd8\x69\x04\x6e\xfa\x7f\x3d\x38\x28\xeb\xe6\xe3\x47\x96\x24\xab\xd5\x16\xcd\x6c\xd9\x10\xcd\x2a\xb2\xf6\x45\xeb\x85\x7c\x5c\xf1\x91\xe6\x3e\xb9\x8f\x7a\xe3\x18\x05\x7e\xc5\x37\x11\xbc\x42\x25\x1f\x39\x75\x09\xe8\x97\xc0\xe6\x93\xe2\x3a\x34\x25\xb2\xb7\x1f\x4a\x8a\xb7\xfb\x3e\x5f\xa8\xf5\xe8\xd9\xbb\x0f\x67\x85\x55\x6a\xdd\x1b\xfc\x54\x35\x8f\x1c\xe5\x86\x8a\xc9\x29\xb6\x65\x81\x08\x5a\x11\x0c\x20\xa0\x42\xc6\x82\xff\x8a\x21\x66\xc1\x8d\x10\x6d\xc6\x84\xcd\x8a\x5d\x49\x39\x0a\x60\xdf\xa2\x30\x98\xf4\x67\x84\x0a\xf1\x29\xa6\x8c\xcc\x61\x44\x07\x25\x90\x6f\x66\x4e\x3f\x73\xb9\x0c\x60\x0b\xf9\x10\xb8\x16\x8d\xa7\x53\x48\xc5\x46\x23\x91\x25\x2a\x43\x4c\x20\xf4\xc7\xc0\xbb\x7c\x6a\xa9\xa1\x40\x66\xa0\x59\x04\x27\xa2\xe2\x00\x0a\x18\x19\xd2\x38\xe4\x4c\xfb\x3f\x93\x73\xda\x23\x66\x39\xe5\x9f\xa0\x10\x0d\x85\xf4\x57\x94\xa3\xef\xa2\x48\xc4\x36\x54\x88\xc8\x1c\x91\xae\xfd\x9a\x93\x10\x4b\x68\x8a\x8b\x09\x82\x30\x14\x71\xd5\x94\x8e\x38\xc2\x98\xc4\xd8\xab\x2a\x16\xdd\x6e\x23\xab\x71\xfb\x7c\xdc\x9a\x5d\xac\xd2\x96\x98\x42\xcc\x85\xee\xae\xdb\xa6\x07\x0d\x7b\xde\xa4\xc8\xa7\xd6\x69\x86\x22\x37\x45\x8c\xbb\x1b\x23\xb9\x0d\x54\xc9\xc8\x0b\x4b\xe5\xb7\x98\x9d\x82\xa4\x15\x41\xca\x6f\x81\xb9\x6b\x0b\xe4\x82\x50\x3f\x79\xb7\xa9\xeb\x4b\x22\xd6\x37\x49\xbc\x42\xc8\xad\xca\x47\xee\x11\x3c\x41\xd3\x7d\x88\xaf\x50\x44\xf0\x5c\x52\xe1\xc6\x8b\x3b\xa4\x77\x2d\x5d\xda\x62\x98\xde\x52\xf4\x23\x7e\x65\x70\x23\x42\xd8\x87\xf7\xaf\x8d\xd7\xea\xc9\xc2\x19\xcc\x41\xd8\x4b\x40\x55\x62\xb4\x98\x6c\xcf\x9e\x90\xc0\xe7\xc4\xe1\xde\x86\x80\xcd\x86\xf6\xbe\xbd\x70\x5c\xb3\x81\xf6\xcc\x52\xef\xd5\xcf\x7c\x23\x0c\x82\x1b\x86\xbc\xb4\x9f\xf4\x49\x49\x7f\x57\x88\xdd\x64\x7a\x14\x0f\x72\x0d\x25\x64\x49\x33\xba\x3f\x94\x4f\x7e\x43\x7e\xf2\x27\x0d\xe2\xa9\xbd\x70\x2b\xe6\x46\xb5\x97\x59\xd2\x87\x7e\x90\x1b\x4a\x88\xda\x49\x2b\xf1\x6b\x7f\x28\xfe\xf7\x1b\xf2\xed\x85\x93\x6b\xae\x4b\x22\x34\xc3\xb6\xef\xef\x27\x45\x1c\xc4\xbb\xe4\x47\x13\xe4\x59\xac\xab\xdf\xfb\xc3\x10\x4c\xa1\x84\xc9\x5d\x6a\xa6\x5a\xf2\x4c\x5b\xa6\x4f\x3a\x2c\x54\xae\xa9\x14\x1e\xd0\x1f\xb0\x64\xfc\xaa\x29\x4a\xcd\x4d\x90\x7c\xa1\x7f\xe7\xba\x16\xd2\x7d\x0a\xad\xfa\x99\x6b\x34\x8d\x48\x1c\xa6\x8d\xd4\xcf\x5c\xa3\x98\x9a\x74\x2e\x7f\x95\x92\x5c\xda\x48\xff\xce\x63\x7b\xce\xc2\x74\xa6\xfc\x47\xae\x81\x3a\xd8\x92\x36\xfa\x77\xae\x19\x26\x0c\x79\x29\xce\xd4\xcf\xfc\x32\xc4\x6c\x96\x2e\x01\xff\x51\x68\xe0\x23\x66\xb4\xe0\xbf\x0a\xe4\x21\x0b\x43\x25\x8b\x23\x7e\xe6\x1a\x21\xcc\xe0\x54\x2a\xe7\x52\x0c\x64\x1e\xe6\x77\x0d\xf0\x2e\xe3\x14\x11\xea\x67\xbe\x11\x0a\x02\x21\x9a\xe8\x56\xea\x77\x81\x86\x74\x3d\xa1\x84\x7e\x8a\x7d\x51\xe8\xc5\x91\x49\x63\xfc\xe7\xfe\x90\x91\x4b\x58\xe0\x48\xbf\xc7\xf3\x90\x91\x94\x6e\x10\xbe\xdc\x1f\xf2\x87\xbf\xb1\x9b\x10\xaa\x3f\x8b\x1b\xa9\x04\xdb\x95\x7b\x94\xa6\xdd\x53\x4a\x2a\xe0\xb8\x84\x37\x5e\x40\x40\xca\x5d\x92\x07\x79\x42\x17\x75\x73\x12\x78\xc5\xaf\x02\x79\x46\x53\xc2\x0c\xea\x14\x3f\x0b\x3b\x9c\x42\x66\xec\x6e\x0a\x59\x05\x68\x5c\x74\x8c\x99\x39\x24\xff\x99\xc7\xf9\x0c\x98\x28\xe7\xbf\xf6\x87\x9c\x93\x09\xf6\x36\xa4\x30\x42\xc5\x4d\xeb\x81\x94\x82\xf8\xdf\x85\xc5\x0e\x23\x32\x41\x01\x34\x37\x88\xf8\xbd\x0c\xdd\x02\xcf\x23\xb1\x10\x4e\x13\x3e\xa5\x1e\xe4\x1a\x2a\x15\x6c\xd2\x4e\xff\xce\xf3\x09\x2d\xfc\x6a\x4e\xa1\x7e\x17\x37\x6f\x7f\x42\x62\xec\xa7\x47\xe7\xbf\x5f\xa3\xc0\xf7\x40\x24\x8f\x8c\x56\xd2\x06\xdd\x07\x61\x18\x20\x4f\xab\x6c\x0a\xd2\x11\x45\xf3\x30\x80\x7d\x51\xc8\x4a\x95\x44\x31\xbe\xe8\x8b\x4e\xfa\xe2\x45\xb1\xd4\x18\x86\x79\x19\xc5\xc5\xeb\x92\x52\x48\x99\xae\xce\xac\x99\xb2\x92\x6a\x38\x44\x18\x43\xbf\xea\x2d\x97\x7b\x82\x53\x59\xe3\xb5\xaa\x8d\x59\x0c\x0b\x36\x69\x95\x99\xa1\x37\x56\x90\x0d\xf4\xff\x39\xe6\x21\x66\x1c\xe1\x24\xb2\x9d\x9d\x62\x65\x34\xa5\xd6\x71\x06\x63\x42\x58\x0f\x0e\x18\x88\xa6\x90\x71\xf1\xd9\xb5\x6d\x55\xf0\x0c\x8e\x7e\xbc\x45\x13\xc9\x5f\x92\xde\x86\x7a\xbd\xec\xdd\xd1\x88\xed\xed\xe5\xde\x26\x9c\xa2\xf4\x6d\xe0\x83\xb0\xfc\x0d\xdf\x71\xbb\xfc\x39\x1c\x94\x95\xa7\xda\xdb\xdb\x2d\x6a\xc9\x05\xbf\xe5\xd8\xb2\x9d\x8a\xf7\x9c\xd7\xca\x06\x4e\x01\x05\x0a\x57\xb6\x63\x62\x0b\xe6\x67\x0b\x34\x1c\x42\x07\xed\x2c\x34\x11\x1c\x19\xdf\xf8\x3d\x87\xe3\xa9\x16\x40\x55\x7b\xac\x11\x3e\x41\xad\x69\x53\x93\x6a\x6c\x67\xe0\x05\x10\x44\x47\x41\xd0\x2b\x1a\x16\x72\x2d\xa7\x90\x9d\x4a\x48\x5f\x31\x38\xef\xd9\x10\xb3\xe8\xe6\x43\x14\xd8\xce\xce\x6f\x03\x44\xdf\xc6\x01\x27\xb1\xcf\x9f\xf9\x8f\x0f\x58\xee\x2b\x5f\x3c\xe9\xd5\x8f\x5e\xd1\xab\xfb\xdb\x00\x61\x2f\x88\x7d\x48\xf9\xb6\x94\x45\xec\x6c\xc7\x59\xa4\x55\xfa\xae\x51\x10\x9c\x25\xb5\xd7\x86\xc6\x09\xf5\x86\xc4\x14\xb2\x08\x84\x03\xc1\xfa\x7b\xce\xc2\x85\xa2\x4e\x90\xb8\xa1\x48\xcc\xec\xf6\xe0\xde\x5e\x2f\x5b\xea\xc7\x35\x7f\x32\xc7\xc5\xc9\x35\x02\xd1\xa3\xdf\xc1\x27\x49\x3b\xb2\xe4\x10\xac\xa2\x91\x64\x89\x9c\xe6\xc9\x0b\xd4\xbb\x0d\x55\xe4\xf2\x15\x88\x48\x19\x23\x95\x67\x10\xfa\x03\x46\x8d\xdc\xd4\x07\x0c\x64\xda\xff\x4e\x09\xee\x83\x10\x6d\xfe\xf2\x99\x5c\xe4\xa4\x81\x14\xfd\x01\x87\x62\xa4\xd1\x8f\xbd\x5b\x51\x35\xf1\x16\xf9\x43\x36\x40\xbe\x34\x08\x41\x59\xe2\x50\x70\x11\xc0\x58\x84\xc6\xfc\xb4\x18\xb2\x45\x9b\xa3\xc5\x9c\x21\xdf\x55\x53\x12\xdd\xf4\x43\x18\xcd\x91\xdc\xa7\xe5\x37\xdc\x2a\x3c\x6e\x0b\x6a\xae\x67\xe4\x95\xff\x54\xfd\x7f\x78\xb0\x66\x3c\xe9\x9b\xd9\x03\x9e\xea\xf1\xc4\x6f\xa0\x7d\xd3\x26\xf0\x25\xa2\x08\x71\xfc\xa0\x0d\x21\x67\x2e\x8c\x3c\x5f\x34\x5e\xd8\x40\x6f\x87\x57\xeb\xe6\x47\x02\x45\x21\xc4\x52\x61\xfd\x45\x63\x69\x13\xd4\xf3\x85\xa3\x64\x93\x84\x13\x11\x06\x3d\x06\xfd\xbe\x54\xcb\xf4\x43\x10\x31\xe4\xa1\x10\x08\x03\xca\x97\x8d\x35\x39\xa5\x57\xfe\x23\x36\x88\x29\xff\x63\xcd\xc8\x13\xe1\xdb\x5f\xd4\xd1\x26\x07\xe2\xa2\x39\x1e\xd9\x07\x76\x72\xef\x1a\x20\x7f\x6f\xaf\xc7\x3f\x45\xbe\xe3\xa6\xd8\xc4\x4d\x18\x6b\xe1\xf2\x62\x4e\x9f\x2f\xc3\xf6\x63\xe9\x2e\xf8\x13\xbf\x51\xd3\xfd\xfe\x14\x52\x16\x47\xc2\x2a\xd8\xd2\x3e\xa2\xa5\x6e\xfd\x65\x59\x67\x9b\xd0\x4f\x08\x7b\x65\xa2\xa1\x00\x94\xa2\x29\xfe\xfc\x59\xfe\x9a\xc3\x68\x0a\xc5\x8d\x8f\x8e\x48\xef\x76\xe1\xde\xc6\x14\x1e\x83\x90\x43\x33\xdc\x3d\x5c\x38\x3b\xfc\x39\x4d\x4b\x16\x0f\x34\xa8\x8e\x58\x0d\x34\xc2\x85\xd5\x30\x7a\xa0\x83\xf4\x47\x06\xb9\xa8\x16\xb9\xa2\xba\x7a\x67\xbc\xf2\xaf\x72\x7d\x6c\x4e\xdd\x53\x9c\x76\x83\x0e\xa7\x8d\x96\xa6\x41\x4b\x34\x23\x94\x19\x06\x2d\x10\xa2\x9f\x09\x65\x2e\x06\x73\x28\x18\x5a\xf6\xdd\x5b\xfd\xd8\x9d\x41\xe0\xc3\x88\xaa\x6e\x3d\x32\x0f\x63\x06\xfd\xa2\x6e\x47\x99\xdf\x33\x5a\x0b\x7f\x20\x95\xa5\xee\x2d\xbf\xba\xea\xf2\xe5\xb7\x0b\x45\x55\x75\xaa\xa2\xba\xee\x52\xc5\xd1\xde\x5e\x0f\x8a\x26\x24\x42\x7f\x08\xc6\x31\x62\x8e\x0b\x17\x0b\xc7\x9d\x01\xec\x07\xf0\x3d\xa4\x21\xc1\x54\x71\x40\x16\xdd\x08\x18\x48\xe7\x81\x05\x07\x73\x5c\x3a\x62\xe7\xf6\xa7\x7e\x5a\x57\x9a\x01\x16\xf3\x8d\x87\x72\x2f\x12\x4f\xa6\x1d\x34\xe9\x7d\x7b\x70\x28\xeb\xbc\x67\xb5\x1a\x48\xea\x39\xb4\x7a\xa2\xac\xec\xbe\xd2\x58\xd8\x6d\x55\x00\xe5\xa5\xfb\x85\xd2\x43\x69\x01\xdc\x6f\x0f\x1e\x73\x60\xf6\xf6\x6c\x61\xa8\x16\x6a\xaf\xec\x9c\xe2\x31\xf5\x22\x14\x4a\x36\xac\x14\x44\x34\xe3\x24\x0a\x02\xe4\xdb\xee\xee\xa1\xd2\x39\x64\xf0\x98\xc1\x9b\xd0\x80\xf1\x59\xbf\x98\x87\xec\xa6\x47\xf5\xcf\x14\x09\xd4\xd1\x64\xf1\xbf\x4e\xdf\xbd\x1d\x84\x20\xa2\xb0\x47\xf9\x6e\x97\xbe\xd3\x7b\x7b\x44\xb8\x9d\x92\x68\x34\x1a\x41\xf5\x27\x7f\x08\xfc\x39\xc2\xe2\x99\xf8\x4b\x3c\xd2\x76\x52\xf9\x58\xff\xe2\xaf\xae\x10\xbc\xfe\x40\x61\x24\x5f\x25\xbf\xd6\x86\xd6\xc5\xc2\x03\xcc\x9b\xf5\x70\xb6\xec\x33\x76\x16\xa6\x82\xaf\x4c\x69\xda\x4e\x29\xa3\xd8\x52\x18\x96\xdc\x88\x94\xc7\x72\x41\x65\x3d\x47\xc2\x61\xa5\xbd\xd5\xdd\xc5\x2e\x59\x17\x93\xa3\xea\xc4\x38\x95\xb0\xa7\x1e\xa8\xbf\x83\x4f\xab\x70\xb9\x4b\xef\x28\x66\xb3\x1a\x1e\xc8\xb9\xda\xd0\xb6\x5d\xc5\xe0\x86\x76\xe2\x43\x4c\xf2\xcc\xcf\x71\x21\xf6\x85\xfb\x7a\x5d\xab\x8c\xe7\x31\x29\x65\x92\x42\xe3\xa7\xb6\xfc\x8b\xb4\x4b\x97\x44\xd3\x57\x3e\xff\x43\xf8\x10\xf1\x3f\x54\x23\xfe\xa7\x36\x16\x0f\xed\xc3\x83\x83\x03\xdb\x9d\x43\x4a\xf9\xc4\x6d\xdb\x55\xce\x93\x43\xfb\x98\xcc\xe7\x31\x16\x86\x63\xb1\xe9\x86\xbb\x07\x6e\x99\x1e\x7a\xb8\x7b\xe8\x72\x72\x3c\x89\xc8\x15\xf2\x61\x34\x14\xce\x4b\xfc\xc9\xb1\x58\x74\xf9\x5b\x12\x40\x1c\x41\xd1\x4f\xa2\x62\xe4\x1f\xa7\x3a\x5f\xfe\x6b\x0e\x3e\x9d\x81\x29\x1d\x3e\x71\xa9\x5c\x8d\xa4\x5f\xdb\x76\x13\xe7\x09\x9b\xc2\x60\xc2\x8f\x15\xdb\x95\x76\x9d\xa3\x2b\x80\x02\x30\x0e\x44\x1f\xa2\x88\x2d\x6f\x3f\x85\xec\x19\xa0\xf0\x43\x24\x8c\x07\x72\x3b\x9c\xa7\xbb\x4e\x2f\x81\xed\xb8\xf0\x62\xf0\x3b\x41\xb8\xc7\x11\xbe\x70\xa5\x05\x80\x53\xa4\x90\x30\x38\x8b\x4d\x3e\x4a\xbd\xa8\x9c\x1d\xad\xe2\x96\x2c\xca\x40\x82\xed\xa2\xc1\x91\xf1\x7b\xa0\x1d\xff\x84\x56\x58\xea\x9a\xf5\x0d\x6b\xc0\x8f\xb9\x81\xd8\x48\xa7\x30\x80\x1e\x23\x51\xcf\x3e\x0f\x15\xf5\x8f\xfc\xf1\x0c\xd0\xd9\x85\x2d\x74\xb1\x74\xd4\xf5\x2b\x7d\xa8\x38\x2e\xdd\xdb\xb3\x6f\x6f\x07\xcf\x9f\xf1\x37\x8b\x05\xe7\xbe\x54\x33\xc0\x96\xbd\x2a\xe2\xb8\xc8\xd9\x4f\x28\x64\x6a\xb3\x22\x48\x7b\xb7\x92\xe2\xd4\x1e\x64\x22\x24\x63\xc6\xe6\xc1\x29\x98\xc0\x9e\x9d\x78\x40\x9e\x0a\xd3\xb0\x53\x41\x53\x19\x1a\x39\x48\xa8\xd2\x50\xd4\x3f\x35\x28\x74\x08\x17\xe6\x79\x50\xcd\x4d\x95\xb1\xeb\xf4\x97\x93\x81\xf2\x57\x12\x0b\x98\xb0\x4a\x38\x82\xd9\xf8\x82\x01\x8b\xd0\xbc\x67\x76\x2e\xe4\x33\x67\x20\x5c\x34\x29\xeb\xd9\x61\x3c\x0e\x90\xb7\x3f\x97\xb6\x23\x61\x25\xa2\xd2\x4a\x54\x82\x1b\xaa\x7a\x12\x04\xa3\x0f\x6a\xd7\xbe\xb2\x1f\xa5\x03\x24\x71\x10\x66\x5b\xc5\x5d\xec\xe2\x79\x20\x98\x89\x6e\x78\xc6\x29\xdf\x38\x57\xc4\x4e\xe0\x3d\x69\xa3\x3b\x3f\x83\x9c\x65\xd7\xee\x54\xf4\x61\x69\x62\xb1\xf8\x59\x26\x22\x14\x6a\x16\x31\xdd\xdb\x07\x2b\xae\xd1\x8e\x21\xb0\x90\xd4\x9e\x22\x45\x1b\x79\xc8\x93\x8c\x51\x29\x37\x04\xe7\x27\xb0\xdc\x56\xe3\x12\x69\x3d\x92\xfb\xdc\x05\x46\x30\x49\x72\x5f\x4d\xef\x11\x8c\x8b\x0b\xbd\xee\x11\x25\x9c\x44\x06\xbf\x53\x82\x45\xec\x88\x66\xeb\xc0\xc9\x44\x27\x48\x3b\x26\xa7\x08\xe1\x6d\x28\x09\x5c\xc7\xc6\xb8\x44\xbd\x81\x98\xc1\x28\x8c\x10\x85\xc9\x2b\x3a\x42\x8a\xab\xe9\x48\x19\x17\xe8\x47\x09\x49\xed\x20\x49\x4e\x49\xcf\xd2\x75\xd4\x76\x99\xe3\xaa\x57\x69\xd7\xfa\x1d\x49\xde\xe5\x78\xad\x90\xc3\x04\xe2\xa2\x91\x69\x68\x7a\x0b\xaf\x7f\x91\x23\xf6\x80\xcb\xdc\xdd\x03\xc7\x0d\xaa\x1b\x10\xde\x60\xc7\xd8\xcd\xa3\xd1\x88\xee\xed\x45\x7b\x7b\x95\xa3\x1e\x38\xae\xfd\x22\x81\x53\x7d\x10\xd4\x7e\xb0\x70\x5c\x2a\x8d\x95\x6a\x93\x40\x61\xa1\xec\x1d\xa4\x57\x44\xa7\x67\xff\x9b\xd8\x30\xfd\x00\xe1\x4b\xb1\xc7\xe7\xe4\x8a\x9f\xed\x07\xa3\xd1\xa8\x57\xe4\x0d\x11\x0c\x03\xe0\xc1\x9e\x6d\xd9\xae\xdd\xb7\x8d\x07\xaa\x47\x5b\x5a\x8e\x05\x0b\x71\x06\x01\xc4\x53\x36\x53\xbb\x6f\x47\xaa\x44\xd4\x76\x06\x94\x42\xf6\x06\x84\x21\xc2\x53\x55\x84\x3d\x21\x10\xe8\x5c\xfc\x47\x0e\x4c\xce\xa5\x6d\x67\x00\xc2\x90\x0b\x36\xdf\xfc\x8d\xc3\x6b\x21\x7f\x64\x1b\xe0\x5b\x11\x0c\x46\x36\x65\x37\x01\xa4\x33\x08\x99\x6d\x49\xd1\xf1\x9b\x34\xae\xe9\x1b\xfb\xc7\x6f\x1c\x67\xc1\x8f\x49\x81\x13\xda\xd3\x87\xa4\xd5\x8a\xdf\x89\x68\x38\xe1\x62\x31\x87\x6c\x46\x7c\x19\xfe\xb4\x48\x6d\xe5\x30\x27\x62\xd2\x5a\x11\x73\x0c\xe8\x9d\x85\xed\xe4\x65\x43\xc4\xa9\xe9\x0a\x04\xfa\xba\x2d\x2e\xcb\x2e\x3f\xf9\x7b\x64\xc4\x5c\x3a\xc2\xa6\xff\x10\x9a\xf4\x64\x9f\x9c\xf2\x3e\x7f\xa6\xfd\xbe\xf5\xe3\x81\x73\x2b\x62\x98\xe6\x90\xc4\xac\x87\x38\x4b\xe1\x77\x3e\x38\xf0\x40\x10\xf4\xb8\x10\xe4\x28\x41\x9d\xdf\x06\x67\x11\xb9\xb6\xe8\x88\x2f\x2b\x23\x92\xd1\xf6\xa4\x95\x34\xd3\x09\x6b\x13\xff\x94\x22\x50\x45\x53\xdd\x7d\x50\x61\x1e\x9d\xea\x46\xa6\x1e\x97\x8b\xcc\xa9\xbb\x41\x63\xcc\x60\x72\xbe\xf1\x3b\xe0\x73\x98\xdc\x11\x7b\x6a\x43\x8b\xc0\x31\xe8\xdc\x26\x62\x8c\x38\xc6\x46\xf0\x91\x6d\x7d\xb6\xcc\xb3\x35\x0b\xd7\x40\xdf\x2a\xa5\x9f\xbd\xd1\xd9\x11\x3d\x99\x45\x7c\x93\x17\x3b\x6d\xdb\xd9\x23\xdb\xb2\x1f\xc1\xb4\xcb\x5f\x11\x9b\x91\x98\x9d\xc6\x93\x09\xfa\x54\x06\xac\x68\x9a\x9f\x20\x74\x6e\x73\x7b\x9f\x6f\xbc\x73\x0c\xe6\x70\xe4\xa7\xed\x2e\x4c\x6e\xd5\xab\x75\x67\x70\xf6\xf6\x7a\x2d\x66\xa1\xae\x04\xc2\x5f\x81\x7a\x11\x09\x82\x33\xa2\xcf\x27\x3c\xca\xc2\x04\x9d\x01\x99\x4c\x84\x9b\xc2\x4e\x76\x38\xcc\x85\xd6\x1c\xef\x62\xf3\xc0\xb5\xc6\xc4\xbf\xe1\x1c\x0c\xa3\xb9\x88\x99\xd3\x43\x84\x43\x3c\x60\x24\x5c\xb8\x8f\xbf\x3b\x70\x16\xee\x35\x40\xec\xd4\x18\xdd\xd8\x1c\x3d\x67\xf4\xa3\xa4\x18\x03\xbc\x85\x7b\x08\x9f\x38\x0b\xd7\x27\xd7\x38\x20\xc0\x7f\x89\x82\x8c\x06\x9a\x1f\xeb\xcf\x02\x32\xee\x9d\xc3\x0b\xf7\x56\x86\x6c\x32\xf8\x89\xed\x8b\x40\xcd\x85\x90\xe8\x15\x4b\x56\x21\x78\xfc\xc6\x9f\x7f\x32\x98\xd3\x53\x70\x05\xdf\x45\xef\x42\x88\x79\x77\x4e\x63\x8b\x1e\x76\x99\xb3\x03\x03\x0a\xf3\x12\xb7\x17\x41\xc0\xe0\x8b\x40\x44\x8a\xf4\x6c\x60\xf3\xfd\x2e\xd8\xf6\xc8\xf6\x11\x0d\x03\x70\x33\xb4\x30\xc1\xf0\x3f\x6c\x37\xf9\x88\xa3\x4f\xb1\xff\xe3\x19\x0a\xf8\xba\xee\x48\xed\x92\x82\xe4\xc3\xfb\xd7\xaa\x67\xb9\xd1\x3f\xbc\x7f\xdd\xc3\xbc\x67\x71\x08\x10\xbe\x9b\x15\x8a\x46\xcc\x85\x03\x2f\x40\xde\x65\xaa\x6d\xe0\x5f\x47\xf0\x8a\x5c\x1a\x5f\x13\x27\x37\xbc\xa4\x37\x3d\x7c\x4b\xbd\xbc\x64\x54\xda\x99\xa1\x5a\x31\x6f\x9c\x08\x77\xa7\x8e\xef\xc8\xb5\x56\xd5\x27\x08\x81\xb4\x52\x9d\xe0\xfb\xe9\x9d\xb5\x78\x1c\x87\x84\x9f\xc5\x29\x1e\x6f\xd5\x35\x4f\x86\x1d\x73\x21\x53\x86\x21\x0f\x85\x6a\x8b\x8a\x03\x06\x4d\x6e\xf8\x42\x19\xae\x6c\x05\xa7\x39\x0e\x91\xed\x0c\x52\xeb\x8d\x31\x04\x2c\x71\x9a\xd3\x1f\x84\x31\xe5\xe7\xda\x42\x0a\x13\x1f\x28\x8c\x7e\x41\x14\x8d\x25\x57\x6e\x14\x29\xf4\x18\xd2\xbc\xb5\x6f\x48\x3e\x95\x92\x85\x02\xfd\xfc\x42\xc3\xc4\xf9\xce\x51\x14\x81\x1b\xe9\xb1\x05\x47\xe7\x17\x8e\xcb\x46\x50\x04\x4d\x6c\x68\xae\x72\xb6\x47\x41\xb0\xda\x2c\x5d\xfb\xe9\x04\x05\x0c\x46\x23\x10\x04\xf6\xf6\xcf\x99\x82\x2b\x98\x5e\x55\xa0\x0a\x59\xf7\x4b\x9d\x2a\xab\x70\x90\xcc\x9e\x19\xf3\x3d\xf9\x70\x66\xbb\x5b\x43\xc8\xbe\xc8\x8e\xdf\x6d\x69\x4b\x49\xf7\xf9\x8b\xd7\x2f\xce\x5e\xd8\x8a\x5c\x4e\x12\xe3\x2d\x5d\xb6\x6f\xd7\xde\x37\x4c\xc0\xf7\x44\x30\x19\x2b\x74\x97\xfd\x22\xb4\xdf\x2b\x4c\x5d\xd9\x43\xee\x74\xd2\xd2\x8a\xdc\x7e\x87\x40\xf6\x0b\x82\xd7\x62\x9e\xf2\x3e\xb1\xcc\xce\xc8\x2c\xf3\x53\xc1\x35\x8c\x94\x13\x70\xc9\x8d\x83\xf5\x3a\x9c\xc6\xf3\x39\x88\x6e\x56\xe5\x5d\xfb\x54\xf6\x53\xb3\x24\x50\xa2\xe4\x58\x75\xf2\x46\x98\x3d\xe9\x0c\x85\xa6\x37\x6b\x9b\xd1\xe7\xe2\xcb\xa7\x73\xe2\xc3\x51\x39\x07\x79\x77\xda\x8d\x85\x08\x4c\x3c\x57\x72\x8d\x02\x10\xc1\x8e\xe4\xa9\xe5\xa2\x56\x27\x17\x54\xd8\xe7\x88\x2c\xc3\x48\x77\x7c\x74\x38\x36\xf9\xe0\x13\xc8\xbc\x99\x18\xfe\x39\x60\xa0\xd5\x80\xe2\x93\xfd\xe5\x8f\xe9\x5b\xfd\xe9\xf0\xfc\xc2\x9d\x27\x93\xe5\xbf\x14\xf5\xc8\xac\x3c\x23\x7e\x5b\x96\x2d\x37\x78\x86\xa5\x3a\x3d\xfd\xe1\x08\xbb\x6c\x90\xc2\xc5\x79\x43\xf2\xc3\x65\x03\x05\xe3\x08\xea\xbf\x5c\xd6\x2a\xf5\x4a\x2a\xef\x12\x72\x89\xf2\x2e\x17\xd2\xf8\xaf\x5e\x15\xdb\xde\x7b\x18\x6d\x02\x51\x1a\x27\x59\x2a\xad\x4b\x8b\x9f\xdc\x56\xdb\xad\x66\x50\x16\xa5\xd3\x2b\xaf\xa2\x69\x56\x63\xec\x4a\x6f\xae\xfa\xde\x55\x78\x6b\xfd\x6d\xa0\x56\xd2\x37\x18\x50\xab\xcd\xa8\x97\x83\x76\xd9\x81\xb5\xfb\x27\x5d\xe0\x56\xfb\x67\x20\xd5\x58\x70\xf4\xa3\x61\x69\x50\x41\xd7\x4e\x2e\x0a\x60\x3f\x8d\xaf\x72\x5c\xe8\x24\x12\xf3\xb3\x1b\xc1\x81\xba\x4d\x58\x9f\x81\xed\xa7\x2d\x51\x2e\x4e\xff\x93\x88\x7c\xba\x51\x77\xe2\x9e\xbe\x2e\xa9\x35\x39\xea\x9d\x5f\x18\x8c\x61\x1d\x12\x43\x47\x9c\x9a\x58\x85\xab\xc9\xd8\x25\xf4\x51\x10\xb2\xab\x8f\x43\x29\xf5\x9a\x04\xa9\x2c\x12\xa5\x64\xd7\x08\x0d\x2b\x15\x83\xfd\x58\x7a\xdb\x41\x2d\x1e\x49\xdd\xc5\xad\x58\xdf\x57\xfe\x10\xba\xa9\xfb\xe9\x90\x25\x3f\x44\x2a\x03\xbc\x68\x8f\x82\xfd\x64\x20\x3b\x2f\x23\x94\x61\x80\x08\x0c\x00\xdf\x3f\x01\xd3\xac\xe3\x62\xd9\xe4\xb9\x78\x06\xa6\x90\xd6\xac\x89\xb8\xa5\x63\xe5\xdd\x98\x1b\x8c\x39\x25\x72\x0a\x1f\x5f\x5a\x2f\x34\x08\xd2\x31\x42\xba\x35\x90\xa7\xf6\xd3\x68\xc4\xa2\x18\xda\x43\xfe\x97\xf4\xa2\x51\x96\xab\x5a\x18\x0d\x37\x02\x66\x24\x2d\xd3\x80\xcb\x5d\x40\x21\xeb\xe1\xc1\x1c\x32\xe0\x72\x52\x73\x85\x43\xcc\x2b\xac\x1f\x0e\x90\xef\xd4\x18\x42\x51\x0b\x12\xc3\xe5\x73\xee\xc4\xac\xa4\x77\x75\x47\x46\xa5\x84\x2e\x8e\xd4\x76\xb2\x5d\xfd\x82\x57\xb3\x9d\x32\xd6\xb1\x93\xbf\x91\x74\x64\x25\x1d\x66\xbc\x48\xe7\xd9\x52\xb6\x6e\x4d\x35\x2b\x9d\x30\x5d\xa6\xa0\x27\xf0\x06\x72\xe9\x74\xad\x93\x70\x6d\x65\xa7\x5f\x79\x32\xca\x17\xaa\x0b\x19\x0a\x85\x75\xca\x62\x15\x2d\x9a\xfc\x6f\x59\x36\xa3\xf1\x40\xca\x39\x4d\xe9\xae\x73\xcb\xd8\x72\x02\x58\x6b\xe6\x97\x21\x91\x46\x00\x71\x95\x52\x44\x68\x91\x23\x88\xcd\x71\xcf\x2f\x5c\x32\xfa\x6d\x30\x41\xd8\x7f\x85\x7d\xf8\xa9\x07\x33\xf6\x40\xed\xb1\x21\x07\xe2\xc0\x0c\xf8\xf9\x38\x1a\x09\x23\x19\x1d\xc1\x73\x72\xb1\x33\x21\x51\x4f\xba\xfb\x92\x47\x87\xff\x81\xfe\xa6\x5a\x4b\x4b\xac\xed\xec\xed\xf5\xd0\xee\x88\xbf\xfb\xfc\x19\x9e\xa3\x0b\xa3\xaf\x00\x5e\xc1\xc0\x76\x76\x47\x23\x5a\x7c\xea\xec\xed\xed\xf6\xca\x3f\xf8\x5b\x69\xfb\xff\x40\x8f\x1e\x39\x58\x92\xc4\x2d\x7f\xc3\x0f\xb9\xec\xf7\x1c\x78\x57\xb4\xcf\xbf\x51\x9d\xf4\x0f\x53\x09\x05\x67\xee\xad\xef\x75\xee\x8f\x86\xe3\xda\xb5\xf7\xd3\x34\x21\x9d\xce\x6e\xb9\x4b\x92\xad\x69\x0c\xb8\x04\x9d\x74\x04\x03\x37\x82\xf1\x1c\x4d\x26\x1d\x76\x52\x15\x2c\xc6\x73\xdc\x6a\xb3\x99\x60\x19\x49\x3f\x45\xc6\xb4\xcc\xa5\xdb\xe0\x00\xb6\xed\x2c\xdc\x88\x04\xc1\x18\x78\x97\xe9\x21\x7f\x3f\x80\x0b\x51\x48\x21\xf4\x0c\x8c\x03\xf8\x6e\xa2\x52\x73\xad\x7e\x4a\x3e\x55\x3c\x67\x74\xb0\xe5\xe7\xa5\x37\x03\x78\x2a\xb8\xde\xa9\x48\xbb\xe7\x75\xe0\x7e\x54\x7d\xb1\x6e\x19\x30\x85\xe9\x35\xdf\xfc\xed\x01\x52\xbc\x62\xbd\xd0\xf0\x2b\x1b\x63\xc0\x9b\xcd\x57\xa5\x0c\x90\x76\xd3\x45\x85\x5b\xe4\xfb\xbb\xbb\x70\x6f\x0f\x0e\x84\x33\x66\x14\x7b\xd2\x47\x5b\x2a\x1b\x16\x3d\xe8\x3c\x65\xc3\x8e\x44\x93\x42\xd6\x81\x74\xe4\x81\x99\xe2\x66\x35\x71\xc5\x40\x4e\x85\xe4\x95\xb3\x24\x70\x21\x89\x5c\xc1\x63\x12\xde\x9c\x89\x64\x15\xad\x1c\x78\x54\x12\x2a\xba\x2f\x13\x5c\xd4\xb8\xef\x6c\x64\x77\x76\xbe\x18\x2f\x5c\x8f\x84\x37\x26\xab\x5c\xa7\x3c\xc8\xfb\xce\xf0\xcf\x02\x77\xdc\x9c\xa0\x3b\x27\x57\x70\x53\xf3\xe2\x7d\xdf\xd7\xbc\xae\x88\xb8\xd9\xa7\x87\x9a\xbd\x93\x49\x06\x92\x77\x39\xc9\x86\x6d\x38\x25\x21\x32\xba\x69\x4c\x61\x24\x24\x25\xd3\x95\x22\x0b\x8b\x54\xf0\x95\xe4\xfb\x00\x98\xe0\x57\xfc\x53\x32\xda\x35\x3c\x64\x0a\x61\x21\xfc\x11\x54\xce\x7a\x3f\x8e\x0e\xff\xf2\x34\x13\x9f\x84\x09\xfe\x20\x22\x3b\x33\x4e\xc1\x99\x81\x8b\x8e\xa6\x6a\x68\x97\x38\x0b\x19\xb2\x76\x2b\xa3\x43\x87\x44\xe0\xaa\x4e\xa7\x21\x0d\xfd\xca\xe9\xae\xc4\xd0\xe0\xda\xfb\xbc\x0b\xdb\x29\xe7\xe9\xb4\x8a\xa7\x4b\x45\x6e\xb3\x8b\x81\x6c\x67\x97\xf7\x0e\x4b\x6f\x16\xb9\xf4\xe7\x0b\xc3\x1f\xc7\x64\x95\xd5\x23\xcb\xbf\x93\xa6\x59\x3d\xe7\x42\x9b\x30\xb4\xf4\xdb\xd1\x8a\xd1\xc9\x58\xa3\xed\x17\xfa\xa3\xe1\xed\xc2\x4d\x6d\x72\x94\xff\x8c\x48\x00\xc5\x1f\x2a\xcb\xdc\xf0\xfc\x42\xfd\xc9\x1f\x06\x08\x5f\x8a\x47\xca\x05\x57\xfc\x6d\x30\x7a\x65\xf7\x68\xcb\x31\x93\xb0\x6c\x67\xa7\xec\x23\xb1\x07\xb1\x76\x05\xaa\xed\xb4\x18\x49\x0c\x07\xc6\xcc\xf8\x2e\xa9\xe8\x9f\x98\x84\x9f\x51\x91\xcb\x34\xee\x3d\xdb\xe8\x27\x71\xad\xa6\xed\xe6\x98\x83\x48\x20\xd7\xd9\x29\xfb\x58\xc0\x42\xb5\xdf\x36\x54\xa1\xd7\xb4\xcb\x51\xa4\x53\x53\xb6\x62\x6b\x2e\x18\xc1\x81\xb1\x72\x1b\x15\x2e\x0c\xb7\x73\x85\x18\x61\xa2\x32\x10\x3b\x22\x2e\x93\xe8\x19\x51\x57\x07\x9e\xd3\x11\x4a\xfe\x1e\x21\x71\x75\x7e\x76\x23\xf4\xc6\x2e\x56\x23\x49\x0d\xab\x08\x2e\x18\x08\xe2\x1c\x41\xf9\x7f\x97\x69\x57\x72\xfe\x48\xff\xe9\x32\x73\xce\x23\xe0\xb2\xbc\x5a\x4d\xec\xaa\x12\x65\x46\x69\xc4\x8c\x4b\x47\xbb\x87\x2e\xe2\xff\x00\xfe\x4f\xc4\xff\x09\xf8\x3f\xde\x68\xf7\x50\xcd\x3a\xf5\x5f\xc4\x05\xff\x45\x2c\xfc\x17\xf1\xc8\xb6\xeb\x62\x32\xe4\x4e\xe7\x67\x56\xd6\xcd\x86\x92\x38\xca\x18\xd1\x71\xc3\xd6\xd7\x86\x27\x61\x20\xd8\x49\x54\x0e\x13\x12\xbd\x00\x12\x05\xb7\xf5\x33\xe2\x9d\xf8\xad\x8e\xd6\x01\xff\xbf\xb3\x53\xd6\x58\x90\x85\x2f\x49\x3d\x6e\xaf\x9b\x12\x5a\x5b\x67\xa7\xec\x0b\xd1\x63\x2c\x7b\x9c\x67\xe6\xc8\xb9\x80\x48\xea\x91\x99\xa4\xc4\x45\x87\x69\x34\x71\xa7\x16\x38\xc9\x4d\xa3\x19\x31\x8a\xc4\xe5\xd1\x2a\x35\x41\x6e\xa8\x9f\xaa\x70\x59\xc7\x9d\x8d\x44\x9a\x81\xd4\xa2\xe2\xf2\xc1\x86\x58\x26\x4d\xf6\x5d\x72\x8d\x61\x34\x84\x03\xf1\x7f\x7d\x11\x93\x28\x19\x86\xa3\xd1\x88\x0c\x8e\xc5\xb3\x53\x06\x18\x1c\xa8\x37\x9f\x3f\x57\xbe\x7a\x0b\xaf\x55\x2f\x47\xd7\x00\x31\x84\xa7\xef\xe1\x15\x82\xd7\x25\x9d\x71\x32\x8f\xe4\x5b\xf5\xc9\x7b\xf8\xbb\xc8\x95\x51\xd2\x58\xbf\x72\xf9\x7c\x7f\x06\xf4\x38\x03\x69\xbc\xb7\xd7\x5b\x12\x5a\x27\xdb\x63\x0e\xea\x78\x6f\xaf\x1e\xf0\xcc\xc7\x09\xfc\xa5\x9f\xe9\xb7\x0b\x77\xd2\x82\x1c\x92\x64\x33\x33\x67\xa7\xac\xbd\x20\x86\x89\xe3\xce\xc5\x5f\xf2\x2e\xc8\x7f\xe7\x08\x60\xb7\x62\xe6\x7b\x7b\x2d\x1b\xbe\x85\xd7\x22\x12\x6f\xf7\xc0\x8d\x46\x71\xa1\xff\x3a\xe4\xec\xed\xf5\x10\xff\x2e\x68\xf3\x9d\xc6\xce\xde\x5e\x0f\xe4\xa9\xb8\x9a\x1a\xbc\x11\xd8\xdb\x8b\xf9\x11\xc2\x37\x45\x28\x88\xdd\xcf\x13\xbb\x2f\x89\x3d\x76\x15\x4e\x87\xf3\x1c\xa1\xd3\x72\x92\x45\x79\xb2\x04\xe5\xd4\x17\xd5\x92\x50\x50\x41\x23\x9e\x7e\xfe\x16\x5e\xf3\x03\x45\xf7\xe6\xcb\x88\x21\xfe\x88\x8b\xde\xea\x71\xf5\x7d\x22\xb9\x24\x38\x0b\x77\xd6\x82\xb0\x8c\x2c\x58\xa1\xb3\x53\xf6\x85\x20\xad\x19\x5f\x32\x83\xb4\x66\x5c\x28\xc0\xf9\xe3\x30\x44\xb8\x93\x82\x64\x3f\x44\xb8\x5c\x14\xcd\x5f\xd3\x78\xef\x31\xee\xdc\xbf\xf8\xa4\xc1\x31\x31\x33\x06\xc1\x27\x08\x67\x55\x61\x9d\x66\x23\x6f\x9e\xe6\xb1\xeb\xa3\x48\xea\x1c\x46\xe5\x6a\x8d\x92\x99\x76\x70\xae\x81\x57\x5c\x6e\x1c\xc7\xf4\x9e\x62\x87\xe4\xc3\x17\x1c\x0a\xe8\xbb\xb7\xe2\xaa\x46\x67\x66\x32\x47\x13\x7d\x2c\x42\xd3\x29\x8c\x06\x20\x0c\x83\x9b\x9e\x0c\x37\x4c\x03\xf2\x5d\x95\x01\x61\x0c\xab\xbe\x27\xb8\xea\xd3\x18\x37\x7f\x3c\x99\x54\x7c\xdd\x21\xca\x48\x4b\xcd\x45\x5f\x26\x91\xc8\x44\xa4\xa9\x6c\xed\xce\x7f\x27\xa9\x4d\xb6\xc2\xa1\xdf\x8b\xa3\x08\x62\xf6\x52\x5e\x0d\x45\x50\xbc\x79\x93\x14\x0f\xda\xc5\x41\x99\xb7\x80\xdb\xc5\xa2\x5d\xa8\x80\x10\xfc\x37\x18\x27\xd0\xe9\x2e\x25\xd4\x97\x12\x13\xad\x98\x59\x67\x87\xc3\xf5\x81\xba\x0e\x67\xa7\x24\xfd\x8c\x31\x8e\x58\x8e\xd4\x9e\x17\x07\xc1\xee\x08\x3e\xc5\xf0\xda\x2a\x89\x7f\x86\xce\x50\x7c\x1a\xc1\x80\x00\xbf\xb7\x9a\x7f\x50\x0e\x99\xab\x38\xe0\x2f\x5c\x15\x74\x66\xda\x27\x4a\x5c\x84\x73\xca\xc8\xa5\x2d\xc5\x1d\x5c\xf2\x6b\x48\xc6\xe8\x90\xe0\x31\x01\x91\x9f\x81\x5f\xe9\xda\x64\x8e\xf4\x36\xbe\x4e\xda\xa6\x92\x41\x9c\x91\x50\x6c\xdf\x40\x22\x93\x48\x93\xcb\xd8\x72\x16\x35\x0a\xfa\x4d\xf8\xba\x77\xdb\xc9\xe6\x06\x11\x91\x7e\x88\xbe\x24\xd1\x18\xf9\x3e\xc4\x22\xcd\xb0\x23\x14\xaa\xed\xb3\x08\xd7\x6d\xb0\x4c\x4e\xe1\x64\x87\x75\x8d\xa8\x28\x21\x50\x53\x63\xb5\xce\xd0\x02\x38\x40\x3e\xdf\x11\x7d\xfb\x11\xff\xb3\x98\xa5\xbc\x95\x62\xae\x4b\x60\x4e\x06\x19\xad\x64\xb7\xf6\xe8\xe8\xc2\x1e\x24\x9b\x17\x9b\xa8\x1e\x0e\xe3\x78\xca\x02\x81\xf0\x15\x62\x40\xa5\x32\x68\x7b\x6e\x31\x1d\x7f\x71\x6c\x1e\xb7\x2a\xd8\xbf\x98\xd9\xdb\xb0\x03\x98\x71\xf9\x59\x8e\x2a\x40\x96\x69\x13\xcc\x4e\xf9\xc2\x54\x27\xb4\x28\x1a\x01\xf4\xbe\x62\xce\x4e\x41\x9d\x52\x65\xe5\xb0\xed\xd1\x68\x84\xa5\xc6\xeb\xc0\xd6\x8a\xdd\x02\x0b\xcf\x2e\x99\x8a\x90\x69\x76\x04\x30\x28\x5b\x12\x6a\xbc\x22\x9d\x96\x6a\xb2\x15\x89\xe6\x33\xc6\xe4\xd4\xc4\x58\xdc\xa5\x16\xee\x1c\x60\x30\x85\xad\x79\xe3\xbe\x6c\xbf\xdd\x2c\x72\xe1\x4e\x23\x80\xd9\xbb\x6b\xcc\x6f\xaf\x7a\xd2\x1d\x78\x95\x9c\xe4\xbe\x50\x49\xd5\x5e\x16\xbb\x64\xf4\x9a\x06\x64\x0c\x82\xfb\x4a\xb8\xb0\x46\xd1\xbc\x21\xfb\xa0\xca\x8a\x50\xed\xf5\x9f\x14\xa1\xad\x17\xe0\xe5\x99\x54\xe3\xc5\x7f\xfa\xe6\xec\x44\xe6\xbc\xca\x57\x3f\xc8\xed\x6f\x44\x7f\x12\xb8\x3f\xf2\xe7\xe2\x24\x6b\xa4\x02\xb9\x54\xfb\xaa\x60\x51\x5d\x94\x15\xb8\x82\x06\x18\xf0\x4e\xe0\x68\xf0\x28\x17\xa1\x66\x63\x23\x67\x43\x03\x4c\xad\xa1\xc9\x64\x0b\xac\xf4\xc6\xe2\x30\x95\xc4\x5f\xbd\x46\x1e\xc4\x14\xae\x0f\x9a\x40\x76\x58\x0d\x48\xd1\x2d\x4c\x1c\x54\x1a\x90\xc6\xb5\x5a\x01\x92\x64\x85\x0c\x48\xe4\x8a\x41\xed\xdf\x93\xe4\x6b\xdb\x10\xed\xaa\x8a\x4c\x0d\xb4\x6b\x80\xb1\x21\xda\xcd\xc1\xd1\x40\xbb\xf4\x06\x7b\x7f\x57\xf5\x5b\xd6\x47\x2a\x7a\x1b\xdd\x60\x6f\xdf\x28\x2c\x55\x89\x9b\x5c\x68\xc8\x0d\xf6\x5e\x3f\x3f\x3a\x59\x3b\x3c\x81\x0f\x42\x01\x54\x7b\x58\xc2\x48\xa8\x74\x05\x38\xeb\x23\x60\x13\x1e\x35\x42\xab\xf8\x8d\x8c\xd2\xa2\x80\x36\x51\x75\xea\x54\x28\xd0\x37\xc5\x9f\xc5\x10\xfb\x4a\x49\x5f\x4b\xec\x11\x44\xc2\xa7\x79\xa3\x80\xa8\x41\xf2\xb8\xe3\x84\x2d\xab\xbc\x19\x22\x48\x4e\xf3\x70\x12\x91\x39\xa2\xb0\xd7\x63\x2e\x4e\x12\xad\xb4\x00\xd1\xcc\xbf\x56\x45\x00\x9f\x3f\xe3\x5e\xd1\x47\x21\x29\xf4\x9f\x26\x65\xa4\xd5\x22\x72\xab\x5c\xbd\x2e\x1a\x19\xc9\x35\x5d\x5b\x89\x3c\xfb\x72\xf2\x4f\x45\xab\x6c\x11\x7f\x20\x32\xc4\xfc\xd7\x9b\xd7\x3f\x33\x16\xbe\x97\x58\xdd\x01\x03\x12\x42\xdc\x53\x84\x87\x1c\x57\xd4\xc8\x51\x6f\x7f\x16\x39\x8a\x7b\xb6\xf2\x9b\xed\x73\x0e\x6b\xbb\xc5\xeb\x3f\xff\x2a\x52\x19\x81\x79\x9b\x91\x3d\x0e\xc8\xd8\x76\xc1\x80\xc8\x34\x2c\xd9\xf4\x52\x8f\x0f\x0e\x46\x23\x39\x7d\x49\x4e\x19\x15\x92\xee\xc8\xc5\xb5\x79\x64\x70\x69\x1e\x99\xba\x34\x32\x89\xef\x08\xe0\x58\xd7\x19\x8c\xf5\x1c\x8d\x4c\xbd\x13\x14\x40\x0c\xe6\xd0\x48\x7a\xf6\x8d\xfd\x8d\x6b\x8b\x55\xab\xc9\x41\x03\x39\x54\x22\x07\x0d\x75\x71\x9a\x83\x86\xb8\xb8\x4d\x0e\x1a\x5a\x97\x83\x06\x3b\x2e\xbf\xd3\x2c\x60\x40\xa1\x25\x52\x43\x71\xdc\x0a\x75\xb4\x89\x5c\xf5\x86\x72\x29\xb4\xc0\x3f\x94\x4e\x4b\xc8\x81\xf9\xbc\x41\x2f\x49\x34\x7f\x0e\x18\x48\x74\x76\xf2\x16\xa3\x5a\xf7\x65\x21\x3c\xe6\xb8\xd5\x3b\x89\xac\x7f\x27\x91\x5e\xd1\xbd\xa6\x64\x27\xa1\x55\x77\x12\x30\x76\x12\x4d\x77\x92\x9a\x7c\x61\x2b\x21\xd7\xde\x23\xd1\xd4\x4c\x57\x30\x20\x57\x30\xba\x8e\x10\x83\xef\xa2\xa9\x6b\xef\x89\xca\x9d\x99\x06\x11\x94\xd4\x22\x12\x44\x38\x6e\x54\xb6\x17\xa3\xcc\x5e\x04\x8e\x1b\x95\xec\x9f\xc2\xe6\x79\xca\x7a\xce\x90\xf0\x85\x8f\xca\x48\x42\xbd\x11\x24\x81\x95\x63\xaf\x48\x01\x0d\xd8\x3a\xe5\xb2\xb4\xd3\xc2\x69\x96\xd1\x6e\xe4\xc5\x33\xad\xa4\x6c\xe5\xdb\xcb\xe2\x70\x5f\x7d\x50\xc2\xf7\x3b\x98\x79\x44\xf5\xd5\x87\x04\x4d\xab\x25\x68\x52\x48\xdc\x98\xd5\x45\xf5\xdf\xde\xe8\x22\xad\x11\xcd\x72\x84\x82\xfb\x2e\x95\x2a\x9d\xe6\x92\xc4\xc9\x2e\x69\x04\x11\x83\xdd\x43\x16\xa2\x6e\x0b\xd6\xc1\xde\x91\x9b\x50\x75\xfe\xa1\x9f\x78\x43\x95\x70\x64\xa9\x9e\x45\x10\xa5\xf8\xbc\x8b\xaa\x7c\x19\x62\xe8\xcb\x71\x3a\xd0\x84\xc8\xe1\xdd\x4e\xed\x5d\x32\x2d\xfe\x75\x45\xe4\x45\x22\x38\x07\x10\x5c\xb5\xf5\x8a\x28\x19\x42\x7c\xde\x18\xdd\xd1\xc1\xfb\x01\x79\xd9\x2a\x40\x77\xa9\xc3\xd3\x69\x6c\x5e\x79\x04\xbf\x46\x94\x95\xd8\x39\x4d\xdf\x4f\x56\xe6\x4c\xc9\x4c\x97\x1a\x38\xe0\x5d\x09\xe1\xe5\x94\x81\xc8\x71\x2b\xdf\xc6\x21\x9f\x6e\x75\x83\x37\x32\x7d\x65\x75\x83\xa3\x30\xa4\xd5\x6f\x9f\x91\x4f\xd5\x2f\x7f\x42\x93\x9a\x91\x9f\x43\x8a\xa6\xb8\xa6\xeb\x38\x18\xd7\xc1\xcd\x22\xe4\xd5\x40\x76\x82\xe0\xf1\x0c\xd4\x4d\xfd\x19\x88\x1a\x5a\xbc\x44\x18\x60\xaf\x06\x39\xaf\x41\x0d\x88\xc7\xc4\xaf\xf9\xf4\x67\x18\x84\x35\xd3\x03\x38\x06\x41\xcd\xf4\x5e\x06\xe4\xba\xfa\xed\xbb\xb8\x66\x56\xaf\x6a\x90\x7e\x02\x22\x86\x61\x0d\x41\xbd\x8b\xa6\x35\x73\x22\xf3\x9a\x19\xbf\xc2\x13\x84\x11\xab\x69\x71\x46\x7c\x52\x03\x5b\x44\x3c\xe8\xc7\x51\x4d\x07\xef\x62\x36\x25\x08\xd7\x80\xf8\x0a\x7b\x64\x5e\xdb\xe2\x2c\x02\x57\x30\xa8\x7e\xff\x2b\xc2\xb5\x18\x7a\x4f\x80\x3f\x07\x75\x6b\x4b\x30\xbc\xa9\xd9\xb2\xd0\x8b\x23\xc4\x6a\x5a\x9c\xc5\xb8\x06\x07\x3f\xc5\xa8\x8e\xee\x4e\xe7\x28\xa8\x79\xfd\x9e\x78\x97\xb0\x86\x78\xce\x50\xdd\x12\x1f\xc7\xb5\x34\x1d\x5d\x42\x56\x8b\xfb\x23\x8c\x49\x5c\xbb\xe3\x9e\xc3\x2b\x52\xc7\x90\x7e\x25\x51\xe0\xd7\xd0\x50\x00\x6a\xa8\xff\x98\xcc\x43\x82\x95\x07\x51\x55\x0f\x90\x84\x75\x08\x3c\x9e\x41\xef\x32\x40\xa2\xd8\x40\x97\x6b\xc4\xa5\xd7\x97\x2a\xd7\x9a\xdc\x51\xc5\x02\xe7\x5b\x96\x38\x6a\x05\xeb\x93\xd6\xef\x76\x71\xf0\x92\xc5\x52\x84\x6f\x97\xa8\x44\xd2\xa8\xa4\x93\xc5\xe3\xf8\x3d\x35\x17\xcb\x96\x1e\xc4\x89\x9e\xd9\xd1\x11\x6f\xc2\xee\x5d\xda\x20\x53\x79\x1b\x96\xb7\xd9\x49\x15\x23\x89\x82\xdc\x28\xa3\x54\xd4\x46\xa4\x15\x61\xf8\x08\x86\x51\x3d\xd5\x80\x63\xd3\x9e\x9e\x8e\x35\x90\x58\x1b\xd0\x58\xd4\x95\x90\x89\x34\x2a\xc0\x5a\x38\x03\x55\x27\x7b\xf4\xe3\x2d\x93\x5a\x7c\x2e\xb5\x91\x29\xc2\x6d\xf0\x98\x2a\x3b\x25\xe6\xa5\x40\x4b\x94\xd0\x4a\x47\x99\x3a\x10\x47\x61\xf8\x21\x0a\x7a\x99\x67\xa7\xf1\xd8\x27\x73\xc0\x47\x73\x1e\xa9\x22\x15\x1a\x3e\x99\xb8\x50\xfa\xaf\xec\x10\xe9\xc8\xd2\xbb\x8d\xa0\xf4\x8f\xfd\x10\xa1\x21\x5d\x64\xa7\x09\x7b\x8e\x9e\x10\xff\x89\x7b\x02\x72\xf1\xdb\x16\x9f\x5b\x13\x80\x02\x11\x35\x99\xce\x94\xc4\xed\x49\xa6\x30\x55\x3c\xfa\xf1\x16\x0f\x54\x2f\x1d\x16\x34\xbb\x3a\xa5\xcb\x28\x3c\x7d\xce\xc8\x25\xc4\x3d\xc7\x85\xbd\xdc\x5a\x35\x7e\x91\xac\x66\x12\x74\x14\x91\x09\x0a\xe0\xea\x73\x05\xbe\xf0\x2b\xd7\xdd\x25\x53\x61\x92\xce\x2a\x88\x4a\x38\x2b\x84\xfa\xab\xe4\x26\x75\x2b\x97\x5f\x94\x5e\xe2\x90\x0f\x4b\x67\x26\x5e\x09\xef\x39\x06\x5f\xf9\x46\x5d\x9b\x01\xf2\x8b\x49\xdb\xf9\xc3\xa7\x70\x00\xe7\x00\x05\x43\xfe\xcb\x95\x7f\x1a\x9f\x89\x07\x25\x5f\xca\xe7\x4f\x6d\x7b\xa8\xfe\x16\x4e\xf6\x18\xcc\xa1\xf9\xb5\x7e\x56\xd2\x41\xf2\x4a\xf6\xa1\x7f\xba\x13\x14\x51\x96\xef\x47\x3c\x7c\x5b\xde\x51\xfa\xee\x69\xda\xcd\xd0\x78\xee\x06\xa0\xd8\x23\x7f\x56\xd1\x61\xf2\x2a\xdb\x9f\x7e\xec\x42\x0c\xc6\x01\xf4\x87\xbb\xbd\x5d\x13\x51\xf2\x69\x49\xdc\x6f\xf2\xca\xf9\xfc\x39\xf9\xd1\x29\xaf\x79\x00\xc6\x30\xf8\x7a\x75\x66\xab\xeb\xc3\x14\x82\x36\xa6\x0f\x53\xfd\xaf\x5d\x1f\xa6\xe1\xee\xa2\x0f\x4b\xe2\xcb\x97\x53\x87\x75\x9a\xca\xaa\xea\x30\x31\xd8\x3d\xa8\xc3\xba\xad\x57\x07\x75\x58\x6e\x42\xe5\xea\xb0\x2e\x3b\x1b\xe1\xcb\x8a\x8d\x3d\x47\x9f\x10\xa6\xfb\x98\x30\x34\x41\x30\xba\x5b\x49\x36\xd9\xef\x6e\x7d\x1d\xd7\xf5\x08\xb3\xb5\x0c\x40\xc4\xe1\x3c\x8b\x69\x8b\x3c\xa7\xaf\x11\xbe\x5c\x29\x8f\x8c\x88\x58\x2e\xaa\x1f\x65\x2e\x31\x80\x7d\xc4\xf7\x42\xfb\xe4\xdb\xa2\xbb\xec\x08\xd9\x6c\x1a\xad\x22\x86\x93\x68\x68\x3e\xbd\x4c\xcd\xc1\x86\xa1\xab\x23\x1b\x1a\xdd\x87\x40\xe4\xcd\xcc\x09\x27\xf9\xbf\xc4\x94\x9e\x5e\xc2\x9b\x6b\x12\xf9\x74\x64\x3f\x82\xd8\x23\x3e\xfc\xf0\xfe\x55\x72\x1b\xec\x98\xbf\xb3\x6c\xb6\x08\xfb\xc6\x98\x12\x9c\x0d\x0c\xba\x70\xc7\x31\x0a\x7c\x8e\x57\x63\x38\xdb\xc5\xfc\x9f\x12\x27\x02\x9d\x43\xa2\xc2\x97\x20\xd7\x4a\x94\xca\x4c\xb8\xa4\xce\x8f\x63\xef\x8e\x54\x68\x3c\xc7\xff\xde\x9e\xcd\xc0\xb8\xf0\x2c\x49\xcd\x90\x79\xf1\xf9\x73\x0f\x8f\x24\x91\x1a\x4b\x9b\xbc\xce\xd0\x93\x90\xed\x5c\x36\xb2\xff\x06\x2c\xbe\xd8\x89\x89\x7d\xf4\x0d\x8b\x62\xf8\x8d\x7c\xc8\x3f\xed\x4b\x8f\x5b\xe4\x8f\xbe\x31\x3a\x55\x01\xfd\xae\x6d\xb6\x14\x6d\x32\x43\x64\xdf\xcb\xcc\x3f\xfd\x24\xe9\x42\xbe\xbd\x51\xfc\xbf\xec\xbb\x7c\x73\xf9\xb8\xd0\xf8\x26\x84\xd9\x76\x29\x02\xbe\x91\xc5\xc8\x8c\xb7\xd8\xb5\xbf\xf9\x31\xd3\x29\x62\x01\x74\xed\xbf\xed\x83\x1f\x45\x01\x43\x61\x5f\x1f\x65\xf1\x2f\x12\x01\x98\x0e\x1e\x2a\x76\xc3\xcc\x1d\xe2\x98\x66\xeb\x32\xa8\x1f\xb0\xdf\x02\xfb\x18\xb2\x6b\x12\x5d\x96\x2d\x00\x5f\x18\x46\x86\xfb\x26\xa9\xf3\xd3\x29\xc2\x20\xf8\x5a\xb1\xab\xe7\x57\x68\x9e\x4e\x7c\x93\xcb\xc1\x94\x0b\x2b\xbe\xd4\x8a\xba\xd4\x55\xe5\x96\x77\xfc\xca\x1f\x8a\xc4\x1d\x11\x1a\xc7\x0c\xd2\x73\xdb\xc4\x9f\x7d\x31\x10\xd2\x86\xab\x41\xa8\x6c\xcb\xa1\x4e\x5a\x9b\x29\x99\xab\xda\x17\x70\x9f\x7c\xad\x53\x3b\x57\x7d\xaa\x09\x20\xf9\x40\x23\xbe\x69\x30\xe3\x93\x14\xf9\xc3\x9c\x1a\xac\xa2\x0b\x63\x19\xed\x0b\x71\xc1\x6d\xd5\x52\x0d\x17\x47\x41\xa6\xbd\xf0\x6b\x52\xef\x48\x14\xce\x00\x1e\xee\x1e\x2e\x76\xf0\x40\xfe\x18\xa5\x75\x4a\xf1\x40\x2e\x52\xa6\x78\x29\x36\x48\x33\xf7\x42\x21\x2f\xf7\x34\x61\x60\x7b\x7b\xe6\x63\x63\xef\x29\x67\x2e\x98\xcb\x04\xa3\x06\x37\x2f\x2b\x29\xae\x88\xf3\x34\x81\x78\xf7\x60\x98\xfc\x4d\xd4\x1f\x2e\x96\x59\x8d\x8e\x85\xbb\x96\x20\x3c\x34\xe9\x31\xf5\x36\x5b\xdd\xb2\x18\xd0\xe5\x96\xa6\x15\x82\xf0\xf2\x3d\xf4\x48\xe4\x1b\x51\x32\xc9\xa4\xdd\xd2\xec\x3f\xc6\x27\x69\x7e\x24\x66\xa2\xd0\x45\xa3\xe4\x1a\x46\x9c\xa7\x36\xb5\x87\x44\x75\x12\xc4\xa2\x68\x6d\xfa\x9e\x3a\x4f\x6d\xdf\x1e\x52\xf3\xfd\x0e\x9a\x24\xc9\xf2\x38\xdf\x63\xc6\xf9\x2e\x84\x81\xcc\x33\x6d\xfa\xbc\x5d\xa4\x69\x62\x64\xa2\xd7\x11\x4b\x99\x88\x10\xe8\x71\x2e\xaa\xcd\x84\x5f\xb3\x3c\x94\x99\x8b\x0b\xdc\x5b\x51\xc6\xf1\x04\x44\x60\x4e\x85\x5b\x10\x87\xce\x14\x3f\x4c\x50\xf8\x3b\x7d\x5e\x16\x41\xb4\xed\x92\xdb\x96\xf2\x02\x9b\x01\x2a\xab\xfc\x9e\x49\xc7\xaf\xa7\x70\x64\x3f\x95\x55\x7c\x47\x25\x85\x14\x07\xd4\x6c\x3c\x2c\xbe\x2f\x94\xe4\xef\xf1\x0e\x95\xbb\x58\x49\x7f\xbc\xbd\xea\xcd\x71\xd9\x20\x8e\x82\x91\xf8\x37\x2d\xad\x9a\xc9\x92\xe8\x66\xd2\x84\x39\x02\xbf\xbd\xd2\x92\xf9\xa2\x97\x47\x50\xe2\xcd\x38\xcd\x4c\xf4\x08\x63\x75\x4d\x6d\x3e\x2e\x82\x83\x08\x02\xdb\x48\x05\x24\xb6\xfb\x88\x99\x8c\x1f\x0e\xa8\x48\x98\x29\xd9\x42\xcf\x8e\x20\xf0\x09\x0e\x6e\x44\x35\x58\x57\x15\xf7\x1b\x84\x44\x52\xc0\xc8\x06\x63\x4a\x82\x98\x89\xec\x39\xf2\x5d\x00\x27\x6c\x64\xf7\x7f\xf8\xe1\x87\x1f\xc2\x4f\xf5\x65\xff\xc4\x68\x01\x3f\x03\x0c\xdf\x48\xf8\x09\x7a\xc7\x64\x3e\x07\xd8\xef\xd9\x1e\x09\x6f\xec\xfa\xe2\x7d\x92\x2e\xc5\x6a\x88\x6b\xec\xcd\x2b\x3c\x21\x3d\xfb\x98\x84\x08\xfa\x96\x46\xa4\xc5\x88\xe5\x05\x28\x94\xce\x65\xce\x42\x79\x5a\x2e\x41\xcd\xdd\xae\xde\xc4\x03\x41\x5f\x65\xd8\xbb\x2f\x57\x87\x34\x4a\xf5\xd6\xf4\x1c\x93\x1a\x6a\x11\x90\x9d\x8b\xf7\x1b\x66\x95\x00\xe6\x47\xe7\xf0\x62\x24\x4f\xf0\xf2\xf6\xc9\xad\x31\xf7\xd1\xc2\x15\xa3\x55\x7d\x24\xb5\x23\xc5\x8f\xe4\xbd\xfb\x54\x32\xb2\x9f\x91\x6f\xe8\x88\x32\x6d\x39\xea\xfb\x33\xe4\xc3\xbe\x59\x7a\xb8\xfc\x90\x60\x99\xa3\x88\x39\x4f\xcf\x2f\x86\xbf\x0d\x68\x18\x20\x71\x5f\xfe\xac\x6a\xa9\xe6\xc7\xcd\x66\xb1\x2d\x0c\xb6\x73\x20\x37\xa4\x48\xbd\xf8\xb4\x6c\x3e\xf8\x62\x98\xfb\x3d\xfa\x4d\x16\xee\x37\x46\x7d\x89\x22\xca\xde\xc7\x38\xbf\x56\x13\xf5\x7c\xb4\x7b\xb0\x70\x11\xd5\xcd\x86\x3d\x67\xf4\x63\x4e\x17\x5c\xfa\x9d\xe3\xc6\x38\xdb\x7d\x09\x88\x49\xeb\x82\x91\x74\xa7\x8e\xc4\xa7\xd3\x6c\x4a\x8d\xbb\xa4\x6d\x20\xc6\xc9\xd0\x12\xe7\x84\x84\x33\x22\x32\x15\x55\x55\x85\xf9\xa3\xb6\x05\xc2\x13\x52\xd7\xa0\x83\xc9\x98\x44\x53\x80\xd1\x1f\x32\xf4\xf7\xab\x0f\x4f\x6c\xaa\x0d\xf4\x2e\x9a\xb6\x52\x24\x99\x58\x5b\x5b\xaa\x8c\xec\x52\xb4\x54\xd3\xe6\x73\x53\x20\xbf\x44\xe3\x93\xa8\x60\x28\x64\x6a\xf5\x10\xa4\xbd\x5b\x55\x77\x78\xa8\xd4\xd7\x49\x19\x62\x57\x5c\x81\xf4\x63\x55\x63\xd9\x9d\x83\x4f\x67\x60\x4a\x93\xd6\xf2\xa7\x2d\xd2\x92\xaa\x14\x86\x2f\x94\x0e\x48\xb7\x29\xbe\xb1\x9d\x45\x5d\x32\xc1\x72\xc4\x76\x28\xa9\x23\x17\xf1\x14\x32\x86\xf0\xb4\xa5\xeb\x60\xc5\x6a\xba\xf6\x3e\x95\xfd\x3c\xbd\x84\x37\x15\xe9\x94\x72\xeb\x6c\x18\x71\x45\xc6\x04\x2a\x0a\x13\x9b\xf0\xb4\xd2\x91\xae\x02\x51\x75\xc8\x56\x52\x8d\x50\xc6\x3e\x24\x40\x75\x05\x28\x03\x43\x0b\xe2\x2f\x43\x4a\x0e\x84\xee\xeb\xd4\x08\x44\x35\x1e\xe4\xce\x89\x29\x7c\x2e\x79\xd4\x6b\x32\x25\xab\x6c\x7b\xd7\xe6\x87\x0a\xb1\xcb\x07\xb7\x3b\xc6\x02\x84\x08\x63\xe8\xdf\x33\x2f\xbe\x37\x26\x8c\x30\x62\x48\x30\x44\x7f\xb8\x7b\xd8\x36\x49\x13\xc2\x74\x74\x7e\x91\x54\x3c\x3d\x41\x98\x96\xe5\x01\x52\xf7\x9e\x34\xe5\x43\xe5\xd5\x2c\x77\x95\x7a\x9a\xb6\x30\x00\xb4\x9d\xaa\x1c\x42\x69\x73\x0e\x9a\xed\x98\xb7\xb5\x3c\x51\x55\x66\x8c\xeb\x90\x20\x7e\xb9\xd2\x6b\x5d\x4b\x3d\xa0\xb6\xc7\x92\x9b\x3a\x1c\x99\xe8\x72\x77\x0f\xcc\x57\x02\x35\xae\xf0\x71\x73\x86\x15\x88\x34\xe0\x96\xf9\xfe\x44\x7a\x8f\xe4\xbc\xab\x5b\x5b\x1d\x48\x54\x02\xc6\x61\x26\x9d\x78\xf9\x92\x37\x87\x18\x65\x16\xae\x1d\x07\xee\x6c\xb3\x6d\x8f\x73\x95\xaf\x70\x6b\xf1\x93\x35\x08\x94\x47\x4c\x48\xb3\x7a\x9a\x0e\xb1\xcb\x34\xd6\x0c\x6b\x5a\x6c\xa4\xfb\xba\x7e\x91\x1b\xd5\xdc\x8d\xfc\xc6\xa6\xcd\xc7\x27\xe2\x38\x6a\x1f\xbc\x5c\x48\x87\xde\xc4\x74\x53\x86\x6d\x3a\x8a\xe9\x84\xc8\xf2\x97\xe8\xc9\xc8\x35\x4c\x92\x04\xb2\xa9\xa6\x43\xbc\x80\x7b\x7b\xac\x67\xe4\x1b\x16\x73\xec\xd9\xb6\xf2\xdb\x40\x54\xc4\x50\x6c\xeb\x9c\x64\x06\xa2\xe2\xc4\xd2\x74\xb9\x3a\xa3\x78\xe3\x54\x3b\x08\x1c\xd2\x92\xfc\x15\x5c\xfe\x6a\x05\x0b\x6d\x3e\x6f\x11\xd6\x29\xd1\xd1\x6a\xdb\x37\x94\x58\xbc\x6f\x4e\xe0\x13\xaf\x2f\xe7\xd3\x8f\x20\x8d\x83\x25\x2b\xa4\x76\x22\x26\x2f\xaf\x4a\xf8\x13\xf9\xe5\xb5\x77\x72\xd3\x85\x81\xee\x38\xee\x33\x59\x9e\xd6\xae\x6e\xc2\xc9\x26\x5b\x6d\x00\x16\x39\x94\x4b\x47\xe9\x95\x5f\x6f\x08\x99\x14\x42\xcf\xf4\x69\xd2\xfe\xf9\xc8\xf4\x23\xd8\xa3\x85\x7c\xc5\xd4\xb5\xf7\x24\x56\x46\xad\x12\x59\x0a\x7f\x47\xd4\xae\x20\x63\x21\x59\x44\x32\xc9\x33\xf8\x89\x7d\xcd\x13\x2d\xab\x15\x13\xc1\x49\x04\xe9\x2c\xe3\x57\xa4\x2a\x56\xa9\x57\xa5\xb3\x59\xc9\x99\xa9\x1d\x61\x67\xcb\x06\x99\x4d\x8c\x8a\x41\x07\x7b\x7b\xbd\xcd\x15\xac\x73\x8c\x02\x1c\x49\x41\x51\xe0\xfb\xcf\x02\xe2\x5d\xb6\xc8\x02\xac\x31\x39\xe6\xed\x69\x97\xb2\x3e\x1d\x6f\x09\x62\x80\x2e\x9e\xb8\x8d\x33\x28\x16\x30\x93\x93\x58\x9b\xb2\xb3\x33\xc8\x42\x70\x13\x70\xb7\x4c\x3c\x9a\x03\xbc\x73\x5a\xe3\xf5\x32\xde\x4e\xf3\x4d\xae\x42\xeb\x58\x27\xe1\xf3\xd6\xad\x22\xb9\x18\x36\x63\x60\xc8\x33\x87\x22\x35\x2c\x57\x9d\xbc\x83\x69\x52\x1f\xcf\x75\xc1\x6d\x73\x44\xbd\x24\x43\x3a\x45\xf3\x30\x80\x22\x22\xae\xd8\xcb\x5d\x66\x46\x5f\x41\x57\x16\xd7\x26\x53\x8c\x5b\x64\x52\x6c\x93\x7b\x43\xfa\x81\x9c\xe4\x33\xa4\x97\x64\x51\x37\x5c\x10\x86\xb6\xed\x66\x3d\x18\x54\xf7\x1e\x99\x87\x31\x83\xbe\x20\xca\xc4\x61\xc1\x35\x72\xc0\x14\x15\x73\x86\x63\x83\x22\xa4\xf6\x65\xe3\xf8\x5a\xcc\x00\x3d\xf2\x3c\x12\x63\x46\x0b\x50\x20\x7a\x94\x51\x07\xb8\x76\x7d\x1a\x1e\x81\x55\xb7\x90\xd5\xdf\x36\x5a\x91\x68\x08\x30\xc1\x37\x73\x12\x53\xe1\x0f\x52\xa7\x81\x20\x11\xbf\xc1\x15\x9b\x54\x8f\x3e\x00\x6a\x2e\xb6\x63\x4e\x12\x54\xcd\xd0\x98\x7d\x09\xe0\x25\xea\xcd\x56\x43\x2f\x24\xf9\xad\x1f\x9f\x19\x95\x4d\xbe\x37\xbe\xd8\xc5\xf8\x37\x49\x21\x6f\x88\x0f\x6d\xa7\x5a\xb1\x5b\x33\xbe\xf3\xf9\xf3\x2d\xf2\x87\xf6\x81\xbd\x70\x1b\x58\xb5\x84\xb7\x0d\xa7\xe6\x6b\x62\x0e\x55\xb2\x01\x96\x20\xb4\xb2\x80\xd1\x0a\xb2\x6a\x46\xd6\xde\x5e\x6f\x45\xc2\xb5\x0f\xca\x1b\xd6\xd0\x90\x56\x47\xa8\x7c\x4d\xeb\x41\xcb\xfd\x4c\x63\x6f\x6f\x37\xc9\x6f\xd5\x7a\x0b\xc9\x24\x55\x02\x01\x2f\x7c\xc4\xa1\xfd\x93\x61\x00\x8a\x59\x2b\x14\x18\x99\xd6\xfe\x6c\x78\x50\x69\x9f\x39\x1e\xae\x10\xbc\x3e\xc2\x20\xb8\x61\xc8\x2b\x72\xf0\xaf\x1c\x0f\x40\x4f\x3c\x41\xc5\x73\x40\x67\xc2\xb7\xed\xcf\x86\x0a\x3e\x79\x91\x74\x2f\x41\x85\xf8\xf5\xe7\x46\x43\xe2\x89\xba\x1e\x34\x58\x1d\x4e\x50\x33\xf5\x63\xd9\x01\xfa\xd4\xb6\x87\x95\x68\x2d\x9d\x75\x6e\x84\xcf\x9f\xed\x83\xf2\x86\x0d\x68\x15\x2e\xf2\x2d\x3f\x52\xa9\x23\x17\x4e\xa3\xc5\xdc\xc8\x5a\x90\x76\x5e\x59\x26\x64\xe1\x52\x08\xf1\x5b\x78\xfd\x8b\x74\xe3\xc9\x7c\x55\xf0\x37\x4e\x5f\x25\x93\xc8\xd0\x53\x92\xa0\x6a\xf0\xe2\x0a\x46\x37\x04\xc3\x0f\xca\xfe\x91\xff\x36\xa9\x2a\xcd\x1b\xf4\x4a\xfa\xcd\x94\x53\x10\x06\xac\x00\x50\xa6\xa0\xb4\xdd\xe2\x9a\x2a\x3f\x24\xe1\xea\x5c\x32\x94\xf2\xa3\xe2\x77\xe0\x19\xa0\xbf\xce\x00\xa3\x6f\xe1\x75\x63\xba\x03\x38\xfa\x71\xb7\xb7\x5b\x89\x12\x93\xb8\x12\xd0\x47\xed\x50\xb2\x34\x4e\x70\x6a\xb1\x4a\xae\xa2\xa2\xa8\x9f\x5e\x43\x65\x34\x32\x11\xe6\xd4\x61\xcc\xdd\x3d\x74\x76\x60\x8f\x38\x0b\xa7\x53\xd1\x03\x06\xe7\x61\x20\x32\x70\x7e\xdd\xa6\x25\x34\xe7\x73\x3b\x05\x57\xd0\x3f\x53\x53\x1e\xe6\xb5\x0b\xaa\x98\x88\x46\x09\xcd\x5a\x9b\xe5\x05\xdc\x34\x90\xbb\xf6\x53\x11\xc6\xc4\xe9\xb2\x4d\x54\x39\x29\xb5\x57\xe1\x8e\x5a\x39\xa3\xfa\x75\x7b\xc5\x9c\x39\xef\x76\xba\xb9\x12\x2c\x6c\xb3\xe3\x4b\x57\xac\xe8\xfc\xfa\x54\x63\x25\x4b\x04\xb7\xcf\x13\x8d\xfa\x10\xba\x6f\xc1\x1c\x0e\x99\xfb\xe2\x93\x07\xa3\x90\xd5\x55\xa7\x2f\xa2\xaf\x95\x91\x92\x24\xbe\x09\x5a\x87\xdd\xc1\x9c\x27\x0f\xd8\xaf\x7b\xfb\x36\x24\xd3\x48\xd0\x2e\x92\x28\xdb\xee\x2d\x13\x7a\xfa\x15\xac\xc2\x2d\x48\xae\xbd\x0e\x42\x99\x24\xe2\xa0\x9d\x9e\x58\x4c\x62\x5f\x72\xac\xb2\xb9\xc0\x92\xf4\xc8\x79\xfa\xd1\x6e\x76\x86\x62\x58\x76\xdb\x51\x1d\x2c\x07\x5f\xc2\x78\xd0\x09\x3b\xed\x6d\xb2\x62\x12\x4f\x45\xde\x68\x38\x3a\xb4\x53\x98\x7a\xa5\x16\x80\x4e\x3c\xa4\x03\xc8\xaa\xd2\xda\x31\x99\x87\x32\x05\x47\xea\x1c\xdb\x83\x23\x38\x60\x11\x9a\xf7\x1c\xc7\xb4\x81\xc1\x51\x69\xf0\xbf\xe3\xa6\xe5\xdd\x59\x21\xa9\x0f\x13\xe5\xdd\xd9\xe8\xf0\xe0\xa0\xce\x25\x3b\x83\x95\x83\xbd\x09\x0a\x18\x8c\x46\xa6\xf7\xeb\x5e\x80\xe6\x88\x65\x2c\x98\xf7\x8c\x3b\x61\x2c\x12\xd7\x8b\x02\x8d\x16\xec\x40\x1b\xb7\x64\x76\x3c\x6d\xba\x10\x77\x69\x00\x80\x8b\x0b\xfb\xb1\x5d\x11\x48\xc5\x0c\xaa\x2d\x44\xa5\x7c\x4d\xdb\xaa\x4e\x00\xa5\xd7\x24\x57\xdf\x31\xcf\x17\x5c\x7b\x3f\x54\xed\x6a\x84\x1a\x5d\xe4\xd1\xac\xe2\x28\x4b\x5f\xae\xc6\x70\x2a\x6a\x31\x0b\xbe\x56\x8d\x6d\x23\xfa\x55\xae\x8d\x6d\x0c\xeb\x0c\xa4\xc9\x4c\xb5\x90\x2e\x13\x24\x9a\x12\x96\xe2\x43\x68\xbc\xd5\xe1\xa3\xa2\xb8\x92\x12\x78\x59\xa7\x57\x11\x5f\x6e\x23\x7c\x05\x02\xe1\x56\x26\x27\x9b\x5b\x87\x5b\x95\x9a\x6c\xd1\x22\xd7\x90\xca\xd1\x20\x21\x2a\x15\x17\x0a\x69\x86\x14\xbe\x29\x64\xd9\x15\x95\xbe\x35\xba\x47\xd1\xa0\x0c\xff\xf9\x79\x7e\xfe\x9c\x7d\xc2\x9c\xa7\x75\x53\xae\x76\x94\xc6\xa5\xc2\x0e\x93\xa9\xe1\x98\x37\x53\xdb\xdd\x60\x96\x6b\xe2\x7d\xfb\xa2\xfb\xa7\x8a\xc9\xd5\x3b\xfc\x9a\xd8\xac\xa9\x33\xb0\x4d\x1c\xa4\x8d\x34\x28\x64\x2c\x11\x16\x0a\xe9\xbe\xe1\x58\x52\x56\x98\x3a\x6b\x76\xcd\x7e\xe9\x83\x90\x1f\x23\x77\xe7\xf9\xd5\x68\x5e\x4e\xaf\x22\x15\xd3\xda\xa4\xc4\xfb\xf3\xd9\x9b\xd7\xcf\x40\x44\x07\x1a\x8a\x9e\xb0\x51\xfd\xe5\xd3\xcb\xbf\x82\x7f\xfc\x6b\x6c\xbb\xc2\xcc\x3e\xfc\xe6\xd6\xa6\x37\xf3\x31\x09\xa8\x3d\x3c\xbf\x70\x6d\xca\x00\x13\x51\xd2\xfc\xf7\xf9\xa1\x7b\xfe\xf8\xb1\x6b\x93\x98\x05\x32\xb5\x2b\x08\x28\xbc\x70\xcf\x0f\x5c\xfb\xe3\x47\x6c\x5f\x5c\xb8\xf6\x0c\xd0\x17\x57\x20\xb0\x87\xe2\xdd\xe2\x1b\x77\x0e\x19\x18\xde\xce\x05\xbc\xe2\x02\xd2\x80\x90\xc1\x6c\x4c\xed\x16\x94\x92\x7e\xec\x25\x69\x70\x55\x82\x98\x7e\x48\x42\x72\x55\x51\xcb\x5c\xb4\x80\x51\xab\xef\x57\xa6\x9d\xca\x0f\xd4\xd4\x6c\xf7\x16\xe2\x78\x0e\x23\x30\x0e\xf8\x27\x5c\xa0\x28\x2b\xf2\xae\x51\xb1\xe0\xdb\xa8\x25\x2e\xbc\x98\x32\x22\x5e\xf3\xfd\xd1\x57\x41\x4c\x77\x56\x4d\xbf\x82\xe0\xbe\x25\xb3\x9f\x5f\x91\x6f\xc3\x52\x82\x93\xec\xa4\x40\x76\x7f\x75\x6d\x1f\x5d\xd9\x2e\x8b\x62\x4e\x6d\x87\x07\xae\xed\x05\x80\xf2\x45\xbd\x42\xf0\xba\x9f\xcc\xd4\xbe\x70\xcf\xbf\x4f\xe8\xf1\xe3\x47\x4e\xa3\xfc\xeb\x09\x89\xe6\xc9\xe7\x99\x06\x69\x9b\xaa\x11\xae\x91\x3f\x85\xac\x1f\x20\xca\xfa\x21\xf2\x2e\x61\x64\x15\x1f\xf5\x67\x24\x42\x7f\x14\x86\xcf\x0c\x10\x07\xa5\xfd\x93\x50\x3a\x67\x96\x7f\x9b\x7e\x1e\x20\x3b\xd9\x6f\x87\x8f\x93\xef\xcf\x1f\xff\xe0\x9e\xab\x4e\x2c\xfe\xf3\x7b\xd7\x46\x13\xdb\x3d\x3f\x7f\xfc\xad\x7b\x6e\x2b\xe7\x7a\xf4\x07\x5f\xd0\x2b\xe4\x73\xf4\x72\xfc\x8a\xd4\x02\xd0\xb7\x2f\x5c\x1c\x07\xc1\xc5\xc5\xc5\x85\x7b\xfe\xc4\xb5\x81\xf6\xa8\x3d\x7f\xfc\xc4\x3d\x70\xcf\x79\x5b\x82\x75\x17\xfc\xd3\x0a\x20\x9b\xf1\xc8\x4f\xa5\xfe\x4c\x54\x9c\x32\xe6\x9a\x76\xed\x9e\xff\xb0\x42\xcf\x46\x97\xcf\x62\x14\xb0\x3e\xc2\x96\x90\x5d\x52\x19\x30\x33\x02\xff\xf5\x6d\x33\xa6\x24\x7a\xdc\xdb\x1c\x41\x8a\x3e\x58\x39\x94\x28\x85\xf1\x30\xb7\x4a\x3e\xf2\xd4\x22\xf1\x01\xd3\x12\x0a\xae\xfd\x4a\x54\x7b\xb0\xcf\x90\x77\xc9\x47\xd5\x78\xfe\x21\xcb\x5b\x43\x10\x81\x39\x64\x30\x12\xcc\x79\x21\x97\xce\xcd\x43\x53\x8d\xca\x15\x29\x49\xe7\x83\x5e\x81\x92\x74\x17\x1b\xa0\xa4\xb4\xeb\xb5\x51\xd2\x2f\x08\x58\x86\x96\x9d\xe3\x85\xc2\x48\x1e\x0c\x0d\xb4\x54\x82\xab\x07\x5a\x32\xf0\xf3\xfa\xf9\xd1\xc9\x0a\x74\xc4\x3f\xdf\x00\x0d\xc9\x6e\xd7\x46\x3f\xc7\x04\x63\xe8\x31\x8b\x11\x8b\xf7\xbc\x7f\x24\x14\x1b\xd6\x73\x91\x16\x9c\x44\x37\xcd\x64\x94\x43\xd3\x97\x4f\x42\x56\xee\xbf\x15\xc9\xe8\xf8\xe8\x74\x05\x2a\x3a\x3e\x3a\xcd\x11\x51\x1e\x3c\x03\xc4\x6e\x94\x24\xba\xae\x9b\x78\xcb\x9e\x73\xdc\xe8\x18\x62\x16\x81\xc0\x3a\xca\x72\xa5\xd3\x96\x5c\x29\x8b\xae\x6a\x6a\x2a\x03\xd6\x00\xf8\x5e\x68\xaa\x0c\x96\x92\x7d\x5a\xf6\x38\xff\xcc\x78\xfc\x9d\x6b\xc7\x68\x3f\x46\x32\x4f\x1d\xbf\x31\x5c\xb8\xe7\xe7\xf6\x7f\x52\x25\x93\xd8\x4f\x0e\x0e\x04\xaa\xd2\x8f\xd7\xc7\xee\x1b\xd6\x9f\x4b\xad\x7d\x59\x58\xac\x51\x38\x94\xf9\x96\x8d\x4e\x26\x24\xb2\xdd\x24\x33\x7d\x3f\x8e\x82\x92\xb3\x52\x11\x8e\xf5\xe1\xfd\xeb\x7a\x4e\x7f\x28\xf7\xde\x84\x78\x31\xed\x23\x1c\xc6\xcc\x96\xd3\x3b\x3f\x17\xb9\xe7\x6c\x26\xcb\xa3\x8a\xcb\x81\xad\xa7\xc0\xf1\x97\x81\x40\xd1\xb4\xa2\x0e\xfd\x4a\x15\x1b\x70\x6d\x01\xe4\x45\x61\x9b\x6b\x68\x3f\x44\x81\x28\x91\x20\x08\x45\x20\xc7\x23\x98\x45\x24\xb0\x10\x07\x4a\x6a\x75\xb2\x6f\x4c\x3e\x90\xbd\xac\x96\x20\x91\xce\x41\x50\x2e\xa3\x8b\x2e\x39\xe8\x96\xd8\xed\xf3\x58\xb2\x18\x8d\x4e\x38\x98\x0e\xac\x19\x63\xe1\x70\x5f\x66\xb5\x9a\x11\xca\x86\xdf\x7f\xff\xfd\xf7\xb2\x2c\x75\x7b\x4a\xbd\x5b\xa2\x88\x20\x08\xe6\x65\x64\xf1\x5e\xbf\x68\xa4\x88\xe5\x68\x41\x0e\xdc\x40\x0d\x0a\xba\x6a\x7a\x10\x50\x6e\x31\x45\xcc\x01\xc2\x5b\xbb\xf6\x52\xb7\xfa\x77\x78\x53\xb9\xfe\xd6\x89\x68\x62\xa9\x36\x8d\xa4\x90\x64\xd1\xab\xa5\x86\x88\x5c\xd3\x72\xa2\x48\x21\x6a\x20\x0c\x03\xf4\x0b\xf7\xaf\x95\xe4\x71\xa2\x9b\x6d\x27\x89\x1c\x93\xf0\xc6\x62\x33\x68\xbd\x3f\x3d\x32\x50\x6d\x4d\x22\x32\x57\x0b\xa0\x52\xd6\x50\xeb\x7f\xfe\xcf\xff\xe5\xef\xe8\xd6\x52\x93\x17\x20\x19\xb4\x58\x42\x4c\xef\x5e\x3d\x3f\xb6\x8e\x45\x03\xeb\xd5\xf3\x0d\x72\x95\x04\x88\x06\xfa\x49\x81\xad\xe6\x2d\xc7\xaa\xcd\x76\xd2\x8e\x60\x2f\x2a\x7a\x62\x6b\x69\x22\xdf\x4d\x42\x10\xa2\x52\xa9\xf5\xea\xb9\xd5\x7b\x27\x24\x7b\x10\x38\x1b\xa4\x0a\x55\x99\xb5\x9e\x24\x14\xac\x17\xf9\xc5\xdc\xe8\x2a\xbe\x9a\x58\x37\x24\xb6\xae\x01\x16\x57\x44\x7a\x83\x3d\x4b\x58\x81\x2c\x84\x2d\x60\x85\x20\x62\xc8\x8b\x03\x10\x29\x8c\xf5\xc4\xb2\x7f\xfc\x98\x28\xcd\x2c\x61\x87\xfa\xf8\xd1\x76\x5c\x2b\x94\x92\xa7\xe0\x28\x29\x82\xc5\x17\xdf\x1d\x1e\xfa\xdf\x8f\xff\x72\xd8\x3f\x84\xde\xf7\xfd\x6f\xbf\x9b\xfc\xa5\x3f\xf6\xbe\xf7\xfb\xdf\xf9\xf0\x2f\xdf\xfa\xdf\x7d\xeb\xfd\xe0\x3f\xae\x5a\x81\xfb\x27\x23\x11\xe1\xd0\x57\x8a\xe1\x02\x2d\x7d\x50\xf5\x81\x36\x48\x40\x06\x00\x0d\x54\x24\x5a\x7e\xa0\xf2\x2e\x5a\xc5\x59\x8e\x74\xa3\xed\x64\x2d\x1f\x28\xf4\x45\x42\x58\xa5\xbb\xb8\x46\x6c\x96\x54\x82\xb3\x00\xf6\x4d\x3a\x15\x2f\x13\x6a\xec\x49\x87\x38\xf1\xce\x8a\xb1\x0f\x23\xeb\x0d\xa0\x0c\x46\xea\x38\xe3\x1f\x03\x4a\xd1\x14\x5b\x1f\xbf\x11\x8a\x7b\xd1\xcb\xc7\x6f\xac\x88\x04\xb0\xa8\x6c\x01\x53\x80\x30\x65\xea\x6b\x1a\x42\x0f\x4d\x10\xf4\x2d\x30\x26\x57\x70\xdb\x09\xd6\x54\x3b\xe7\x89\xf6\xa4\x54\x25\xbd\x01\xa2\x4d\x80\xe0\x17\x6b\xfd\x67\x1d\xf1\xa6\x90\x35\x10\xb0\x6e\xf8\xb5\x11\xf1\x76\x50\x95\x36\x8e\x20\x0a\xc6\x01\xb4\x5e\x0b\x2f\xfa\x56\xd4\xf2\xa9\xcf\xc8\x74\x1a\xc0\x94\x60\x34\x91\x08\x8d\x86\x6b\xb3\x19\x9c\xf3\xff\x13\x7c\x26\x1b\x5e\xe8\xf5\x2d\x50\x84\x2f\x87\xd7\xa3\x5f\xb8\xf6\x1c\xfa\x28\xe6\x17\xb7\x00\x4d\x67\x4c\x29\xe4\x4a\x74\x6b\xe2\xf9\x9c\x93\x6d\xdb\xbe\x35\x59\x34\x52\xc7\xbd\xed\xef\xc0\x07\x61\x5f\xd9\x3b\xd3\xf0\xe5\x23\xdf\x17\x0e\x60\xa6\x60\x0f\xb0\x75\x2c\x39\xa1\x78\x55\x25\xb5\x6f\x70\xe1\xaa\xa1\x5c\xef\x22\xd6\x8c\xb3\xe4\x82\x36\x2a\x96\xd7\xa4\x26\xbf\x23\x7a\x99\x11\xca\x72\xf6\x85\x52\x65\xed\xfa\xf4\x6d\xe9\xb0\x59\x61\x85\x3f\x4f\x16\x4e\x5a\xb1\x7e\x16\xc0\x15\x19\x3d\x6f\x2a\xf8\xfa\x69\xa6\xd9\x56\x71\xf8\x57\x27\x16\x89\x2c\x3e\x4f\x0b\xf8\x7e\x04\x29\x75\x2d\x21\xec\x72\xe0\x07\xf0\x13\x98\x87\x01\x1c\x90\x68\xea\x5a\x87\x8f\xff\x3a\x38\x18\x1c\x0c\x0e\xb7\x83\xb7\xe7\x28\x44\x38\x47\x97\x52\x88\x75\xa2\x5e\xad\x57\x44\x48\x47\x75\x6d\x1c\xcf\xc7\x42\xe9\x5d\x45\x22\x12\x84\x46\x12\xd1\xcd\xb6\x8a\x44\x38\x50\x96\x9c\xa1\xa2\x8d\x27\xdf\xff\xb0\x95\x34\x00\xb1\x17\xdd\x88\xab\xb0\xd1\xcf\x8b\xcc\xc3\x5a\x23\xac\xb4\x7a\x65\x8c\x32\x04\x7b\x33\x80\x45\x5d\x85\x0a\xf6\xae\xac\xa8\xd9\x61\xf4\xa9\xc3\x09\x45\x16\x37\x19\xa8\x07\xc2\x06\x52\x98\x7c\xba\xa0\x8d\x96\x58\x69\xc5\xcb\x00\xa9\x88\xb3\x68\x2b\x3a\x8a\xd9\x2c\xe1\xe7\x26\x2a\xce\x6e\x42\xf8\x96\x60\x79\xc0\x88\x3e\x12\x8b\x9f\xa2\x51\xda\x87\xff\x8a\x41\x90\xa1\xd4\x84\xa8\x61\xa6\x23\x49\xd8\xcb\x8d\xad\x0e\xb7\xea\x59\x1b\x3b\x74\x99\x11\x6a\xf6\x45\xad\x59\x7e\x03\xf8\x3e\x65\x20\x62\x67\xaf\x4f\xef\x0b\xe7\x99\xf1\x37\x86\x77\x63\x94\x65\x71\xbf\x95\xbc\x65\x0c\x28\x7c\xfe\xd6\xe8\xe3\x19\xa0\xd0\x92\x4f\x36\x70\xb0\xa8\xe1\x6a\x64\x0f\x0d\xd0\xdd\xea\xda\xc4\xf2\x22\x3c\xb5\x44\x65\x00\x6b\x42\x22\x4b\x26\xab\xb4\x64\x90\x89\x16\x1f\x48\x3c\x12\xb7\x42\xd7\xf7\x46\x4a\x8a\xe0\x7f\x7a\xa4\xca\x1c\x76\xcf\xab\x8b\xb0\x9f\x5d\x5d\x84\xfd\x0d\xae\xae\x1c\xae\x6e\x75\x15\x40\x35\x22\xc3\xb3\xa4\xc9\x56\x89\x0b\xb2\xec\xbe\x17\x41\x1f\x62\x86\x40\x40\x05\x91\x08\x79\xac\xcc\xe9\x6b\x8b\x08\xe0\xa4\xa8\x6a\x12\x64\xb0\x39\x35\x53\x71\xe8\xa2\x82\xa9\x40\x16\x75\xba\xa5\x0c\x71\x98\x0d\x1f\x48\x64\x65\x12\xe1\xfc\xec\xa5\x60\x72\x59\x0d\x59\x64\xa5\x4f\x37\x40\x1e\xc6\xb0\x35\xfc\xc2\x04\xae\x86\x2c\xde\x92\xb4\xd1\x56\x91\xc4\xa9\x79\x88\x08\x72\x98\x20\xec\xf3\x83\x46\x1e\x23\xf2\x54\xe9\x7d\xee\x11\xe1\x5c\x7f\xcc\x7b\x1d\x85\x30\xa2\x04\x3b\x99\x67\xbc\x79\xf6\x09\xc2\xa2\xbe\xcc\x89\x6c\xdc\x60\x22\xeb\x3c\x07\x6b\x86\xa6\x33\xa9\x01\x32\x66\x23\x74\xec\x37\x96\x41\x1d\x16\xc0\xfe\x3e\xd1\x26\xa8\x5a\x8a\xb9\x5f\x32\x17\x5d\x14\xe8\xbc\x05\xd8\xab\x12\xba\x39\x70\x0d\xa5\x67\xe0\xfb\x0a\x49\xdd\xba\x42\xc0\x12\x93\x4c\xa8\x7e\x2f\x43\xcf\xe2\x9d\xd3\xfb\xdc\xf3\xf0\x88\xce\x50\xf8\x9b\x17\xc1\x6b\x87\xff\x12\xa6\x87\xdf\x28\x03\x93\x89\x53\x49\xe8\xf9\xc7\x77\x4e\x60\x49\x41\x58\xbe\x3b\xde\x67\xa4\x2e\xb1\x5f\x92\xca\x90\xd6\xfb\x8d\x09\x60\x05\x18\x6a\x08\xae\x08\x6f\x0d\xd5\x1d\x95\x34\xde\x2a\xea\xd3\x86\xde\x7d\x79\x08\x27\x93\x53\xb4\x16\x23\xdf\x42\x58\x9c\xc5\xae\x45\x8f\xde\xa8\x1c\x95\x6f\xc1\x1c\xf2\xe7\xf5\x9e\xd7\x9b\x61\xa6\x59\xa2\xa0\x7c\x97\x08\xa3\x54\x04\x59\x04\x39\x34\x3e\x60\xc0\xba\x9e\x41\x6c\xc5\x94\x6f\xa3\xe6\x33\xf9\x7e\x39\x6c\x86\xa0\x44\xb5\x44\x6d\x79\x2f\xdf\x06\x99\x26\x9b\xde\x0c\xe9\x60\x6d\xb7\x84\x01\x5e\xdb\x8d\x91\xf9\x64\xab\xb6\x47\x02\x59\x61\x67\x4c\xd1\x15\xc4\x6f\xab\x57\x61\x8b\x68\xea\x35\x68\x22\x29\xb3\xc5\xa6\x29\x2a\x19\xab\x2d\x41\xa5\xc0\xb5\xa5\x27\xf3\x8b\xad\x22\x27\x0d\x58\x81\x9a\xe8\xd6\x79\xb4\x16\x17\xee\xc5\x1c\xa0\xa0\x9a\x86\x92\xd7\x9b\x26\x20\x39\x50\x5b\xea\x51\x60\xb5\x25\x9d\xa4\xf9\x56\xd1\x8d\x80\xaa\x40\x34\x35\x08\xdf\x12\xb2\x11\xd7\x84\x37\x22\x42\xbc\x70\x79\x48\x29\x27\x6d\xb0\x49\xd2\x31\x61\x69\x43\x3c\x19\xd8\xdb\x90\x4f\xee\x83\xad\x22\xa0\x14\xd9\x6c\x06\x98\x85\x84\xa6\x65\x82\x20\xb5\xf8\x5d\xe3\x0a\xf9\x31\x08\xe4\x2d\xc3\x9a\x43\xc3\xb4\x27\x7f\x58\x24\xb2\x62\x8c\xfe\x15\xc3\x36\x4b\xb5\x1e\x31\x2f\x47\x24\x2d\xe4\xbc\xad\xbf\x4a\xe7\x9c\x73\xee\xc9\x1f\x29\x43\xed\x6b\xf4\x45\xaa\xed\xf7\xc1\x0f\x69\x5d\x0b\xb6\x19\x1f\xa4\xd6\x63\x7c\x21\x0b\x09\x82\x80\x5c\xbf\x24\xd1\x5c\x94\x26\x30\xf7\x1a\x67\x74\xaf\xf9\x5d\xf7\x4e\x97\x2d\x0f\xcf\xda\xd6\xaa\xd0\x71\xeb\x05\x5a\x87\x58\x82\x05\xdf\x92\xaa\x83\x2b\x04\xa4\xce\x1e\x60\xdf\x8a\xe0\x54\x78\xd8\x27\x4e\xcc\xd9\xa4\x11\x56\x2f\xa6\x70\x12\x07\x42\xdd\xc5\x20\x15\x26\x44\xfe\xf1\x12\xee\xc7\x6a\xa5\x64\xb8\xe9\x38\x66\x8c\xe3\x4f\xaf\x96\x47\x02\x49\x14\x12\xc7\x9a\x68\x6c\x82\x8f\x03\x11\x31\xab\x91\x6a\x1a\xb4\x8f\xd5\x47\xff\x84\x1c\xb9\x7c\xb1\x38\x6a\x5c\xfb\x0c\x52\x66\xfd\xcf\xff\xf9\xbf\x8d\xce\x1f\x27\x11\xbc\x42\xf0\xba\xc5\xd1\xae\x27\xf0\x38\x3b\x81\xfe\x14\x84\xe5\x79\x80\x2a\x7c\xf8\xd6\x11\x91\xbc\xe4\xd6\xac\x0a\x3d\xaf\xd8\x9e\x1e\xa0\xb9\xa8\xd9\xe3\xa3\xd3\xca\x80\xd9\xb2\xce\x97\x77\xe2\xd3\x63\x67\xc5\x3f\x0f\xd0\xa6\x50\x59\x0f\x50\x21\xeb\x7d\x88\xd6\x73\x37\xa8\xc0\xd9\xdd\x44\xca\x56\x47\x7b\xdf\x0f\x35\x44\xd0\x17\xfa\xc3\x1c\x59\x24\xac\x83\xd3\xc7\x1d\x10\x46\x06\x8c\x6a\x0a\xd1\xcd\x3e\xd4\x53\xca\xfb\x6c\xb3\xad\xa6\x98\x34\xee\xe9\xfd\x6b\x41\x2f\xfb\x1e\xa0\x6d\x69\xa6\x55\xca\x8a\xce\x7c\x1a\xc9\xac\x06\x9d\xd8\xf5\x4f\x11\x84\x38\xe1\xd6\x95\x99\x12\x5e\x13\xef\x12\xfa\xe5\x0e\x53\xaf\xd5\x78\x42\xaf\x0d\x58\xaa\x72\x2a\xe7\xf5\xa7\x40\x24\xc2\xab\x66\xf2\x05\xe3\x8a\x9d\xe1\xd5\xdf\xbb\xf6\xb4\xe8\x07\xfe\x12\xa0\x20\x8e\x38\x81\xca\xf4\xb0\x1c\x88\x83\xcc\xb1\x5e\xed\x82\xad\xc8\x22\x2c\x25\x09\x19\xbc\xa2\x12\x96\xf5\x27\x72\x18\x6b\x7e\xd3\x7f\x62\x97\x44\xd3\xa8\x20\x0f\x44\xb0\xc5\x9b\x42\x7f\x68\x19\xa7\x55\x1e\xd8\x74\xf2\xed\x48\xa3\x80\x95\x12\x5e\x23\xb6\x87\xf4\xab\x95\x07\x6a\x7f\x4e\x7c\x20\x78\x84\x39\xad\xcc\x43\x06\xc6\x08\xfb\xf0\x93\xed\xda\xfd\x43\xfd\x30\x22\x5c\x82\xb3\x7d\x04\x02\x32\x2d\x08\x96\x0d\x9c\x4e\x74\xdf\x4f\xbf\x35\x3b\xd4\x59\xc5\xbb\xa7\x3f\x93\xbd\xaa\xfc\x92\x15\xb2\x6e\xab\x2e\x4a\x93\xed\x58\xa9\x04\xb2\x84\x10\x2e\x3b\x1e\x13\xff\x26\x0b\x98\x5d\x10\x34\xf8\xe2\xe8\xa1\x5c\x1b\x51\x1d\xb6\xd4\x3a\xa1\x4e\x2d\xbd\x0a\xc6\xe5\x03\x3c\x4d\xe7\x77\xe8\x96\x0d\x3c\x87\x94\x82\x69\xc6\xbf\xb3\x81\x0a\xd7\x01\x19\x8d\x3d\x0f\x52\x33\xc3\xdc\x71\xba\x65\xd4\xcb\x49\x1c\xb8\xd6\x84\xc4\xd8\x4f\x36\x4f\x11\x7c\x15\x6f\x9c\xe1\x1f\xd2\xf8\x3b\xc8\xf3\x5a\xb1\x00\x10\x88\x5a\xdf\x65\x5d\xc9\x04\xe7\x4b\x65\x34\x0a\x33\x61\x52\x1c\xd2\x27\xee\xa1\x7b\x6e\x4f\x4c\xe3\x8c\x09\xa1\x9d\x69\x16\x80\xf2\x56\xbd\x6c\x33\xa8\xf5\xab\x46\x1b\xa7\xe9\x44\x39\xd4\x7c\xa3\xb8\x92\xe6\x29\xb3\xf4\xad\x53\x12\xfc\x84\x90\xac\x93\x43\xf5\xb5\xb0\xdb\x65\xc3\x47\x94\x5f\xa4\x9b\x4e\x2f\x70\x53\x73\x78\xe9\x93\xe9\x18\x60\x0f\x06\xba\x61\xc7\xfb\x77\xe1\x59\x91\xbc\x72\xcb\xb0\x5c\xda\xd1\xe6\x6c\x99\x2b\x65\x23\x4d\xfb\x1c\x03\xef\x32\x0e\xfb\x11\x94\x59\x71\xef\x37\x05\x27\xf9\x2f\xff\x5f\x04\xff\xe5\x8f\x76\x39\x5f\x57\x4e\xbe\x59\xf5\x75\x0e\x27\xdd\x8f\x26\xd5\xc1\x1f\xc2\x63\xbe\x9e\xff\x27\x05\x5d\xed\x4c\x8d\xb8\xd6\x0c\xa8\x94\xf5\x94\xba\x87\x27\x32\x2a\xa2\x16\xb0\xe6\x71\xc0\x50\x9f\x41\x0c\x30\x83\xbe\x65\xa4\xb9\xb5\x20\x06\xe3\x00\xe1\xa9\x35\x26\x6c\x66\x7d\xfc\x68\x33\xe8\xcd\x06\xf3\x1b\x4e\x3f\x00\xdf\x0c\x3c\x32\xff\xf8\xd1\x16\x4a\x8a\x8f\x1f\x6d\x0a\x02\x48\x8b\x6f\x19\xb1\xa2\x58\xeb\x95\xd9\x0c\x5a\x14\xcc\xa1\x05\x3f\x41\x2f\x66\x60\x1c\xc0\x7d\x1f\x30\x30\x06\x14\x0e\x8a\x90\x1e\x71\x00\x13\x70\xd5\x0c\xc7\xf9\x19\x4a\x6c\x59\x02\x5d\x88\xb2\x48\x14\x9a\x4a\xf7\x9f\x2b\x53\x18\xa0\x20\xb0\xc6\xd0\x0a\x61\xc4\xc5\x79\x0e\x0c\xb0\x3c\x55\x54\xc0\xa2\x37\x94\xc1\x79\xff\x1a\xf9\xd0\x92\x6b\x66\x01\x2f\x22\x94\x5a\x20\x08\x2c\x89\x1c\x5a\x06\x60\x33\x74\x67\xe2\xe3\x4a\xe8\x2c\x0f\x60\xa5\xf5\x61\x44\x43\x67\x01\x35\x66\x3f\x80\x57\x30\xd0\x20\xf5\x94\xa9\x2a\xba\x84\x7c\xe7\x67\x71\xed\xe4\xc1\x6b\x71\xb7\xf8\x33\x92\xd4\x76\xd3\x53\x2b\x82\x6f\x22\x29\x0e\x1f\x27\xab\xbb\xa5\xa6\x12\xf1\xa1\x8c\x78\x4e\x02\x08\xa8\xc8\xc0\x60\x01\x4b\xcd\xe4\x99\x84\x48\x18\xa0\xe6\x68\x1a\x01\xa1\xc4\x1c\x43\x76\x0d\x21\xb6\x28\x0c\x26\x7d\x19\x47\x89\xfd\x14\x3b\xc7\x01\x89\x7d\x11\x5f\xc9\xa1\xaf\x97\x56\x0a\x50\xbc\x62\x02\x43\x0c\x5c\x56\xa3\x99\xc2\x2b\x18\x81\xc0\x9a\x23\x1c\xb3\x8c\x6d\x42\x06\xee\xab\xb5\xe6\x04\xa8\x50\x1a\x46\x84\x4b\xaa\xd6\xff\xfc\xef\xff\x67\x85\x72\x9e\x9c\x44\x00\x13\x99\x85\xae\x67\x28\xc8\x34\xe7\x67\xa7\xdc\x16\x48\x24\x54\x09\x23\x32\x8d\x20\xcd\x8b\xaa\x5d\xa4\x2f\x10\x4d\x11\xee\x33\x12\xf6\x9f\x1c\x58\xea\xd7\x98\x30\x46\xe6\xfd\xc7\x07\xa5\x47\x90\x94\xbf\xbc\x19\xf4\x2e\xc7\xe4\x53\x2a\x81\x19\x79\x2a\xd5\x09\x25\xa1\x3e\x0d\xa1\x27\x74\x37\x0c\xc8\xd3\xe9\xa2\x85\x68\xfc\x5e\xb4\xd6\xf3\x9e\x70\x3c\x24\x99\x6a\x3b\xe4\xea\x6c\xd0\x01\xa4\x40\xbe\x8f\x31\x46\x78\xda\xf5\xf0\x9c\x3d\xe9\x72\x45\x51\x54\x1b\xc9\xb1\x5c\xbd\xe2\xd7\x00\xb1\xc1\xa0\x70\xdd\x58\x8e\xfd\x6e\x5c\xd3\x93\x53\xcc\x57\xaa\x7a\x9e\x2b\x96\x9a\xa8\x71\x64\xe1\x07\x2e\x27\x3e\x3b\x3a\xfe\xfb\x87\x13\xeb\xec\xc5\xdb\xa3\xb7\x67\x56\x4f\x6b\xfa\x54\xe1\x3c\xdb\xe5\x7f\x25\x11\xda\x8e\x56\xf2\xd4\x29\x83\x24\x66\xab\xd5\x41\xeb\x97\x9e\x3a\xda\x0f\x2a\x3e\xdd\xba\x95\xd2\x6b\x73\xfa\xcf\xd3\xb3\x17\x6f\x6a\x8d\x2d\xa7\xe2\xc8\x6a\xc6\x7c\xd5\x4e\x2d\x3d\x10\xca\xf6\xe6\x4b\xa1\x01\xeb\xba\x35\x1b\x24\xec\x49\xd6\x9f\x4a\x6d\x4d\xa9\x6c\x33\xd9\xb1\xe0\x73\x8a\xf1\x70\xb1\x8b\xb6\xd7\xc0\x96\xcd\xe5\x54\x33\x85\xb5\x4e\xa6\x92\xd5\xa4\x9a\x90\x54\x17\xf0\x58\x7f\xf6\x12\x05\x50\x39\x1e\x76\x51\x08\x54\xa8\x98\x6b\xee\xb6\x77\x73\x75\x52\x5f\xde\xeb\xdd\xe9\xbd\x84\x41\x26\x3c\x04\xd5\x82\x82\xd8\x3a\xea\x74\x33\xc5\x04\x3a\x23\x71\xe0\x5b\x04\x07\x37\x86\xac\x08\xf9\x13\x0b\xe0\xca\xfe\xe0\x3c\x64\x37\xa9\xa0\x93\x48\xb3\xba\xeb\xee\x49\xae\x9b\x26\x98\x4a\x22\x42\xae\xad\x02\x2c\x82\x7d\x99\x40\xcb\x9c\xa4\x8a\x22\xd2\x71\x15\x61\xe2\xea\x40\x5d\x4b\xa4\x2c\xa6\xae\xe5\x01\x06\xa7\x24\x42\x90\x0a\x19\x4e\x57\xed\xbd\x5f\xa1\x4d\x51\x58\x6b\xa9\x2d\x2a\x20\xeb\x3e\xc4\xb6\x0e\xec\x44\xea\x3d\xfa\x5c\xdc\xaa\xee\x23\xed\x46\x99\xf9\xea\x3b\x52\xc6\x40\xd3\xac\xa0\x77\xaa\x1e\x87\xbf\x00\x9e\x07\x43\x26\xcf\x7e\x7d\xf9\xdb\xff\x03\x85\xfa\xbd\xb8\x22\x86\x42\xf3\x2f\x98\x95\xdd\x3e\x29\x44\x1c\x06\x04\xa4\xe9\xd3\x95\xad\x42\x9a\x23\xcd\xa9\x36\x65\x1f\x28\xda\x51\xcb\xa6\x2b\x5b\x65\x0c\xad\xf9\xf9\x6a\x8d\xf5\x8c\x10\x0a\x4d\x19\xb7\x82\xbc\x1b\x23\xf4\xdb\x51\x4a\x4a\x18\x6d\x42\x91\x8a\x4c\x53\x4d\x63\xbd\xc7\x71\x82\x9b\xec\x79\x9c\x30\xd2\xb5\x1c\xc8\x79\x10\x4b\xe7\xb5\xe6\xa3\x59\x4f\xac\x78\x36\xeb\xb9\x69\xde\x22\xa7\xc7\xdb\x83\x88\xf1\xbb\x78\x64\x8d\x23\x72\x4d\x65\xa0\x22\x9f\xa3\x95\xf7\x98\x5a\x7e\x96\x1f\xc4\x66\x78\x0f\x81\x7f\xb3\x8c\xac\xbb\x51\x81\xf5\xbd\x34\x0d\x8b\xfd\xdd\xf6\x62\x61\x4c\xed\x99\x00\x49\x2a\xeb\x1b\x6c\xc7\x33\x72\xad\x56\xe1\x8d\x32\x60\x76\x16\x5f\xf3\xe7\x65\x89\x38\x5b\xaf\xf2\xe8\x64\x10\x68\x30\xd4\x7a\x04\x4f\x50\x34\xd7\xd2\xd3\x83\xad\xb6\x85\xad\xf6\x58\xe2\xcc\x7a\x9f\x4a\x9c\xeb\x33\xd7\x96\x30\x8a\x4c\xc1\x2e\x79\x74\xd1\x78\x3c\x47\x35\xee\x87\x36\xc1\x29\x74\x8d\x69\x62\x1a\x40\x6d\xe3\xde\xd9\x70\xde\xc9\xe3\x4c\x56\xec\x94\xd5\x25\xfa\xb9\xd8\x26\xa5\xac\xe3\xa7\xab\xf5\xfe\xc5\xe9\xd9\xbb\xf7\x2f\x94\x18\x35\x87\xd8\x93\x62\x91\x12\x9f\xaa\x8f\xb4\x02\xcb\xc9\xf9\x13\xa9\xb3\x5b\x52\xbe\x9a\x5d\x18\x00\x0f\xce\x44\x1d\xf8\xc4\xcb\x48\x64\x7c\x12\xae\x44\xf9\x0d\x92\x73\xfd\xb1\xe6\x24\xa6\x90\x45\x20\xb4\x4b\xa7\x60\xe4\x17\xe2\xbd\x24\x6b\xd2\xe0\xe2\x99\xc1\xe6\xd2\xde\x42\xff\x24\x71\xe6\x5e\xa0\xa5\x4a\x46\xf8\x95\x20\x27\xfa\x23\xc1\x2e\xbd\xe6\xda\x63\x77\x90\xee\xe7\x6b\xb4\xec\xae\xa0\xf6\x59\x7a\xa2\x5d\xce\xce\x86\x79\xa6\x94\xdb\x85\xe7\x6c\xc0\xd0\xbd\x5e\xf3\x76\x56\x77\xb0\x26\xfb\xb6\xbc\x57\xf4\xf9\x69\x76\xbf\xb6\xed\x57\x3f\x3f\xfe\xf0\xcf\xf1\xc9\xdf\x57\xb6\x6d\x87\x11\xf1\x63\x8f\xf5\x65\xc1\xe9\xae\xe7\xbb\xfc\xaa\xcf\x47\x8b\x69\x93\x82\x25\xd5\xe5\xca\xcf\x8e\xae\x00\x0a\xc0\x38\xf8\xff\xd8\x7b\xbb\x2d\xb9\x6d\x64\x5d\xf0\xfe\x3c\x05\x36\xf7\x9a\x9e\xee\xe9\x4c\xd5\x8f\x24\xcb\x72\x4f\x4f\x9f\x52\x55\xd9\x96\x5d\x92\xaa\x55\x25\xbb\xdd\xb6\xd6\x59\x28\x12\x99\x09\x17\x93\xa0\x01\xb2\xb2\xd2\x7b\xf5\x5a\xfb\x1d\x66\x5f\xce\x45\xbf\xc5\xb9\xef\x47\xd9\x4f\x32\x8b\xf8\x21\x41\x12\x04\xc1\x9f\xfc\x29\xb9\xf6\x39\xcb\xad\xca\x64\x82\x40\x44\x20\x10\x11\x88\xf8\x02\x75\x82\x32\x85\xe6\xe8\x3a\x4e\x0a\xbf\x71\x41\xd1\xcc\x9b\x78\x8b\x24\x89\xd9\x17\x07\x07\xab\xd5\xea\x89\x62\xf0\x13\x9f\x2c\x0f\x02\xb2\x8a\x32\x8b\x57\x9f\x71\xae\x2d\x25\x41\x80\x98\x23\xbf\x8b\x54\xf3\x04\x5f\xd8\xd2\xe1\x1b\x93\x93\x32\xfd\x4b\x53\xbf\xa5\xfd\xe5\x35\x01\x69\x3c\xa7\x30\x40\x13\x40\x11\x3f\xba\x00\xba\xc7\x22\x15\xff\x06\x47\x90\xae\x65\x26\xbf\xf0\x09\xd4\x84\x9f\x80\x37\xfc\xb2\x0b\xe5\x57\x5d\xa7\x64\xb9\x4c\x23\x9c\x88\xe7\xcf\xa3\x04\xd1\x98\x62\x86\x00\x0a\x30\x9f\x04\x60\x08\x2e\x43\xc4\x58\xb8\x7e\xd2\xbc\x73\x3b\xdf\x36\xb4\xc8\x4a\xce\x22\x65\x16\x48\x42\x9f\xe9\xdc\x70\xbf\x1d\x6c\x79\x5b\x88\xa3\xdb\x26\x6a\x37\x85\x86\x1a\xaa\x31\x62\x18\x19\x5f\x21\xc9\x59\x35\x77\x0a\xf2\x9f\x8b\x07\x4a\x99\x66\xc5\x26\xf0\xd5\x73\x17\x99\xbe\x49\x0c\xc9\x72\xff\xfa\x67\xf6\xff\xcc\xb3\x32\x6f\x83\x6c\xd5\x0d\xbb\x20\xdf\x01\xec\xe9\x14\xa5\xd3\x15\x62\xc9\xf4\xe8\x09\x5c\xc2\x5f\x49\x04\x57\xac\xbc\x31\xf2\xa7\xa7\xf9\x2c\xa7\x2b\x1c\x05\x64\xc5\xa6\x70\x19\x7c\xf6\xec\x09\xba\xd7\xd7\xfc\xbd\xf8\xce\x2b\xcd\xfd\x7f\xef\xcb\xcc\x43\x1c\xa5\xf7\x62\xde\xda\x9c\x2f\xb2\x4f\xf7\x74\xc6\x01\xa4\x2b\x1c\xd5\xa6\xbc\x84\xfe\xbb\xab\xd2\x94\xdd\x2d\xb2\x0d\x49\xbb\xa6\x5e\xec\xe2\x8e\xf2\x07\xf7\x5a\xde\x8b\x69\x3e\x38\x81\xd7\xa6\xfe\x50\x24\x5e\x9b\xf2\x06\x44\xbe\xd9\xbd\xe2\x66\xf5\x74\x4e\xe1\x7a\xfa\xfc\x30\x0f\x96\x97\x03\xa2\xf5\x2d\x92\xdb\x08\x69\x82\x43\xfc\x2b\x62\x40\x1a\x39\x19\x61\xa6\x09\xd1\xcc\x76\x15\xf0\x23\xa9\x30\xaa\xf4\x37\x7e\x76\x78\x98\xc7\x87\x33\x92\x45\x24\xc1\xa2\x5e\xd4\x70\xba\x26\x0b\x4c\x03\xde\x23\x67\xdd\xd6\x38\x92\xc4\x28\x02\x8c\xa4\xd4\x17\x71\x44\x61\xbd\x0e\x34\xcd\xe5\x07\xad\xfd\x23\x9f\x55\xfb\x47\xb6\xde\x2b\x14\xa6\x74\x43\x04\x48\x3a\x54\xe2\x41\xf1\x9c\x1c\x67\x27\xf9\xb2\xc5\x84\x47\x72\x26\xe6\x28\x42\x14\x86\xfb\xd2\xb1\xfe\xfa\xdb\x6f\xd9\xe7\xe7\x5f\x25\x3b\x4e\x97\xb5\x87\xa4\x5a\xc2\x50\x0c\x27\xe8\xba\x62\x67\x5e\xe1\x04\x81\x26\x60\x20\x6f\x50\x99\x5a\xf1\xba\x72\x7d\xda\x92\x04\xdc\xb5\x96\x1c\x2e\x8c\xdf\x7a\x7d\xda\x02\x32\x3e\xc2\xeb\xec\xbd\x63\x77\x99\x19\x1a\x66\x92\x25\xab\x80\x2d\x08\x4d\x00\x5f\x83\xa8\x10\x5e\x60\xe6\x10\x5f\x32\x7e\x30\x3e\xeb\x39\x59\x32\x56\xbc\x51\x65\x27\x65\xde\x6b\x1f\x9b\xd8\xdf\x14\x3f\xcf\x0c\x1e\x42\xa7\xcb\xe2\xd7\xfa\x5c\x57\x6b\x86\x57\xeb\x39\x90\xff\x3b\x15\x4f\x5b\x1c\x8e\xa3\x46\xd9\xd0\xaa\x65\xaa\xfa\xcd\xa2\xb3\xc7\xe3\xab\x7c\x3f\x40\xf7\x71\x08\x71\x24\xf2\x61\xf7\x85\xc1\x3a\x23\xaf\x79\x6d\xbf\x7d\x17\xa7\xf8\x80\x43\x00\x4c\x63\xec\xdf\x66\x07\x95\xda\xc9\x24\x3a\x15\x97\xc2\x1f\x65\xa5\x9f\x39\xce\xc5\xdf\x91\x3f\xe9\x5e\x49\xb8\xe1\xa5\x5f\x90\x39\x71\x14\x60\x8b\xfc\x35\x86\x19\x55\x78\x31\x0f\x37\xd6\xc3\x8c\x0d\x51\xc4\x6a\x50\xd5\xfb\xc0\x10\x38\x13\x87\x8f\xf5\x12\x43\x3e\x23\x17\x36\x66\x5d\xfe\xf0\x65\xe3\xc0\x61\xc5\x45\x2a\x9d\x27\x2e\x50\xc1\x29\x3f\xf3\x3c\x95\x5d\x90\x99\x0a\xa4\x11\xef\x7d\x13\xfb\xfa\x07\x99\xb3\xed\x8b\x2c\x82\x84\x00\x31\x13\x00\x01\x1f\x13\x64\x33\x92\x39\xdb\x9f\x3d\x8b\xef\xc1\x3d\xff\x9f\x7a\x54\xab\x6e\x57\x95\x8a\x64\xd1\x2f\x86\xa0\x5e\x48\x44\x86\x86\x6a\x50\x3f\x93\x4d\x81\xba\xd4\xc9\xf6\xbe\xa7\x6a\xb1\x0b\x08\x9d\x9f\x11\xd5\xa7\x58\xdf\x57\x1f\xde\x5f\x80\xab\xf4\x26\x20\x2d\x4d\x8c\xbb\xc2\x5d\x95\x2f\x9f\x32\x5b\xa1\x98\x42\xd9\x56\x50\xaf\xae\xf6\x09\x90\x25\xe1\x01\xf1\x99\xad\x67\xc0\x50\x91\x91\xcd\x39\x21\x45\x2a\x0b\x1e\x90\x08\xfc\xf4\x53\x66\xc5\x32\xbd\xc1\x10\xaf\x99\x58\xa0\x48\xd4\x4a\x28\x92\x01\xbe\x6c\x75\x17\x75\x83\x00\x43\xbc\xc9\xa7\x1c\xe0\xa7\x9f\xbc\x76\x9f\xa3\xbd\x17\xd6\x26\xd5\xab\x6c\x49\x2c\xa0\x83\xc0\x77\x18\xad\x78\xa8\xf7\xd5\x1a\x9c\x44\x24\x5a\x2f\x49\xca\x44\xff\xd1\x96\x83\x67\x00\x32\x4d\xdd\x24\xe0\x28\x32\xf9\xfb\x4f\x54\x12\xca\x00\x90\x1a\xe7\x77\xb8\xe1\xd5\x0c\x15\xbb\xab\x05\xe4\xd9\x2e\xfc\x0a\x5f\xb4\x26\x4c\x23\x98\x66\x02\x96\x60\x1f\x26\x28\x00\x99\x45\x07\xee\x30\xcb\xec\xaa\x3a\xf1\xb7\x64\x5b\x4a\x54\x0c\x12\xdd\x21\xca\x30\x89\xce\xa3\x80\x77\xd6\x28\xc5\x7b\xd5\x97\x1c\x35\x05\xfb\xa8\x8e\x8e\xd1\x5f\x91\x88\xd8\x41\xed\xf5\x6d\xfe\x86\x69\xc6\x46\xe7\xe3\xb4\xf6\xe0\x5e\x7a\x22\xba\xca\x53\x13\xe5\xae\xc8\x02\x46\x01\xaf\x05\xc3\xcb\xcc\x73\x3e\x10\x0e\xb4\x3c\xe3\x54\x74\x0a\xc6\xb8\x74\x03\x34\x31\x68\xd0\x72\xc8\xab\x1e\xde\x62\xe5\x3b\x24\x76\xf0\xfd\xdb\xf3\x38\x4e\xbe\xff\xe6\xe5\xc9\xc9\xab\xf7\xd1\x02\x1e\xc0\xa2\x94\x0a\x67\xa6\x49\x8a\x03\xc4\x0e\x82\x83\xef\xdf\x1d\xc6\xc9\xff\x7a\xf3\x37\x3c\x3f\x79\xf5\x19\xfb\xe6\x45\xee\xf8\x8b\xd6\x45\xfa\x2d\x05\x45\x30\xe0\x0a\x56\x65\xc7\xc0\x4a\x63\xac\x3f\x74\x8c\xdb\x6c\x6a\x47\x2c\xe1\xfd\x35\x9c\xeb\x53\x7f\x03\xef\xf1\x32\x5d\x82\xec\x63\x70\x89\x24\xd4\x14\x32\x37\xee\x56\xe2\x20\x1b\x7a\x29\x89\x39\x3a\x6e\xee\xbb\x95\x7d\xc7\xc5\x4e\x7b\xf5\x53\xb3\x71\xe9\x17\x86\xbe\x27\xa8\x97\x7f\xd4\x90\x2c\x23\xe7\x63\xe8\x25\xd5\xdc\x03\xea\xa9\xda\x7c\x6a\x3e\x1f\xcb\xd9\xa4\x6a\x1f\xeb\x60\x1e\x4f\xed\x01\xcb\x4e\xef\x7f\xe6\xf8\x7e\x3d\x9a\xfa\x6c\xc4\xf7\x3f\x77\x7c\xff\x73\xed\xfd\xcf\x47\x7c\xff\x67\x8e\xef\xff\x4c\x7b\xff\x67\x23\xbe\xff\x85\xe3\xfb\x5f\x68\xef\x7f\x31\xe2\xfb\x3f\x77\x7c\xff\xe7\xda\xfb\x3f\x1f\xf1\xfd\x2f\x1d\xdf\xff\x52\x7b\xbf\xad\x2f\x61\xd7\xf7\x1f\x1d\x3a\x4e\xe0\x48\x0f\xe9\x8b\x3f\x5a\x83\xe0\x23\x1c\x59\x5f\x93\x15\x58\xc2\x68\x0d\x92\x4c\x23\x66\x6e\xd9\x0d\x92\x7d\xc1\x05\x70\x2a\xcc\xb5\x3c\xf8\xbd\xba\xbb\x7f\xca\xef\xec\x8f\x0e\xf9\x8f\xda\xfc\xb2\xe2\xb3\x7d\xc1\x72\xba\x52\xa1\x6c\x2b\x9a\x93\x80\x69\xb2\xa4\x1b\x31\x2b\x8e\xd3\x66\xc3\xfc\xd5\xa8\xfc\x48\xc1\x7e\x1c\x25\x68\x2e\x2d\x83\x3d\x09\xf8\xcf\xbf\x24\x7f\xfc\xe3\xd9\x2a\xda\x52\xc0\xbf\x94\xeb\xda\x60\x6e\x2c\x8e\xab\x4f\x7c\x83\x29\xb4\xec\xce\xda\xad\xf6\x19\x66\x71\x08\xd7\x0c\x60\xc6\x52\x24\xba\x9e\xe3\xa8\xd1\x9e\x72\x4d\x39\x1e\x1a\x80\xf8\x19\x53\x58\xc1\xd3\x6b\x70\x12\x06\x5f\x4a\xe4\xaf\x2a\xfb\x08\xd9\xc7\xa7\x14\x05\xac\x40\x55\x74\x6e\x4c\x38\x54\x15\x7e\x99\x86\xe1\x1a\x64\x7a\x1b\xcf\x30\x0a\x80\x8c\x1d\x70\xe4\xfd\xcc\x88\xe7\xf5\x0d\x19\xa7\xf3\x50\x33\xd0\xf1\xf0\xb2\xa9\xeb\xa1\x88\x8e\x1a\x7c\xb3\x3c\x95\xfd\x5a\x74\xc6\x6a\x1f\x8d\x14\x4e\x2a\xf8\xaa\xc6\xb6\x30\x37\x7f\xfd\x16\x39\xfc\x43\xce\x41\x01\x43\xa2\x26\x71\x80\x9a\x40\xf1\x77\xc5\x30\x86\x7c\x8a\x74\xff\xbd\xa5\x7d\xe0\x20\x76\xc9\x97\xd5\xbb\x06\xea\x0c\x53\x33\xda\x22\xbb\xd4\x05\xd0\xc9\xe5\x6b\x70\x4d\x6e\x51\x04\xf0\x4c\x42\xa1\x9c\x24\xd9\x10\x18\x46\x12\x1b\x83\xd0\xbc\xc1\xa2\xc0\xd6\xc8\x91\x34\xb2\xa7\x6d\xea\xb9\xa5\x74\x6c\x50\xbd\x6d\xe3\x79\x71\x4d\x51\x18\x1a\xaf\x4a\x5c\x0e\x8d\x1b\x02\x69\xe0\x7e\x68\x8c\x53\x60\xd1\x22\xb5\x09\x5f\xd1\xf4\x16\xe9\xe5\x24\x27\x71\x0c\xbe\x45\x96\xfe\x4e\x03\x24\x57\x7b\x61\x59\xcb\x88\x2f\x94\xd8\xc2\x38\xe6\x33\xd8\x72\x83\x5b\x94\x97\xed\x5a\x23\x36\x62\xae\x3c\x54\x03\xe3\xb8\x42\x3d\xfb\x43\x2f\x5d\x0a\x1e\x9c\x82\xd6\x7b\x66\x9d\xbf\x2e\x6c\xd0\xa1\x16\x7a\x67\xac\x55\x6f\x03\x29\xfe\x26\x9b\x7a\x24\x73\x3d\xc4\x3e\x8a\x18\x12\x9b\x60\xa7\x56\x7a\x7a\xf1\x22\x5a\x87\x77\x5f\x6d\xd4\x4a\xf7\x2c\x37\x7c\x2c\xbd\x61\x3e\xc5\xd2\x35\xf7\x54\xae\x7f\x67\x0c\xdc\x06\x5c\x1c\x91\x18\x47\x51\xc0\xf3\xe2\xf4\xc4\xd2\x9f\xc9\x9a\xc7\x42\xf3\x3c\x84\x19\x45\x08\xc4\x21\x8c\xfe\xcd\x62\x3c\xc0\x52\xf8\x40\x68\x85\x1f\x8f\x5f\x4e\x7e\x6c\xae\x07\xe0\xe5\xc3\x24\x4d\xfe\x42\xd1\xec\xcf\x30\x8e\x7f\x17\xfe\xb9\x8e\x3f\x53\xba\xde\xfc\x1d\x0e\xf2\x47\x2a\xf4\xc1\xa2\x9f\xef\xef\x88\x61\x0c\x42\xe7\xaf\xe5\xd7\x69\xd3\xef\x19\x82\x89\xb8\xeb\xf9\x1d\x6c\x7a\x06\xf2\x36\x7f\xf2\x56\x2a\x7b\x12\x35\x3d\xa9\xe0\x3d\x6d\x81\xcf\x1e\x05\x48\x9d\x60\xfa\x3f\x88\xb2\x06\xf0\x96\x7f\xe8\x72\x1b\xee\x86\xa0\xe2\x28\xa6\x47\x23\x8a\xe9\x3c\x53\xb4\x15\x41\x7d\x8b\x7d\x24\xe0\xdc\x16\xf0\x0e\x01\x18\x01\xc1\x9e\xbc\x92\x44\x9f\xd9\xa3\xe4\x3e\x24\xc9\x15\x79\x40\xe0\x32\x84\xd1\x2e\x24\xf7\x78\xa3\x0a\xf6\xeb\xe5\x72\x22\x3c\x6f\x93\xa0\x82\x05\x64\x00\xdd\xc7\x98\x22\xa3\x67\xf4\x28\xb3\x7b\x2a\xb3\xef\x51\x84\x76\xa2\x67\x9f\x6e\x5e\x5a\x3d\x2d\x8f\xd2\xce\x24\x1d\xf1\x5a\xaa\xe3\x94\x21\x0a\x38\xb4\x37\x40\xf7\x3e\x42\x01\x13\x30\x43\x49\x82\x02\xdb\xc8\xb9\x88\x54\xd1\xc0\x41\x88\x97\xd8\x16\xc7\x78\xdc\x1c\xfb\xb6\x39\xa4\x29\xb2\x8b\xed\xf1\x6c\x97\xca\x1c\x33\x10\x91\x04\x88\xcc\x0d\x27\x81\x75\x28\xa3\x8d\x29\xf6\x71\x34\x57\xa2\x6a\x89\xc9\x3d\x1c\xb6\x0a\x36\x78\xbd\x2a\x5e\x3a\xde\x75\x6c\x2a\xca\xc9\xd2\x9b\x29\xd6\x43\x26\x22\x2d\x15\x51\xf0\xfa\x6c\xc4\x18\xa7\x48\x56\x21\x51\xc8\x63\x26\xea\xad\xe5\x80\x91\x59\x1f\x95\xd3\x1c\x5b\xc0\x15\x86\xc6\x8b\xfe\x9a\x12\x8e\xd4\x86\x19\x78\x7d\x26\x02\x98\xd9\xab\x33\xb5\xc5\x3b\xfa\xef\x49\x68\x3a\x23\x5f\xb5\x8e\x58\xb1\xad\xa5\xa9\xf5\x08\x8c\x33\xdc\x28\x54\x58\x67\xbe\x50\xd8\x34\xf3\xae\x17\x08\xdc\xa4\x0c\x47\x88\x31\x40\x68\x76\x5e\x33\x12\xc1\x50\xdc\x1c\x91\x19\xc8\x14\x9e\x2f\xe9\xb4\x47\x9c\x44\x95\xce\xcc\xa7\x42\xe2\xac\x2d\x99\x47\x62\x25\x92\xcd\x98\xe5\xff\x5a\x4f\xe2\x2d\x73\xf3\xfb\x05\xa2\x08\xac\x90\x80\x87\x64\x28\x0a\xaa\x60\x0b\x30\x0a\xc0\x0d\x0e\x79\x3e\x9f\xa8\x8a\xdc\xa7\xfd\x29\xcd\xa1\x5a\xc6\x5b\x63\x76\xf0\x78\x5c\x15\xaf\x9e\x78\x51\x2a\xda\x25\xb7\x98\x6b\x5b\x65\x2b\xbf\xfa\xe3\xf6\x70\x0c\xfd\x5b\x90\x9d\x8f\x1c\xbc\x2e\x8f\x88\x0c\xb6\xda\x19\x80\x09\x8f\x04\x2e\x89\x2d\xa1\xd0\x72\xdf\xb4\x91\x9a\x85\xad\xdc\xfe\x70\xee\x27\x90\xea\x37\x96\x57\x02\x00\xa4\x0c\xa1\x6a\x18\x76\x0c\xc1\xe3\xaf\x2e\x8e\x86\xcf\xc5\xa2\x60\xe6\x34\x4d\x39\x62\x4c\xb3\xe1\x4b\xb5\x46\xc3\x1d\x65\x72\x1c\x6d\x13\x71\x19\xfc\x3d\x45\x7f\x90\x49\x57\x25\x60\xdd\xe6\xbb\x9d\x2d\xb3\x17\x45\xfa\xbc\xb9\xff\x0e\xc3\xed\xb0\x37\x7b\x75\x0f\xe6\xf2\x19\xef\x8e\xb5\xd7\x1c\x47\x57\x90\x89\x9f\x1b\x64\x26\x7c\x1f\x18\x45\x29\x0c\x4b\xae\xcf\x3e\x32\x3c\x73\x9c\x74\x4b\xef\x44\x4c\xfb\x95\x38\xf9\x36\xce\x74\xf1\xfa\x06\xb6\xcb\x2f\xcd\x7c\x97\x13\xdf\xe5\xa6\x86\x1c\x0d\x15\xc4\x70\x0d\x10\xf4\x17\x60\x8d\xa0\x5b\x73\xf9\xb1\xe1\x8c\x36\xaa\xdb\xc9\x6c\x6b\xd2\xf0\xc0\x35\xfc\x0a\x01\xde\x10\x0f\xf8\x0b\x48\xe7\x28\x10\x8a\xc0\xa7\x28\xc0\x09\xf0\x21\x15\x40\xba\xea\x4b\x74\x87\xe8\x1a\x3c\x3d\x04\x01\x5c\xb3\xcc\xa4\xa0\x08\xce\x12\xb3\xef\xb0\x6f\x5a\xe2\x0d\x89\x92\x45\xb8\x06\x27\x4b\xd1\x9e\xf0\x51\x4b\x38\x69\x89\x94\x09\x45\xb1\xcc\xc8\xd7\x5b\x53\x34\xdc\x94\x1b\x56\x9f\x50\x0c\xc3\x4e\x49\x4c\x1b\x96\x23\x39\x21\x2d\x43\x0a\xc3\xf0\x2f\x1b\x97\x1f\xf1\x5a\x25\x3f\xde\x0f\xa8\x56\xd4\xe3\xe2\x98\x0c\x0b\xc6\x3e\x34\x43\x5f\x66\x9d\xe8\xa6\x81\x68\x7c\x8c\x49\x64\x4f\xf7\xd2\x98\x96\x11\x1c\x52\x04\x2b\x7c\x53\x0c\xa3\x64\xc5\xca\x20\x26\xda\x8b\x55\x3b\x54\x35\x8f\x8f\xbc\x60\xa2\x56\x37\x28\xbf\x1f\xbb\x48\x70\x3c\xeb\x10\x16\x64\xbb\x45\x6b\xae\x0b\x28\xf2\x11\xbe\x43\x01\xe0\x0a\x1f\x64\x1e\xc1\xd4\xd1\x1f\xd8\x4c\x4b\xed\x01\x19\x5e\x45\x3f\x6c\x7b\x0d\xc5\x45\x2e\x4f\xdd\xd2\xb4\x3a\xfb\xd1\x12\x1c\xce\x9c\x54\x26\x81\x1e\x3d\x1d\x2c\xee\x3c\xff\x81\x7d\x0f\x76\xdc\xd9\x7e\x48\xd2\xa0\x0b\xe6\x40\x0f\x5c\xab\x76\x6d\xd0\x52\x0f\xe1\x34\x46\x80\x0a\x19\x36\xb4\xaf\x31\x6c\x98\x5a\x56\xeb\x05\x4a\xb2\xd3\xef\x36\x22\x2b\x80\x45\x99\xff\x8a\x97\xe9\x87\xf8\x96\x83\x43\xf8\x21\x61\x48\x7a\x4e\xbe\xb8\x19\x25\x14\xf8\x1c\xf7\x58\x7c\xac\x9f\x6d\x4d\x8d\x56\x2c\x33\x78\x8f\x7e\x49\x11\x4b\x58\xd1\x71\x25\x8d\xb3\x17\x1f\x3f\x03\x0b\x92\x52\xc6\xbb\x55\x0a\xe4\xef\x96\xd1\xb7\x03\x92\xec\x9d\x72\x8a\x9c\x08\x62\xb4\x60\xb0\xf3\xa5\x65\x3f\x48\x47\x82\x45\xee\xd2\x16\xab\x9c\x6a\xda\x20\x4b\x5c\x01\x97\x04\x89\x8a\x59\x3f\xf6\x02\x70\xe8\x05\x20\x39\xac\xa4\x01\x14\xac\xee\x8d\x7b\x5e\xef\x09\x00\x2a\xff\xe7\xe9\xf7\x87\x4a\x92\x1a\xca\x9c\x49\x94\x69\xd1\x53\x0e\xa3\xcf\xdf\x9f\x57\x3b\xcb\x1e\x02\x95\x9b\xf6\xea\xbb\xb4\xf7\x75\xb5\x6b\x4c\x43\x69\xc3\x35\xa6\xb2\x2f\x04\xc8\x29\xaa\x00\x28\x2c\xeb\x61\x5d\xdb\x1b\x4a\xb5\x51\x0d\xe6\x4e\x81\xc0\xc8\xcd\x9d\x02\xfc\x9f\x2b\xbd\x7c\x16\x35\xd0\x95\xe7\x05\xae\xbf\x9c\x95\x61\x53\xb7\x2c\xbf\xbf\xe3\x82\x00\x0c\x57\x99\x6b\xba\x42\xa1\x4f\x96\x45\x0e\xe1\x0c\xa1\xe0\x06\x0a\x5d\x66\x27\x92\xfd\x89\x51\x1d\xdd\x47\x30\xff\xfd\x3f\xa7\xce\x94\xfa\xdf\x28\x74\x7f\xc5\x60\x74\x3a\x8b\x64\xe3\x0c\xf1\xc7\xe3\x81\xd4\x7e\x20\x9d\x69\xd4\x03\xf2\x74\x32\x27\x67\xf6\x3f\x8f\x5c\xac\x3a\x7e\xe1\x27\x2d\x09\x9e\x26\x7a\x23\x1a\x2c\x47\xa2\xb7\x72\xde\xd4\x5a\x18\x76\x28\x10\x30\x83\xe1\xba\x87\x01\x29\xd1\xa9\x16\xf0\x0e\x45\x3f\xfd\xe4\x25\x00\x86\x14\xc1\x60\x9d\xf7\xc9\xa5\x69\x04\xa0\x6a\x97\x96\x10\xa0\x30\x86\x79\x8b\x6c\x6e\xc2\x06\x30\x81\xb6\x1e\x81\x9f\xb4\xda\x7b\xf7\xad\x83\xca\x1b\xbc\xeb\xc7\x2e\xc1\xd7\x8a\x6f\x46\x2a\xe7\x61\x08\x52\x7f\x31\x95\x0a\x64\xb7\x9d\x3b\x3e\xbb\xb8\xbe\xf3\x5f\xf9\x7b\x54\x75\x3f\x34\x69\xc2\xda\x63\x53\xec\xcb\xa7\x87\xaa\x99\x26\x6f\xbc\x8f\x6e\x52\x1c\x0a\xa4\x23\xc1\x1a\xc0\x59\x63\xdb\xa7\x7b\xd3\x1a\xf9\x8a\x4f\xb8\x08\x75\xdc\x38\xb6\x98\xa3\x48\x88\x9f\x03\x52\xd6\xce\x76\x9e\xbe\x4f\xc6\xda\x7a\xcb\x24\xde\x17\xc4\x0b\xf6\xfc\x18\x7f\xf9\x65\xf2\xd7\x4f\x68\xef\x35\x86\x93\x33\xb2\xcb\x20\x77\x81\x48\xc3\x6c\x47\xde\x00\x1c\xec\xfc\x65\x66\x5c\xba\xec\x7b\x6f\xe2\x2d\x64\xff\xf6\x6a\x38\xf9\xea\xcd\xf5\x65\x36\xb7\xf3\x65\x9c\xac\x37\x10\x54\x76\x77\xcb\x34\x62\x71\x00\x8a\xe5\xfa\x49\x36\xe9\x27\x3e\x59\x3a\x9d\x92\x5b\xe2\x6b\xb6\x81\xb4\x9f\x5f\xca\x3f\x47\x44\x2f\x28\x5e\x63\xe5\xa8\x98\x88\x99\xa3\xd9\xac\x76\xcf\x51\xb3\xa3\xcd\x99\xfb\xfc\x73\x23\x1c\xd7\xae\x98\x9a\x32\x44\x4b\x79\xdb\x1b\xc2\x11\xd1\x5f\x66\x65\xae\x9a\xd0\x16\x71\x29\x38\x5f\x2e\x4a\x08\x22\x1c\x20\x26\x93\x27\xd9\xdf\x77\x9f\x58\x16\x6b\xd0\x21\x9b\x45\x13\x29\xbf\xae\x8e\x27\x52\xdd\x97\xf9\x2c\x76\xc3\x3c\xf5\xfe\x7d\x66\x1e\x43\x51\xd9\xbf\xbe\xe2\x1f\x8c\x9e\xa4\x9d\xb3\x4f\xbe\xb0\x92\x9b\x5d\xe1\x9c\x9a\x95\x59\xa7\x8a\x29\xee\xb5\x56\xcd\xf6\xed\xff\x64\x64\x89\xa6\x02\xe5\x69\xdf\xce\x4e\x41\xe0\xb7\xe5\x5a\x0b\xc9\xfa\x91\x2b\x2d\x2a\x9c\x7f\x5b\xaf\xb2\x30\x32\xff\xad\xac\xb5\xa8\x0a\x40\xf1\xed\xbe\xf2\x5e\x21\x35\xec\x13\xbf\x67\xbf\x04\x51\x9d\xd3\x57\xa2\x57\xbc\x00\x26\xfb\x6b\x0e\x4c\x26\x10\xda\x37\x26\x07\x7c\x2e\x56\x09\x10\xb3\xdd\xa2\xd2\xfe\xbd\xc0\xdc\x84\xe1\x1f\x84\x9e\xce\xfc\x76\x8a\x7e\x49\x31\x45\xa2\x5c\x50\x07\x6b\x9b\x80\x1c\x93\x7e\x6f\xf0\xd8\xf2\x1c\x5a\x05\xd6\x7e\x52\xa0\x88\x63\x12\x81\xdf\xbf\x9e\x47\x84\x22\x70\x4a\x51\x90\x7d\x0c\x43\x03\xae\x66\x8d\xb7\x23\xa0\xb9\x4b\x8e\x42\x35\xb1\x71\xf0\xdb\x0d\xa3\xba\x23\xb6\x6f\x93\x21\xaf\x20\x43\x9f\x3d\x03\xe7\x91\x4f\x82\x12\xf5\xb7\x49\xfc\x1b\x3e\x09\x9f\x23\x56\x8d\x49\xfe\xf2\xb8\xfb\xc9\x80\x0f\x0c\x81\xab\x2b\x07\x8c\xc9\xf1\xc8\x9d\x32\xc4\x58\x38\x2a\xa5\xf3\x21\x87\x11\x79\x5f\x20\xb8\xae\x44\xe9\x44\x29\x74\x78\xcd\x03\x0f\x2d\x70\xb8\x99\x72\xde\x31\xdc\x56\x29\x92\x37\x56\x74\x30\x86\x3e\x9a\x72\xe4\xfc\x1d\xc7\x06\x9f\x5e\x84\xe4\xed\xf5\xdd\x8d\x31\x36\xe8\xf1\x79\x7a\xb5\x10\x61\x25\x13\x98\xf7\x10\x69\xcb\xfd\xdd\xab\x60\xf6\xf9\xbd\x0a\xe1\xc8\x7f\x82\x93\x30\x04\xa7\xf2\xf6\xd2\x76\xb1\xac\x7e\xd9\x22\x92\xad\x09\x76\x4f\x2d\x65\xf4\xfd\x13\xec\xe4\x00\xa9\xd9\x26\x12\x52\x17\x62\x56\xb9\xa0\xf5\x44\xb2\x23\x82\xfe\xa2\x23\x53\x6b\x1a\x19\x37\xbf\xb8\x41\x97\x3b\x9d\x08\x38\x9a\x11\xe3\x9c\x6b\x2d\x48\x45\xeb\xd1\x89\xd0\xa7\xc2\x06\x9d\xf1\x6e\x44\x4f\xd4\x2d\x18\xe7\x2d\xa5\x70\x2d\x59\x7b\x34\xf9\x51\x96\xe8\xab\xbf\x58\x98\xce\x35\xd5\x6b\x6c\x50\x5a\x99\xbf\xd3\x2a\x2a\x95\xee\x96\x34\x53\x39\x8f\x8c\x6c\xd7\x99\x69\x6d\x4c\x30\xbd\xca\xbf\x56\xed\x7c\x5a\xf3\x4a\x9b\x26\x5e\x9a\x3e\x2e\xe1\xb7\xc8\xc9\xf3\xd9\xf9\x24\xf2\x61\xb6\x3f\xbc\x20\xdb\x9d\xc0\x6b\xde\x61\xdf\x13\x1a\x06\x25\x6c\xfa\x46\xde\x1b\x66\xf1\x6c\xe2\xc1\x24\x81\xfe\x62\x9a\x10\x12\x26\x38\x2e\x18\xcc\x16\x64\x75\x86\x42\xc8\x6f\xf0\x8f\x0e\x0f\x0f\xcd\xfc\x91\xfd\x8d\xa4\xe4\xb9\x81\x56\x36\x4e\xa7\x7f\x3a\x7e\x77\x46\x52\x92\x08\xe4\xff\xfd\xe1\xe5\x25\x22\x71\x88\x76\xc9\x4c\x45\x94\x87\xc8\x4f\x99\x85\xb4\x47\xdc\xa4\xac\x9c\x82\xbe\x6d\x6e\x2a\x38\x8b\x6d\x32\xd3\x42\x5f\x65\x99\x08\xde\x2a\xc8\x8f\xe6\x84\xb7\x86\xb7\xf7\x39\x11\x02\xc4\x7c\x3d\x4a\x43\x96\x08\x64\x9f\x29\x00\xa3\x64\x01\x13\x80\x79\xf2\xc0\x0d\x02\x2b\x4c\x79\x35\x77\xf6\x67\xb2\x40\x3c\xff\x47\x56\x51\x0f\x20\x82\x93\xb9\x72\x5c\x36\x57\xa4\x20\x88\xdf\x64\x72\x70\x03\xb5\x9e\xa3\x01\xa4\xb7\x9a\x21\x47\x21\x66\x28\xe0\xa6\x1c\x9d\x67\x7b\xe2\x86\xd0\x00\x49\x80\x3d\x4e\x66\x61\xad\xf1\xff\x14\x7f\x77\x3c\x77\x4b\xb6\xa5\x9c\xd2\x54\xd8\x90\x79\xa8\x4a\x6c\x00\x65\x68\xe6\xf2\x6b\xb7\x2d\xe5\xb6\x39\x09\x82\x0f\x4c\x85\xa8\x5b\xdd\xa1\xec\x71\xb0\x5c\x33\x14\xce\x00\x64\x80\xac\x22\x81\x5f\xd1\x68\x57\xbe\x53\x4f\x68\x06\x89\x53\xdd\xd0\x56\x89\x70\x86\x42\x94\x34\x68\xbd\x4a\xc6\xa6\x7c\x56\x6e\x72\x2b\xa4\xf2\x82\xac\x5c\x57\xde\x4d\xba\x9b\x37\x68\xdb\x9e\x39\x6a\x28\x75\x72\x6a\x4b\xd3\x94\x07\x2a\xec\xef\x80\xd3\x65\x33\xa9\x9f\x1b\xcb\xfe\x1c\x27\x01\xb4\x77\x0e\x28\x3f\x51\x01\x97\xa8\x66\x70\x83\x71\xd2\x3f\x1b\xf2\x58\xb2\x03\x97\x44\xb2\xc2\xc0\x9e\x79\x2c\xb6\x88\xd3\xe1\xea\x35\x64\x92\x9d\x50\x5e\xa0\x04\x58\x2a\xff\xb1\x82\x11\x6f\x30\x2a\x84\x47\x00\x7b\x71\x71\xe2\xb9\xa7\x30\x0c\x73\xd4\x7e\x66\xa9\x71\x75\x22\x92\x4b\x51\x67\x75\xac\xa6\xab\x08\x29\xeb\x42\xf0\x2b\xee\xcf\xa5\x48\x65\x4d\xd6\xb1\x54\x12\x02\xde\x2a\x21\x40\xa6\x48\x3b\x1e\xaf\xe6\x6b\x09\x79\x23\x51\x2a\x8a\xd0\x7b\xd3\xea\xb5\x11\xb2\x56\xb7\x3e\xd9\xca\x45\xd3\x92\xa4\x0c\x25\x14\xc6\xca\xc6\x03\xe2\x29\xd9\xd1\x96\xff\xfc\x4a\xa8\x3b\x65\x46\x74\xd0\xdd\xc3\x8a\x3f\x31\x13\x19\xc8\x52\x40\x4a\x12\xc1\x65\x24\x8f\x48\xa9\x36\x0f\x85\x0c\x19\xd1\x99\x9d\x0d\x1d\x57\x25\xdb\x79\x9f\xb6\xa5\x1a\xef\x4b\xb6\x71\x97\x22\x8b\x01\x75\x16\x5b\x2d\xb5\x68\x5e\xad\x6e\x02\xb8\x2a\xc1\xd6\xba\x13\xc7\x24\xf5\x96\x13\xb8\x03\xd6\x49\x93\xe2\xbd\xe6\x60\x6d\x90\x22\x10\x11\xc0\x16\x90\x2a\x9f\x93\xdb\xe0\x4b\x18\xc1\x39\x6a\x7f\xa9\x6e\x13\x8c\x9e\xab\x5a\x84\x8e\x47\x0d\x46\x73\x51\xd9\x75\xa6\xea\x67\x7f\xff\xfa\xf9\xed\x97\xdf\x5c\x99\xa3\xd1\x0a\x22\x75\xd4\x84\xd5\x4e\x9d\xf2\x9b\x63\xd2\x0d\xbb\xa6\xe6\x18\x34\x9a\xd6\xa7\x0b\xe4\xdf\xde\x90\x7b\x7b\x87\x92\x93\x20\x68\x6b\x50\xb2\x20\xab\x93\x20\x78\x23\x2d\xc9\xc6\x0d\x38\x4a\xa4\xda\x1e\x68\x16\x12\xd5\x1a\x6a\x56\xcf\x75\x00\xa4\x68\x88\x33\xe7\x18\xba\xbc\x85\x66\xb2\x0e\x51\xe1\x57\xdc\xcc\x05\x2f\x9a\x70\x98\xdb\x4f\xa5\x39\xc5\x01\xb7\x05\x20\x8e\x10\x9d\x7e\x36\x7d\x36\x24\xa4\x2d\x46\x43\x61\x38\x3d\x02\xc5\xbf\x97\x38\x08\x42\x7b\xa8\xbc\x5f\xc4\xa2\xf5\x08\x77\x9a\xea\xb1\x36\x55\xca\xf7\x86\x89\xbb\xe3\x86\x05\xc4\x3f\xb5\xff\xee\x59\x60\xe0\x3c\xc0\x89\x6b\x54\xe0\x83\x00\xfc\x94\xfa\xa3\x65\x17\x8b\x87\xc5\x46\x56\xcc\xfe\x44\x82\x02\x6e\x04\x10\x0f\x3b\x13\x60\x33\xb1\x81\xfe\x21\x03\xd3\xd5\x74\xc9\x30\x68\x8e\x14\xc0\x20\x10\xea\x73\xe7\x15\xa2\x40\xfc\x11\x3e\x88\x52\xd1\x93\x20\x00\x17\xea\x0c\xd8\x68\x75\xe8\x40\xe7\xb9\xc5\x6d\x2e\xd8\x5f\xf1\x99\x2d\x19\x7a\x1b\x70\x88\x2b\xd3\xb0\x78\xc3\x9c\xe8\x25\x6f\x98\xff\xee\xad\x8b\x13\xdc\xdb\x4b\x1c\x42\xeb\x1c\x83\x81\x9b\x04\x6e\x04\x4d\xf1\x81\xa0\x86\xe8\x46\x10\x63\xff\x16\x69\xc7\x1b\x89\x4e\x8b\x06\xfc\x16\xc5\x86\x12\xf5\xd6\x71\x9d\xa3\xb1\xdc\xea\x07\xe7\x53\xf7\x75\xa8\x37\xeb\x4d\xb7\x65\x46\xb9\x5b\xf4\xfc\x89\x9d\x83\x18\xa0\x00\x27\x8f\x67\x52\xf7\x33\x49\x9a\x7c\x9f\xc2\xb1\xa4\x89\xc0\x4e\xcf\xa5\xea\x3c\x1e\x0f\xa6\xc7\x83\xe9\xf1\x60\x1a\xfb\x60\x72\x68\x86\x2b\x74\xdb\x16\x0f\xa7\x3c\xb8\x20\x0f\x91\x42\x8b\xe0\x84\x1f\x01\xf2\xea\xe8\x14\x2a\x5c\x5a\x41\x3a\xb5\x76\xc6\xaf\x9a\xb3\x33\xd5\x57\x17\x89\xca\x25\xad\xc4\xb7\xdb\x7d\x59\x99\x27\x99\xfb\xa9\x67\xf2\x5c\xeb\x14\x18\xef\x18\x9e\x6e\xbf\x17\x94\xbe\xb5\xc2\xe4\xba\x29\x8d\x70\x54\xba\xaa\x52\x2b\x36\xc4\x8f\xf2\x3b\x44\x47\x98\xbe\xd1\xe3\xdb\x22\x26\x38\x52\x80\x3b\x65\x88\xee\x45\xb2\xf5\xed\xf1\xe7\x21\x7e\xf6\xf2\xdb\xed\x36\x35\xce\x84\x56\xea\x03\xcc\x4e\xd2\x64\x21\xdb\xe0\xd3\xa2\x6e\x4d\x49\x33\x66\x67\x29\x0c\xb3\x67\xdc\x13\xd6\x3a\x6b\xab\x0d\xd6\x19\xe4\xb9\x6d\x83\x0c\xee\x77\x31\x8a\x3e\x30\x44\x5b\x63\xe8\x96\xa3\x2d\x0f\xe3\x70\xe1\xdb\x54\xb2\xc7\xe6\xed\xe6\xd1\xac\xe7\xa1\x71\x1d\x5b\xbb\xa1\xd1\xcc\xe8\xd2\x40\xfd\xf2\x3f\xf2\x3c\x31\xd7\xec\x4a\x17\x63\x92\x92\x55\xdb\xa4\x9d\x06\xf3\x49\xe8\x36\x4e\xbb\x33\x10\xa1\x55\xb6\xce\x2f\x31\x65\x49\xc5\x1b\x28\x7d\xd6\x92\xc1\xd1\xe6\x1e\xe8\xe5\xa5\x6d\xee\x41\x6d\x4a\x39\x0c\x7b\x05\xed\x52\x7b\x42\xe8\x09\xf9\xcb\xec\xc9\x62\xee\xae\x31\x76\xb7\x4c\xd0\x5d\x30\xe7\x02\xd6\x78\xa3\x7f\xb4\x7d\xd6\xe4\x6f\x6f\xe2\x4c\xf1\x40\x95\x31\x21\xfc\x74\xf8\x72\x5e\x69\x94\x67\xc3\x5e\xd8\x30\x47\xce\xcb\x8d\xf3\xaa\xfc\x38\xd7\x31\x1b\x0a\x66\xe8\x4d\x6d\x47\xe3\x84\xe3\x23\x5d\x73\x95\xdb\x68\x68\x37\x5a\x94\xb1\x32\xc8\xd3\x72\xb0\x57\xc6\x88\x12\x96\xce\x1d\xf7\xfb\xc1\xee\x19\x00\x5d\x39\xb7\x7f\x07\xaa\x6b\x7e\xa3\x63\x50\x8c\x0f\x37\xad\x64\xf3\xbf\x4a\xc3\x5b\xf0\x21\x0e\x09\x6c\x82\xc5\x69\x16\xca\x96\x6e\x16\x15\x98\x67\x7d\x8f\x7f\xe4\x05\xb6\xe1\xad\xb0\x97\xf2\x8a\x5b\xf5\x41\xbd\x4f\xa2\xf7\x5c\x3f\xf6\x26\x40\x29\xda\x09\xc8\x77\x79\x87\x3d\x3e\x24\x8b\xf1\x94\x2c\x97\x70\x1a\x20\xde\x60\x1c\x05\x20\xc4\x2c\xf9\x02\xd8\xa6\x36\x96\x4e\xd9\x0b\x55\x20\x8b\xac\x46\x53\x05\xac\x8b\x2e\x68\xb5\xac\x87\x99\xdd\x0e\xb9\x9c\x7b\x13\xe1\x0b\x09\x43\x9d\xb2\x39\x07\xa4\x11\x98\x3e\xb3\xe5\x31\x6c\x0e\x03\xb3\x08\x92\x8c\x19\x75\xe1\x8a\x71\xd7\x59\x85\xec\xaf\x27\xf3\x98\xcc\x02\x73\x56\x61\x2a\x4c\x9a\x25\x12\x3d\x66\x3d\x75\x34\x6c\x2f\xcb\x70\xab\x01\x12\xa5\x65\x46\xc8\x31\xfc\x2a\xa3\x54\x7b\x90\xa4\x2d\x42\x22\x0e\xcf\xc7\x7a\x98\x8e\x01\x91\xaf\x94\x09\xb3\xb7\xa5\x30\x4a\x44\xba\x15\xc3\x6c\xa3\x2e\x25\x42\x2b\x29\x76\x5d\x2f\x32\x6b\x07\x55\x2b\x6e\xac\x83\x23\xa6\xcf\xc5\xe8\x19\x97\xee\x34\x79\x3b\x29\xc0\x7f\x02\x2a\xbe\xb2\x20\xf7\xb6\xab\x4f\x38\x3a\xd6\x1b\x9e\x1b\x4f\xd9\x04\x9c\xa1\x3b\x14\x66\x9a\x9c\x4d\xc0\x89\xbf\x44\xe0\x1a\xc1\xd6\x62\x1e\x47\x17\x62\xbb\xc2\x51\x31\xe8\xcf\xb4\xca\xdc\x02\x40\xac\x9b\xb8\x74\x31\xec\xcb\xd2\xc1\x27\x53\x67\x75\x9c\xd2\x58\x1a\x2c\x55\xc3\xfe\xa9\x93\xed\xde\xd3\xf2\x1b\xa8\x79\x1e\x4c\x71\x4f\x67\x6b\xf0\x01\xd7\xf6\x38\xb9\x16\x65\x95\xbe\xa5\xd2\x9e\x91\xea\x15\x9a\x33\xdc\x33\x33\xd5\x11\x1a\x47\xda\xb4\x63\xf4\x3a\x75\xeb\x9d\xe9\x8e\x27\xd3\x20\x53\x4f\x27\x4f\xcd\x75\x02\xe0\xf7\xe5\x47\x84\x11\xcc\x2a\x4f\xfd\x61\xac\xad\xaf\xeb\xd3\xe2\xa5\x9a\x06\x53\x2f\x6d\x1e\xfd\xc1\x22\x15\xd4\xf6\xf7\xee\x30\x0a\x84\xe2\x13\x10\x05\x92\xe1\x2e\x15\x45\xfc\x51\x2d\x1b\xff\xa9\x43\xb5\x7e\xe5\x2a\x7a\x9e\xc8\xc1\x2b\xc2\x76\xd8\x03\x1c\x65\x1b\x04\x7d\x8f\x96\xe4\x0e\x75\xa0\xa9\xf8\x81\x33\x59\xc5\xe3\xbd\x28\xdb\xb5\xd6\x61\x1f\xca\x60\x24\x91\xb2\x47\x85\xfd\xda\x4a\xa0\xec\xd1\x4e\x84\xd9\xc1\xca\x7b\xd4\xbf\xb8\x2d\xbe\x56\xff\x32\x9e\x5c\xb4\x45\x9c\x9e\xda\x8b\x59\xda\x1d\x7b\x59\x4c\xff\xe8\xdb\xf7\xe8\x77\xc6\x45\x64\xff\xdd\x7b\x31\xd1\x1e\x1e\x7e\x3f\xb8\x0b\x2e\x4a\x7b\x08\x6e\x61\x8c\x23\xe8\xe0\x16\x85\xa7\x3e\x16\xb8\x45\x97\xf0\x42\x7d\x96\xed\x11\x86\xaf\x6a\xb1\x85\x40\xe3\xf5\xee\xc0\x2d\xa8\x38\x5d\x05\x41\xe5\x19\xbb\xc0\x31\xc0\x51\x36\x84\x00\xbe\xe6\x78\x28\x8c\x11\x1f\xc3\x04\x05\x20\x46\x34\xf3\x05\x31\x89\xd8\x23\xcc\xc5\xa3\x27\xbc\x01\x94\x8b\x1d\xfb\xc3\xd6\x7a\x9d\xc7\xe3\xb7\xf3\xf1\xcb\x8d\xd3\xfd\x3f\x7c\xb3\x69\xee\x69\x70\x5d\x93\xbc\xc1\xd1\xf5\x01\x07\x5f\x75\x1a\xfd\x03\xeb\x28\xa7\xf5\x63\x64\x7d\x2c\xc9\xd8\x83\xd0\x7a\x75\x36\x06\x6e\x3f\x06\xd7\x1f\x4d\x8a\xad\x56\x54\xd5\xd5\xfa\xde\x18\x14\x62\xa7\x08\x13\x7c\x2a\x8c\xef\x7d\xb0\x2c\x7a\x16\x35\xec\xd2\xc4\x90\x41\x42\x11\xf6\x03\xff\xfd\x9f\xff\x05\x3c\xad\x38\x4b\xfa\x35\x95\x03\xc7\x1c\xb5\xd7\x9e\xcf\x84\x16\x45\x73\x5e\xb9\x53\x0a\xde\x6f\xc9\x8c\xe9\xdf\xb4\xa0\xc3\x60\x42\x06\x53\x86\x28\x9b\xe6\xe1\xe3\xb6\xfb\x9a\x22\xce\xdc\x1d\x7b\xbb\x65\x3e\x38\x41\x4b\xe3\x04\x76\x7f\xdf\xd0\xa6\x01\x77\x18\x2d\x57\xc1\xd0\x52\xb0\xdc\x6a\xed\x5e\x20\x78\xa7\xa2\x0f\xd9\x17\xc7\x13\x91\xb7\xf5\xba\x3b\x4c\x72\x3b\x45\xa4\xee\xaf\x1d\x0d\xdd\x8e\x04\x71\x00\xaa\xc9\xce\xd2\x30\x8c\xf4\x06\x77\x63\xae\x73\x00\xee\xb9\x2d\x06\x7c\xec\x00\x1c\xfe\x68\xdb\x8c\x60\xdb\x6c\xff\x14\x87\x41\xf0\x78\x84\x0f\x39\xc2\x4f\x82\xe0\x37\x72\x7e\xbb\xfb\x7f\x2d\xce\x9f\x8c\x45\x89\xd5\x4e\x45\xcb\x7d\x4f\x2f\x1a\x8c\x02\xde\x45\xd5\x5e\xe4\x39\x4a\x78\x60\xe2\xdd\xa2\xf5\x54\xac\xc8\x3c\xaf\xf6\x60\xc1\x15\x7f\x50\x45\xa1\x79\xd8\x99\xcf\xfe\xc9\x93\x27\xca\x93\x14\x63\xb5\xf6\x39\x23\xd1\x95\x22\x46\xa7\x74\xfd\x21\x81\x85\x9e\x45\x15\xad\x5f\x6e\xcb\x10\xe4\x8b\xf2\x51\x54\x3b\x0a\x46\xb2\xbf\x0a\xd3\x27\xb7\xc4\xf4\xff\x6a\x06\x99\xf7\x06\xde\xe3\x65\xba\x14\xdc\xe7\x97\x56\x98\xc5\xa1\x38\x23\x3a\x5a\x9a\x7d\xcc\x11\x86\x42\xd1\x2f\xa8\xa3\x65\xe2\x3d\x97\x16\x97\xec\x6c\xf3\x4c\x9a\x1a\x17\x78\x29\x2e\xf2\x9f\x7f\x54\xa7\xbf\xc5\x5e\xe1\x0f\xe7\x8f\x76\x2b\x15\xda\xea\x6a\x8f\x0e\x5b\x96\x7b\x74\xe8\xbe\xde\xfc\xd9\x3d\x5e\xf0\x71\x1b\x7f\x8f\x3b\x30\xf8\xf8\x01\x70\xf8\x79\x1b\x87\x9f\x77\xe0\xf0\xf3\x07\xc0\xe1\xa3\xc3\x76\x99\xee\x24\xd4\x0f\x60\xcd\xc7\xad\x5c\x3e\xee\xc2\xe6\xe3\x87\xc0\xe7\xe7\xad\x7c\x7e\xde\x85\xcf\xcf\x1f\x02\x9f\x8f\x26\x87\x2e\xd2\xdd\x4d\xbc\x1f\xc0\xba\x4f\x2e\x2e\x5a\x56\xfd\x32\xfb\x3f\xf7\x65\xeb\x8f\x8f\x10\x39\x70\xb1\xcd\xc7\xa9\x27\x1f\x3b\x0a\x28\x5d\x8b\x4f\x38\x06\x58\x64\xda\xca\x4e\x5a\x4c\x78\xa8\xbd\x16\xdd\xbe\x05\x1e\x64\xe0\xb0\x67\x87\xb1\x7d\x25\x5c\x9f\xa6\x74\xed\x44\xfb\x86\xe0\xa8\x13\xcd\xfa\xd3\x62\xdc\x58\xab\xde\x08\x53\xcd\x5c\x07\xf4\x99\x78\xa0\x58\x92\x0e\x28\xd3\xae\x4e\x3b\xd3\xc4\xd8\x17\x66\x23\x71\x5a\x53\xaf\x3a\x67\x9d\xfd\x18\xa7\xdd\x45\x9c\xd6\xc0\xd2\xb1\x4b\xf9\x45\x95\xd2\x98\xb5\xfc\xbc\x3a\x6a\xb7\x95\xfc\x9f\xcf\xf0\x0f\xfe\x9b\xf7\x2b\x73\x25\xbf\xcc\xaa\x57\x15\xfd\xe3\x16\xf2\x7b\xa5\x5a\x96\x3a\x98\xe2\xb7\x68\xed\x87\x04\xde\x3a\x9c\xb6\x7d\x8c\xa4\xfa\xeb\xd9\x3a\xf2\x5f\x47\x97\x94\xcc\x29\x62\x1d\xca\xd1\xfa\x43\x11\x0c\xd9\x6e\xf2\xc0\xba\x20\xfe\xad\x3c\xc4\x15\xc1\x78\xe0\x0c\x64\xab\x01\x34\x8d\x22\x1c\xcd\x9f\x3c\x79\x62\x48\xae\xe9\x7c\x30\x0f\x5b\xac\xe3\xe1\xf3\x03\x0a\x43\xb2\xea\xb4\xf0\xab\x6c\xa9\x2b\x9c\x2c\x40\x2e\x33\xd6\xe0\xf0\x3a\xf2\x0b\xe1\x1a\xf3\xb8\xe9\x00\x15\x7a\x71\x76\x72\x39\x1c\x26\xf4\x51\xe8\x33\x3a\xfe\x86\x05\x9e\x8b\x51\x9b\xb0\x0b\x59\x1b\x55\xd0\xfb\x7b\xa6\x2d\xb6\x0e\xba\x8f\x43\x88\x23\x81\xf2\x1a\x23\xba\x64\x6d\x77\xa1\x6a\x35\x47\xc7\xda\x6d\x06\x47\xaf\xfe\x38\xf9\xf1\xa9\x99\x2e\x09\x99\xcf\x43\x74\x29\x86\x37\x5b\x54\x97\x45\x9d\x03\x38\x17\x93\x42\x81\x79\x0b\x2d\xc8\x2a\x7b\x5a\x3e\xe5\xec\x1d\x7a\xd6\x1e\xf4\x2f\x5d\x5a\xcf\x9f\x50\x4a\x56\x57\x4b\x18\x86\x1f\x62\x99\x44\xcb\xd7\xd2\xab\x85\xe3\x66\x26\x76\x46\x56\x91\xfb\xd4\x74\x93\xbb\xc9\x0c\xb4\x48\x4f\xa3\xc0\xb8\xfd\xb4\x9a\x5e\xcd\x7b\xcf\x36\x5d\x9f\xba\x8c\x57\x49\xca\x3d\x85\x11\x80\x81\x6a\x80\x39\x01\x37\x24\x59\x80\x58\x75\xef\x87\x51\xa0\x3a\x64\xf2\xbd\x4d\x92\x45\xf3\xe5\x6d\x8f\xd5\x7c\x87\x19\xbe\x09\x9b\xf2\xc5\x7b\x2e\x87\x21\xd1\xb4\x97\x01\x32\x93\x37\x76\xd9\x3a\x84\xb1\x3c\x01\x3e\x8c\x40\x80\x19\xbc\x09\x11\x98\x11\x0a\xd0\x7d\x82\x68\xb6\x58\xf1\x68\x88\x6f\x11\x10\xf6\x21\xa2\xec\x20\x86\x34\x89\x46\x5d\xf3\x09\x07\x29\x1f\x75\xc5\xa2\x67\x29\x6f\x08\x0c\x59\x8c\xfc\x84\x2f\x5d\x41\x7f\x4f\xc4\x9a\x44\x2f\x60\x5f\x04\x0a\x46\x5b\x4c\x04\xc3\x75\x82\xfd\x91\x25\x32\x33\xd2\x01\x94\x63\xc3\x10\x50\xa4\xdc\x91\xb1\xe6\xed\x27\xf8\x6e\x64\xb9\x0b\xc9\x1c\x47\x2a\x49\x00\x14\xc0\xeb\x3d\x32\x7c\x7a\x9e\x64\x0e\x87\x99\x3d\xd5\x43\xb3\x2e\x8c\x98\x47\x5d\xf3\x2e\xcc\x00\xc0\x33\x1c\x26\x88\xca\x44\x10\xa9\xb0\xc5\x67\x2d\x39\x14\x5f\xf2\x87\xf2\x4e\x27\x2e\x98\xed\xbd\xb3\x27\x44\x62\x47\x17\x64\xca\xea\x07\x0e\xdc\xf8\x04\x52\x1c\x3e\xf1\x9c\x86\x4f\x3f\x89\xe1\xd3\xcf\x5a\xf8\xf4\xd3\x14\x7e\x13\x79\x09\xbf\x89\x44\x84\xdf\x44\xe6\xc1\x6f\x26\xd5\xe0\x31\xb7\xc0\x62\x14\x25\x99\x0b\x66\x36\x8b\xb8\x73\xc6\xff\x3b\xa5\x88\xc5\x24\x62\xf8\x4e\x7d\x20\x8c\x9b\x10\x31\xc6\x6d\x95\xa9\x18\xa6\x39\x22\x93\x2c\x10\x0c\xaa\x68\x24\x06\x73\x3f\xa1\xb6\x87\xf4\xf1\xcc\x40\x6d\x64\xba\xc2\x41\x92\xa7\x3b\x5b\xaf\xd5\xb4\x31\x6c\xb7\x0f\x0b\xc8\xae\xa4\x24\x7c\xe8\x91\xda\xd0\x1a\x2b\x14\x0d\x19\x9d\x03\x86\x1c\x62\x7e\x2a\xc1\x46\x4a\xd6\xbb\xe5\x22\x5f\x98\x97\x0e\xc0\x4a\x0a\x14\x47\xc9\x7e\xe1\x1f\x38\x00\x28\xbd\x4a\xc3\x8e\x81\xf3\x86\xeb\xd4\xd6\x1b\x51\x47\xf6\xb7\x85\x6a\xfa\x0c\x68\x8f\x96\xf4\x19\xb1\xcd\x7d\xef\x35\xa6\x25\xbe\xd1\x6b\x3c\x9b\xab\x3e\xc6\xb6\x74\xf2\xd0\xb5\x17\xf1\x6a\x8b\xc6\xed\xdb\x90\x90\xf4\xe3\x8f\x99\x5f\xcc\x77\x11\xcf\x29\x70\x0c\x78\xb6\x2a\x25\xed\xd1\xc0\x4a\x00\xa0\xf9\x9a\x00\x86\x78\x1e\x4d\x97\x38\x08\xaa\xaa\xb3\xac\x84\x44\x75\x9a\x96\x3f\xe1\x9c\x25\xd3\x1e\xb0\xe5\xca\xdb\x5f\x20\xff\xf6\x86\xdc\x83\xd6\xf0\xed\x5b\x92\x9c\x84\x21\x59\x71\xad\xd2\x37\xaa\x5c\x5d\x59\x7e\xce\x0e\x58\x9f\x21\xd8\xdf\x6b\x81\xa7\xf2\x49\xfe\xbf\xc5\x2a\xad\xd7\x05\xe2\x74\xc8\xeb\x08\xc7\x8a\xb6\x6f\x61\x95\x63\x2d\xcf\x34\x67\xa7\xcb\x23\x63\x26\x4d\xb3\x96\x31\xef\xb3\x8a\x4c\x8b\xa3\x36\xca\x6c\x13\x4d\xc8\xa0\x54\x60\x1f\x27\x1e\x8e\xc4\x1f\xfc\xf4\x54\xe7\x95\xcc\x58\xfa\xbc\x22\x9b\xa2\x99\x65\xf6\x2b\xfe\xaf\xd2\x4f\x3e\x76\x81\x82\x31\xdd\x46\xa9\x70\x68\x03\xf9\x0b\x60\xc6\xa2\x46\x55\xa4\x42\xb9\xe1\x83\x1c\x19\x8b\x62\xdd\xc1\x54\x1a\xaf\xe2\xf4\xa6\x5a\xc5\x4b\x54\x13\x9b\x16\x6c\x59\x07\x1e\x3b\x90\x4e\x41\x03\xb7\x10\x8f\x27\x92\x31\x0d\xd8\xb1\x81\x86\xd5\x63\x43\x3c\xd8\x05\x7f\xd8\x3c\x7f\x16\xc3\xa8\x0f\x1e\x71\x23\x37\x4d\xf0\xc2\xa5\xc4\x82\x88\x24\x53\xe9\x75\xf0\xa7\xb5\xd2\x68\xd5\x22\x84\x27\xe4\x89\x2c\x22\x97\xac\x82\x09\x68\xb5\xdc\xac\x69\xdd\x6d\xe8\x97\x1b\xa4\xea\xff\x1d\x11\x79\xe3\xf4\xff\xb4\xcd\xa4\x41\x17\xf5\xcf\xea\xdb\x86\x4d\x80\x02\x9c\x90\x1e\x69\xc7\xfb\x71\x6e\x9e\x8b\xd9\x9b\xf7\xe5\xa7\x71\x76\x0e\x58\xe2\x28\x47\xe3\xb8\xe2\x76\x87\x45\x5f\xc2\x1e\x2a\x71\x3f\x24\x2e\x6f\xd5\xf6\xc9\x0a\x5c\xff\x15\xee\xa1\xbc\xc1\xc2\x31\x7e\x98\xf2\x56\x78\xf6\x9f\xb2\xcc\x0d\x5b\xe5\x1e\xca\xdd\xa7\xeb\x6a\x2b\x77\xe6\x61\xee\x26\x3e\xf9\x4f\x7a\x27\x39\xad\xd0\x34\xed\xed\x79\xdb\x8f\x5b\xcd\x71\xab\xa9\x80\xc3\xc3\xdc\x6b\x62\xf6\x9f\xf4\x66\x73\x5b\xe2\x03\xdf\x6d\xfb\x82\x8f\xd7\x78\x09\xbb\xc3\xce\x28\xa2\x7c\xc9\xa1\x31\x4a\x55\x48\x3a\x95\x67\x6e\x63\xe5\x1d\xfb\x11\x31\x86\xe7\x91\xa8\x8e\xc8\xfb\xc6\xda\xa9\x60\x09\xa4\x35\xdf\xf7\x09\x01\xac\x46\x62\xfb\xa8\xfc\x2d\x91\xb1\x47\x83\x19\x27\x19\x92\xe3\x3a\x13\xae\x29\xdc\xd6\xb5\x15\x91\x4b\xbd\xa9\x1b\x1c\x61\x6d\xb4\xea\x20\x95\x04\x83\x92\xf6\x91\xd8\x75\x45\x02\x2b\xaf\xc2\xe0\x25\xc4\x33\x4c\x97\xa7\x30\x16\x84\xf3\xc4\xd5\xb8\xa2\x34\x5b\x90\x15\x67\xdc\x89\x20\xec\xc7\xc9\x8f\x8a\xea\x1f\x44\xe1\x61\x41\xd7\x16\x6e\x15\x05\x19\xe2\x27\x67\x12\x4d\xcf\xa1\xeb\x40\x11\xed\x6f\x90\x56\xaf\x67\xaf\x15\x4f\x83\xa6\x13\x1f\xc9\x55\x35\x44\xeb\xff\xd2\x1e\xc2\xac\x17\x9d\x59\x9b\x16\xf0\xd3\x75\x23\xb0\x84\x2d\x37\x08\x3d\x1b\x16\x38\x8d\x6a\xc7\x21\x74\x1a\xa2\x06\x42\x98\x31\xa6\xc4\xaf\x8c\x7c\x8a\x5b\x7a\xd9\xbb\x8e\x3d\xd8\xf0\xbc\x56\x0d\x6f\xbb\x29\x71\x9a\xa8\x1d\x72\xd0\x33\xb4\x3d\xd8\x39\x38\x21\x17\x3c\x8d\x66\x1a\x2c\xa1\xf6\xd9\x00\x54\xc2\x3c\x7d\x49\x64\xc9\x57\xda\x14\x14\x6f\xae\x25\xc4\x8b\x34\x79\x2b\x7f\x9d\x90\xd3\xfb\xc2\xf6\x8d\x4b\xe2\x42\xcc\xf2\xb1\x2e\xe0\x28\x04\xae\x94\x1f\x54\x08\x9c\xbf\xd7\x08\xec\x68\xa0\xaf\x8e\x0e\xf1\x70\xc8\x5b\xba\x03\x3d\x9c\x78\xe7\xad\x88\x8e\x43\x09\x2b\xde\xe8\x4a\x55\x75\x19\xdb\x91\xa4\x9e\x73\x9d\x72\x51\x59\x33\xa4\x56\x79\x23\xfc\x73\x64\x61\x0c\x19\x5b\x11\xaa\x97\x9b\x5c\x6a\x1f\x8d\xda\x3a\xa5\xc2\xcb\xfc\xd5\xd9\x09\x9e\xff\xd3\xc4\x52\xd3\x93\x5b\x6b\x8a\xf2\x4e\xb6\x07\x01\x11\x5a\x81\xd8\x91\x36\x5d\x6e\xf6\xb7\xc1\x66\x69\x64\x5e\xd6\xb9\x7d\x2a\xbe\x01\xdb\xe2\x7a\x75\x26\x5d\x98\x2f\x7f\x0b\x85\x21\xbc\x2d\x01\x50\x14\xea\xcf\xff\xe1\x49\x9f\x96\x8f\x07\x43\xe3\xd4\x7c\xca\x07\x80\x8b\xd3\xa7\x31\x4b\xef\x75\x8e\xda\x95\xe5\x43\x1c\xc0\xd6\x56\x6f\xea\x21\xa7\xac\xfe\x41\x60\x40\x2d\x1e\x52\x91\xef\xa5\x92\xad\x1f\x3d\x25\xe7\x9e\xaa\x1f\x2c\xf0\xe2\xe3\x79\x36\x9d\x5d\xee\x72\x56\x7b\x53\x8b\xd3\x47\x8d\xb3\xef\x1a\x67\xc4\xd6\x92\xaf\xd2\xf0\xb6\x1a\xe8\xd9\x99\xce\xd1\x11\xf2\x77\xae\x6e\xfa\x34\x8b\xd8\x8d\xde\x39\xca\xdb\x00\x14\x65\x3a\x0d\x71\xb4\xf1\xf4\x91\x67\xa8\x34\xe8\x9e\x30\xda\xf2\xf2\x39\xc5\x01\xa7\x17\xc4\x11\xa2\xd3\xcf\xa7\xc7\x8e\xce\xab\x7d\x40\x14\x86\x42\x60\xdc\xec\xeb\x71\x1a\x0d\x38\xce\x4f\xeb\x11\xb1\xc0\xdd\x52\x64\x3b\x61\xc7\x5a\xc6\x72\x9d\xa6\x1e\x5f\x39\xca\xd1\x2a\xcd\x89\xd6\x5e\xe5\xf2\x3b\x7b\xb2\x68\x7a\x38\x00\x36\xd6\x35\x2d\x76\x9a\xbf\x2d\xa7\xc2\xbf\xfe\xf9\xdf\xff\xf9\x5f\xff\xfa\xa7\x57\x9a\xbe\xd6\x89\xb1\xbe\x69\x3a\xc3\x18\x3b\x18\xf8\x7d\x1f\x74\x74\xd7\x36\xe8\xab\x16\x9b\xe9\x18\x14\xff\xa6\xfc\x44\xfb\x6d\x6f\x2e\x93\xb4\x6f\x08\x25\x79\x07\x86\x05\xc7\x3a\x6e\xb1\x2b\xf6\x09\x0f\x79\x27\xde\xde\x37\x44\x14\xce\x6c\x1c\xea\xb7\x4d\xf3\xec\x87\x36\x69\x0b\x8b\x34\x60\x0b\x3f\xfa\x22\x16\x42\x74\x32\xbd\x37\x82\xfd\x1b\x62\x96\x0c\x42\xfe\x55\xc6\xf4\x01\x0c\x82\x29\x43\x6a\x9b\xec\x12\xfa\xf7\xe8\xe7\xef\x5e\x7e\xed\xdf\x13\x33\xf4\x2f\xff\x8c\x83\x23\xa8\x4b\xf9\x76\xd4\x5f\x19\x4f\xc9\x17\xb8\x2f\xae\xcd\x67\x87\x7b\xef\xda\x1c\x4e\xbc\xd7\x11\x43\x34\x01\x57\x39\xc1\x37\x1b\x54\x31\x32\x2f\x42\xab\x9c\x79\x2b\xfc\x2b\x14\x61\xe0\x52\x76\x9a\xf1\x89\xed\x5c\x37\x3b\x80\xa5\x19\x1b\x94\x97\x91\xd3\x60\x9a\x90\x6c\x67\xca\x58\x40\x8e\x9b\xa6\xaf\x4c\x6f\x56\x1f\xa1\x95\xe4\xc9\x5b\xbd\xdf\xa8\x86\x1c\x51\x7e\xe2\x0d\x66\x0c\x47\x3c\xe9\xc4\xcb\xfb\xdb\x81\x52\xdb\x3b\xfd\x8f\x69\x38\xff\xe9\xa7\x04\x67\x0b\xba\x83\x21\x9f\xbf\xdb\xaf\x8a\x8a\x56\xd1\x66\x5f\xce\x5d\x36\xda\xf7\xc8\x6c\xd6\xde\x50\xbd\x16\xb5\x30\xb3\x2f\x35\xdf\x2a\x88\xb6\xf2\x0e\xad\x42\xe4\xd4\x2c\x1e\xb3\x29\x81\x8c\xa2\x04\xd3\x3e\xe5\xe2\xda\x8d\x91\x39\xe9\xd4\x8b\x29\x62\x28\x99\x8a\x05\x78\xb6\xea\x52\xb1\x2b\xaf\x72\x8d\x5d\x2d\x8e\x1e\x6c\x53\xfb\x62\x02\x1d\x1d\x56\xbc\x9c\x9b\x87\x5b\x8a\x30\xce\xd1\xc4\x63\xd4\x57\xe9\xb5\x07\x8a\x01\x07\x45\x6e\x9a\x54\x61\xd7\xd9\xbe\xc9\x96\xfa\x24\xe6\x32\x5b\xfc\x98\xa1\xa4\xcb\xef\xff\xe7\xf1\x7d\x31\x44\x5b\x6a\x6d\x47\xa3\xad\x9d\x8c\x75\x17\x3d\x9b\xa3\x84\x01\x76\x2b\x55\x76\xb3\xdf\x9a\x52\xf4\xb4\x64\xba\x1a\xac\xcc\xab\xec\x2c\xed\x5f\xdc\x74\x53\x86\xa5\x70\xb0\x5e\x6d\x3f\xb2\xb9\xf6\xd5\x7d\x7b\x33\x6c\xe2\x4d\xbb\x8f\x0f\xeb\xbe\xf9\x5e\x09\x53\x44\xba\x0e\xae\x5b\xaf\xb3\xc0\x1c\xf5\x17\x18\xcb\x7b\x74\xe8\xd2\xe2\x3d\xe8\xde\x47\x34\x4e\x9a\x82\x2f\x9c\x13\x30\x49\xa0\xbf\x98\xe6\x99\xad\xea\xa4\x93\xd9\x8d\x70\x2d\x8e\xe6\xc3\xc3\xce\xdd\xcb\xbd\xb6\xb9\x74\x16\x3a\xf1\xff\x2f\xd3\x9b\x10\xb3\x05\x0a\xc0\xcd\x1a\x94\x5f\xd2\x9a\x3d\x57\x6b\x21\xa3\x3f\x35\x01\xda\xf1\x9f\xe0\x25\x9a\xc2\x39\xd1\x42\x0e\x3e\x45\x50\x07\x16\x19\xa3\x9f\x77\x4f\x47\xae\x4d\xad\xfd\x66\xef\xa2\x60\xe4\xa3\xf0\xe1\x38\x80\x26\x87\x6d\x1c\x0f\x50\x68\x3f\xa4\x2a\xc6\x77\xe9\x02\xa2\xfb\xb7\xc1\xc9\xf7\x08\x1b\x5d\xc0\x2e\x7d\x5e\x4a\x6b\x32\x39\x6c\x47\xaa\x99\x94\xa4\x47\x7e\xc4\x88\xdf\x48\x2b\x82\x23\x37\xe5\xce\x19\x8f\x74\xfb\x88\xe7\xcf\xf0\x62\x95\x8c\x87\xea\x65\x6f\x48\x80\x44\x28\x4b\x08\x56\x39\x7f\x5c\x66\x5b\xe7\x6e\x5e\x9e\x19\xce\x07\xcc\xff\xe4\xe3\xe6\x7f\xf1\xe1\x0b\x49\x6e\x0c\x67\x29\x51\x6e\x87\xf5\xcb\x27\x64\x29\x9d\xd8\x98\xe0\xea\x3c\x19\x47\x72\xa5\xc9\x37\x0d\x71\x74\x8b\x76\x2d\xbb\x27\xf8\xea\xb3\x6f\x5f\x1e\x2c\xcc\xe1\x0b\x1e\xaa\x9e\x98\xfe\xa7\x55\xac\x8f\x84\x17\x59\x6e\x7e\xe6\x95\xd7\x2e\x22\x1b\x53\x4f\x97\xa3\x49\x39\xa8\xf9\x98\x3e\xd2\x1e\xeb\xb8\xc0\xd1\xed\xc6\x03\x1d\x0d\xce\x6b\x02\x6f\x22\x78\x97\x3b\xd7\x6d\xe0\xe0\x55\xa0\xc8\x36\x87\xd6\x96\xfa\xda\x60\x17\x0b\x5f\x2b\x81\x37\x15\x84\xaa\x67\xe2\xd3\xa3\xab\x02\x3f\x4d\x03\x2d\xd5\x41\xaa\x1a\x0d\xe9\x6b\x78\xa3\xe0\xbd\x8e\x34\xf3\xd9\x18\x6b\x6a\x71\x10\xca\x84\x38\xe1\x46\xaa\x58\xf5\x16\x69\x71\x3c\x0e\x2d\x8e\x35\x5a\x14\x2b\x71\x27\x47\xe3\x3d\x7f\xbf\x55\x3d\x1d\x67\x55\x4f\x4b\x1c\x86\xd4\x5f\xb4\xde\x58\xf4\x9e\xf2\xb3\x71\xa6\xfc\x4c\x9b\xf2\x5b\x94\xac\x08\x6d\xd2\x0b\xa6\xa0\x55\x7d\x8b\x66\x3e\x52\x9f\x3d\xda\xa2\x75\x8c\x87\x40\x9e\xb6\xe1\x12\xc2\x34\x65\xb3\x65\x5a\x10\x24\x04\xc8\xd1\x79\xf3\x17\x1c\x89\x16\x22\xba\xf6\x76\x2c\x39\x10\x36\x7e\x88\x59\x32\x8d\xb1\xcf\x0f\xea\x3c\x79\x39\x41\x4b\xe5\xfc\x7e\x89\x51\x18\x64\x36\x16\x8e\x34\xf0\x3f\x8f\x44\xf2\x9f\x85\xd1\x0f\xa3\x00\x07\x99\x51\x20\x2d\x31\xde\x32\x49\x15\xf7\xd9\x8d\x25\x86\x12\x31\x9c\xd5\x0c\xea\x19\x82\x69\xd6\xd0\x19\xfb\x7b\x6a\xa6\x9d\x4a\x00\x8c\x00\xcc\xa7\xdd\x5b\x0e\x2c\xd3\x5f\xe1\x60\x8e\x92\x92\x70\x38\x27\x30\x0c\x0d\x02\x97\xe4\x08\xf6\x3e\x37\x3a\xe9\x2d\x31\xb9\x1a\xe2\xe3\xb3\x32\x1a\x69\x37\xc5\x55\x92\xe9\x89\x1c\xae\x43\x40\xb8\x9d\x4b\x45\xa2\x7e\x42\xd3\xcc\x00\x75\x4c\x0b\xa9\x8e\xdf\x18\x24\x96\x31\xe7\x6a\x94\x18\x32\x86\x12\x76\x80\x97\xf3\x03\x8d\x3f\x07\x92\x7a\xb9\x1b\x30\xc3\x21\x92\xd5\xd8\x39\x35\xf9\xbe\xb8\x4f\xca\x97\xfa\xee\x91\xa3\xb2\x12\x13\x43\xd6\x62\x71\xae\x94\x6d\x2a\x73\xaa\xf1\x7d\x60\x7a\xca\xc0\x16\x69\xd7\x3c\x05\xc3\x19\x6d\xc3\x29\xfb\xaa\x4d\x75\x3e\xeb\x1a\xf7\xea\xf8\xfd\x38\xaa\x5b\x19\x2d\xfb\xa5\xb5\x37\x57\xc9\xe4\x6e\xab\xd5\x0e\x7b\xe3\x5d\x68\x73\x8d\x92\xf5\x2e\xb4\xd4\x4c\xaa\x42\x32\xd1\xa0\xc9\xcb\xcb\xa1\x8c\x75\x4c\xb7\x68\xbd\x22\x34\x10\xf6\x81\xfc\x03\xe4\xbf\x24\xb3\x99\x1d\x40\x41\x2d\xbf\x2b\xe8\xc6\x90\xca\xa7\x33\xa9\xd4\x80\xe8\x35\x25\x57\x3d\xd1\x8f\x61\xd7\x52\xda\x9a\xda\xd1\x2e\x34\xa5\xb7\xf4\x06\x26\xfe\x02\xf5\xbf\x50\x89\x1b\x00\x63\x32\x3b\x41\x8f\x19\xbc\x15\x9f\x80\x19\x49\xa3\xe0\xc9\x10\x7f\x66\xbf\x4d\x8a\xa5\xa4\x67\x71\x38\xed\xc2\x9a\x78\x3a\xae\x35\xf1\x74\x1f\xad\x89\x02\x95\xb8\x76\x2c\x9b\x2f\x8b\x8a\x1f\x14\xa6\xc1\x88\x27\xf9\xd3\xdf\xfa\x49\xfe\xb4\xf9\xd6\xb6\xd8\x15\xca\x5b\xdb\xf6\x8e\x38\x1e\x77\x47\x74\x4b\xb8\xd8\xea\x8e\x30\x66\x19\xd8\x76\xc4\xf1\xa6\x76\xc4\xb0\x0e\x0b\x9f\xc0\x8e\x38\x76\xd9\x11\xbb\xf5\x3b\x8f\xc6\xdd\x17\x1d\xb2\x21\xb6\xb7\x2f\xb6\xe7\x77\x1e\x8d\xef\x77\x1a\x73\x40\x86\xef\xcd\xa3\xdf\xfa\xde\xb4\x26\x4b\x98\x86\xe8\xf8\xfd\x38\x7e\x67\x1e\x79\xde\x2f\xc7\xb3\x16\x2e\xbc\x8a\x91\x8f\x67\x6b\x10\x89\xf9\x82\x80\xe2\x3b\x74\xc0\x5b\x87\x1f\xcc\xb8\x6b\x07\x42\xe2\x43\x4b\x1a\xb1\xeb\xfc\x3b\xfb\xb6\x1b\x70\x4b\x0d\xde\xa8\x5c\x78\xbe\x48\xbb\x5b\x2a\x9f\xbe\xc8\x49\xf2\x71\xe2\xa1\x27\xf3\x27\xe0\xa0\x44\x33\xd7\x9c\xd9\x12\xe1\xfa\x39\x9e\xdb\x92\x73\xfb\x90\x4e\x57\xac\x0f\x23\xb9\xe8\xa1\x17\xba\xbb\x16\x5b\x89\x7b\xf3\x96\x72\x2b\xf1\x90\xbc\x5b\xdf\x78\xa9\xfb\xc8\x59\x2b\xe5\x9d\x3e\x4e\xde\x8a\xfa\xc7\x7e\x24\x5d\xf9\x6f\x20\x5a\xbe\x3c\x8f\xdc\x92\xae\xfa\x25\x4e\xe5\x1a\xad\x9c\x39\xa5\x5b\xbf\x9d\x73\xa7\xe4\x98\x2d\xc9\x53\xe2\xaf\xb2\x99\xbd\xad\x64\xaa\x51\x05\xb1\x22\x34\x23\x4b\xa2\x60\xc8\x4e\xe5\xf0\x6f\x27\xdf\x5f\x5e\xbe\x38\x34\x27\xff\x79\x99\x14\xf9\x30\x71\xaa\xfb\xca\x73\x9d\xf5\xd5\x81\x88\x44\xd3\x98\xe2\xc8\xdc\x32\xb6\xcd\x15\x11\x46\x78\x61\xf2\x5c\x9f\x5c\x7f\xb8\x32\x2a\x26\x43\xfe\x56\xad\x4d\x5c\x01\x74\xa7\x75\xea\xd5\xf6\x4b\x88\x67\xc8\x5f\xfb\x61\x03\x26\xf0\x45\xfe\xf5\xc4\x3b\xa3\x70\xa6\xf9\x1b\x52\xd1\x4f\x03\xf1\xb1\xfa\xb0\xd0\xa5\x93\xb1\x27\x70\xa1\xc3\xcd\xe7\xef\x0f\x45\xdb\xce\xcd\xbf\xfe\x84\xfa\x0b\x7c\x57\x4a\xb6\x96\x53\x80\xf9\x37\x96\xbe\x79\x9e\x86\xe3\x61\x9a\x80\x38\xe9\x1a\xce\x2b\x6f\x94\xcc\xf8\x7c\x35\x5f\x00\xce\x4c\xf0\xaf\xff\x0d\x32\xa2\x66\xff\xab\xad\xae\xbd\x15\x5a\x4b\x22\x4a\x23\xb5\x63\x4a\x12\x95\x13\x61\x22\xf7\x65\xfe\xfd\xb5\xb0\x96\xdf\x92\x08\xb9\x83\x2d\xb6\x6c\x2d\xc1\x2c\x12\xa3\xa6\xba\xa3\x77\x97\xe7\x6f\xab\x26\xc2\x70\xaa\x9f\x2e\x60\x34\x47\xe0\x54\xd8\xe6\x5f\x80\x77\x31\x8a\x32\x8a\xcb\xc5\xa2\x80\xb3\x81\xc8\xce\x05\x4e\x7d\xe8\xdc\xad\xe1\x4d\x30\xe5\x3d\xba\xc3\x68\x35\x32\x5b\x62\x45\x8d\x06\xde\x5c\xbe\x7f\x77\x7d\x7e\x7a\x7d\x7e\xf6\xc8\xa0\x56\x06\x65\x73\x1d\x99\x3d\xa1\x5c\xbe\x91\x37\x17\xef\x4e\xbf\xfd\xe4\x18\xd3\x14\x2f\xe1\x3e\x36\xbe\x49\x33\x7a\x5f\x25\x30\x49\x5d\xe2\xa9\x4e\x34\xce\x7c\xf5\x59\x48\x56\x53\x26\x87\x6d\xcc\x3b\x96\x7e\x9c\x69\x2a\x8d\xc7\x47\xef\x6e\x2f\xdc\xac\x8d\x63\x4a\xee\x60\xe8\xbc\xe0\x71\xd7\x5c\x5e\x76\x75\x32\x6e\x1e\x5e\x97\xa6\x03\x16\xf6\x6b\xfb\x52\x59\x95\x23\x92\x43\x0d\xd9\x62\x43\x8a\xff\x7f\x2d\x1f\x1e\x7f\xe3\x5d\x2f\x30\x03\x98\x01\x08\xb4\x35\x6e\x64\x7f\xc9\x9f\x3c\x57\xc1\x05\x5e\xa7\x92\x39\xaa\xdc\xb1\xfb\x9f\x4c\x22\x03\x79\xc7\x87\x87\xc2\xdb\xcb\x4d\x8e\xee\xa6\xf4\xe9\xc9\xf5\xf9\x57\xef\xde\xff\x00\x0e\xc0\xf5\xc9\x57\xc6\xc0\x75\xa5\x78\x5b\x04\xae\x4f\x61\x82\xe6\x84\x62\xa7\x1b\xc5\xb6\xd8\x12\x4a\xe0\x54\x44\x48\xac\x65\x05\x43\xe2\xdc\x72\xbe\x6b\x73\xac\xbb\xb6\xa3\xe4\xd5\x5c\xf1\x23\xdb\x7e\x1a\x41\xa9\x6b\x2f\x1a\x43\xa2\x2c\xb7\x5f\x09\x9c\xff\xfa\x30\x58\x76\x0d\xe7\xce\xdc\xe2\x97\x5f\x9b\xe5\x91\x98\xce\x28\xec\x39\x6a\xaa\xa1\x48\x23\xc8\xbb\xf4\xd8\x2e\x86\xca\xbf\x88\x11\x5d\x62\xc6\x78\x86\x8c\x2c\x91\x7b\x03\x23\x11\x8c\xe9\xa8\x80\x4d\xc5\xd9\x68\x19\x27\x6b\xe0\xa7\x94\x11\x3a\x8d\x09\x56\x15\x31\x8d\x69\xfc\xe7\x01\x4e\x74\x69\xce\x9b\x69\x68\x2b\xeb\x7c\xee\x76\x38\x32\xf8\x84\xbd\x7e\xef\xb5\x70\xb7\xe6\xd8\x1d\x55\xae\x23\x19\x0e\xd0\x0d\xa4\xd3\x22\xd6\xa5\xb5\xdd\xd2\xcc\x56\x8d\x5d\x96\xe8\x5a\xe9\x31\x63\xc0\x36\xea\x73\x42\x6c\x2a\x28\x96\x8d\x30\x72\x48\x4c\x84\x2a\x77\x1a\x12\xfb\xeb\xd3\xb3\xd5\x2f\x27\x5f\xf9\xfd\xea\x61\xf3\xc2\xc1\x97\x32\x3a\x6a\xae\x0f\x54\x10\x1b\x01\x4c\xe0\x54\xfc\xa0\x5e\x43\x58\x3c\x21\x2e\xcc\x4a\xcf\x94\xa1\x37\x5a\xaa\xd5\x50\x80\x13\x5e\x2c\x3b\xf8\x04\x58\xad\x19\x5e\xad\xeb\xb5\x89\xb5\x0b\x92\xe6\xc0\xbb\x61\x7f\x6c\x23\x54\x9d\xbd\xfe\xb2\x14\xae\xe6\x54\x19\x14\xb2\x16\x4d\xe8\xda\xc3\xd6\x57\xf0\x0e\x89\x77\xdb\xef\x62\x86\x28\xc9\xb6\x30\xa8\x26\x3b\x09\xf1\x5f\x47\x01\x8a\x92\x53\xc6\xaa\xc2\x63\xe5\x25\x17\xe8\x05\x82\x01\x8e\xb4\x16\x5f\xe8\x3e\x86\x51\x80\x82\x1a\xff\x44\xea\x99\xa8\x42\x65\x3a\x9b\xc5\x3f\xf2\xa2\x71\x59\x8a\x29\xcb\xb9\x63\x14\x89\xf1\x9b\x34\xe8\xc4\xf3\x53\x4a\x51\xc4\xd9\xf9\x3a\xf0\xd4\x01\x94\xbd\x09\xcd\x28\x62\x0b\xf1\x11\x9f\x96\x10\x1c\x12\xaf\x2f\xc5\xd4\x48\xf4\x86\x48\x66\x14\x7d\xbf\xf2\x3f\x15\xa3\x4e\x98\x04\x1c\xf1\x48\x94\xfd\x7d\x81\xee\x50\x28\x7c\xf0\xfc\xb3\x2b\xf4\x4b\x8a\x22\x1f\x69\x1f\x5f\x15\x25\x67\xdf\xe7\xb8\x58\x52\xd8\x14\x91\x9c\xee\x4e\xf2\x12\x2b\xf1\xa7\x20\x60\xa3\x68\x2b\x72\xe6\x1f\xe4\x98\x2d\x93\xbc\x48\x4f\x6e\xff\xfc\xa4\x11\x34\xce\x3f\x68\x3b\x8c\x94\xbd\x56\x22\xbc\x7d\x8b\x38\x6d\x0e\xb9\x3e\xc9\xb6\x22\x9c\x6c\x7f\x3e\x67\x6e\xfb\x0f\x74\xee\x3b\x3c\x9b\x0b\x87\xc3\xb3\x9a\xec\x74\xd0\x01\x4a\xb4\x5c\x57\x5a\x15\x3f\x77\x1a\x19\x84\xd4\xfd\xc7\x06\x51\xb6\xf5\xc2\x34\x1d\x3a\x85\xc4\xbb\xa5\xd2\x0c\x3a\x7a\x6a\x4a\x4b\xe2\x75\x1c\xdc\x40\x86\xa6\x14\x45\x01\xa2\x7a\x19\xa4\xd8\x7d\xb9\x3d\x2d\x4d\xe7\xd6\xb4\x81\x8e\x89\x17\x0e\xd6\x67\xc5\xfd\xaf\x59\x98\x12\x8d\xce\x64\x61\xa6\x71\x48\x60\xa0\xf2\x02\xf2\x43\x3e\x57\xc3\xfa\x09\x8b\x85\x0a\x26\x51\x51\x13\xf9\x81\xff\xbc\xf2\x61\x8e\x8f\xff\xa3\x27\xbe\x07\x7a\x11\xe5\xa4\x66\x4f\x18\x95\x59\x5d\x9b\x38\x9e\xac\x4a\xfa\x6a\x93\x74\x17\xdc\xfa\x52\xec\x6d\x4b\x37\x96\xc5\x50\x32\x6a\xcd\x76\xf2\xff\xe8\x6b\x27\xe7\x3d\x7e\x77\x6a\x2a\xc7\x3f\x1c\x04\x57\xcb\x67\xdf\x59\xe0\x37\x6a\x06\xf3\x98\x6d\x8a\x1b\xfe\x6b\x70\xe4\x9b\xae\x16\x60\x1c\xbf\x11\xb6\x4a\x26\xd2\xb6\x6b\x85\x20\xe5\xa5\xd1\x1c\x66\x31\xa6\x98\xa1\xf3\xfc\x07\xf6\xcb\x05\x9b\xe3\xae\xf8\x29\x9b\x19\x5b\x70\x11\x4b\x5d\x70\x03\x4a\xe2\x80\xac\xb4\xc4\x23\x95\x68\x04\x29\x25\x2b\xbe\x79\x4f\x64\xe1\xbb\x4c\x87\x32\x0d\x2a\x23\x23\x31\x89\xc9\x9d\xae\x1a\x95\xc2\x5d\xe0\x00\xbd\x8b\x64\x73\x56\xfe\x0f\xcc\xb2\x63\x41\x74\x67\x15\x8d\x2b\xc4\x18\x88\x66\xa3\xc4\xdc\xb6\xf3\x43\xec\xdf\x02\xfe\x5f\xc2\xd3\xf1\xf8\x3f\xbd\x46\xd6\x34\xe6\x53\x36\x14\x06\x2d\x51\x94\x3a\x26\x4d\x36\x61\xcf\x29\x0c\xf3\xc6\x70\x46\xb6\xca\xf7\xd9\xc9\xc9\x92\x53\xed\x62\x41\xb4\x44\xd6\xec\x65\xf9\x0c\xd0\x6f\x1f\x1c\xb3\x2d\xc7\x98\xdb\x97\x08\x05\x37\x90\xe3\x20\x99\xe7\x35\x93\x0f\x6c\x71\x4e\xef\x11\x0c\x1a\xe7\x43\x11\xac\x05\x64\x9c\xee\xfd\xfa\xe7\x66\xf4\x47\x2d\x34\x25\xb7\x60\xde\x0f\xd1\x25\x85\x73\x24\xaa\x4a\x38\xbd\x46\x8a\xc6\xd9\xf7\xa6\x34\xdf\xbe\x25\x7e\xc3\x57\x3e\x7c\xd9\x90\xa2\xda\x82\xf9\xa7\xe0\x0e\x43\xc0\x90\x9f\x52\x04\xd0\x7d\x82\x68\x04\x43\x10\x36\x03\x08\x0d\xbd\xfc\xea\xf7\x79\x45\xb6\xbb\xeb\xee\x53\x89\xb6\xf4\xa0\x74\x77\x57\xad\x5d\x77\x18\x62\xcc\xaf\x6e\x79\x04\x8c\x5d\xe2\xc8\x1a\x0f\x6f\x3c\x36\x7a\xcb\xdd\x87\x28\x96\x5d\x0c\xf2\x3d\xb6\x24\x77\x08\xdc\x10\x72\xbb\x84\x36\x30\x9a\xfe\xbb\xa7\xc7\xfd\x33\x43\xdc\x7c\x10\x19\xf2\x0b\x14\x25\xd9\xf6\xdf\x2e\xa5\x2e\xcb\x74\x7a\xb5\x41\x02\x95\x87\xe8\x7e\x6d\x3d\xb2\x36\xa6\x38\x4a\x6a\xaa\x89\x7f\xda\xbc\xf8\xa1\x2f\x3e\xe7\x06\xbe\xfe\xc2\x33\xb2\x8a\x84\x57\x64\x3d\x4a\xb5\x7e\xbe\x66\xb3\xf3\x24\x08\xcc\xf1\x9e\xe2\x91\x53\x12\xaf\x7b\x1c\xa6\xbd\xb7\x43\x4d\x27\x58\x26\x3e\x1e\xd2\x98\x1b\xf7\x55\x92\x41\x4d\x00\xae\xf3\xcc\x80\x7e\x18\x6a\x0e\xa4\xdf\xde\x2a\xcf\xd2\x98\x5b\x14\xf5\x65\x8a\x09\x0d\x3b\x4b\xdd\x96\x5e\xf1\xdc\x37\x27\x70\xdd\xe9\x07\xa4\x07\x6a\xa7\x21\x9f\x7f\x8d\x80\x45\x6c\x65\x68\xfd\x4e\x1f\xc2\xb7\x6b\x09\x0e\x99\xe5\x27\xf8\x0e\x27\x6b\x0d\x2f\x95\x1b\xf7\x77\x98\x95\x80\xd4\x46\x75\x56\xbf\xc6\x2c\x21\x74\xfd\xb0\x0c\x9e\x51\x6c\x9e\x0a\xc9\xbb\x6e\xf6\x67\x99\xb0\x46\xb7\xd3\x84\xd4\x29\x42\x49\x2a\x03\x79\x12\xfa\x54\xed\xae\x27\x50\xe3\xb1\xe1\x55\xba\x08\xb4\x09\x93\xeb\x3e\x37\x0b\xd1\xa6\x17\x4a\xb5\x37\x9a\xde\xa5\xcf\x68\xc0\x52\x0d\x52\xb1\x09\x7f\xa3\xeb\x29\x69\x8f\x2a\x95\x62\xd4\xa5\xaa\x36\xb5\x73\x45\x99\x75\x5e\xb9\x29\xd2\x73\x54\x89\x5b\x9e\x4f\xc3\xf9\x72\x4d\x3c\x63\x6d\x9b\xcc\xe9\xb9\x42\x49\x82\xa3\x39\x33\x7b\xef\xb5\x02\x38\xef\x3d\x12\x50\x3c\x45\xba\xd9\x04\x5c\xc3\xf9\x04\x88\x3c\xc7\x09\xf8\x5e\xe6\x4a\xea\xcc\x66\xc5\x4b\xdc\xb1\xdf\x5d\x68\xdd\xd4\x28\xa7\x88\xc6\xca\xf3\x7f\xe7\xbd\x8e\xaa\x03\xee\x23\xec\xef\x15\xbc\x43\x00\x32\x60\x36\x9a\xba\x0d\xee\x84\xfd\x3b\x23\x74\x59\xba\x12\x27\x11\x4b\x6f\x96\x38\xb1\x23\x51\xc1\x3b\xa4\x4d\x51\x0a\xcb\x96\x9a\x1c\xd5\xd0\xc1\xb2\xa1\x66\x7c\x93\x44\x68\x55\xc8\x9b\xde\xc0\xe2\x70\xe2\xbd\x75\x44\xa9\x92\xbb\xdd\x54\x9a\xad\x6a\xb1\x2b\x25\xda\x7a\x69\xf6\x47\xd1\xed\xa8\x32\x0b\x65\x2c\xe8\x64\x9b\xe4\xfd\x51\x3d\xb4\x84\x38\xac\xd4\x66\x83\xbc\xc7\x91\x57\xd8\xd0\x12\x6a\xcb\xa1\x00\xdb\x1b\x08\xfb\xf5\x15\x21\x01\x48\xf4\xd7\x02\x9f\x44\x77\x68\x5d\x20\x6d\x02\x4e\x06\xf7\xd8\xd2\x3e\xc8\x84\xde\x6c\x84\xdb\x9c\xcc\xa7\x38\x76\x8d\x4c\xab\xfe\x1a\xe8\x3e\x81\x14\xc1\x06\xe9\x28\x4e\xde\x15\xab\xcb\x03\x9f\x81\x59\x1e\x02\x7d\x36\x1f\xab\xa5\xfa\xde\xf3\xad\x30\xfe\xfc\x3e\x0e\x21\x8e\x40\xca\x10\xf0\x21\x43\x60\x46\xa8\x40\x58\x4d\xec\x3a\xa9\x8d\xe5\x16\x55\xf6\x69\x97\xde\xbb\xf6\xf5\x78\xf0\xb5\xf7\x57\xed\xcd\x60\x8d\x07\xc7\xee\xda\xcc\x17\xb7\xd0\x14\x47\xc9\xa3\x85\xe2\x60\xa1\xd8\xe2\x79\xe3\x99\x25\x35\x44\x17\xfe\x5a\x00\xc3\x30\x07\x01\x27\x14\x88\xc2\x0b\xd5\xd7\x8f\xd5\x70\x1c\xeb\x99\xfe\x2d\x78\x6f\xb9\x7f\xee\x2f\x90\x7f\x7b\x43\xee\xb5\x8c\xf8\x02\x88\xaa\x68\x5b\x9e\x4d\x4a\xc3\x77\x77\xed\x33\xe5\x95\xe0\x94\x64\x3e\x4a\x94\x66\x6e\xb8\xcc\x3b\xd3\xf6\xc3\x13\x60\x7c\xbc\x01\x84\xc9\xdd\x98\xff\xcd\xf6\xd9\xfd\xcd\xe8\x63\xb9\x55\xad\x0a\xf9\xb2\x10\x61\x37\x04\xfa\xad\xa9\xe4\x80\xc7\x03\x1f\x75\xb2\x83\x4e\x16\xa1\x53\x70\x66\x87\xc0\xdf\xa0\x76\x3e\xa1\x08\xac\x49\x0a\x58\x2a\xff\xb1\x82\x99\x7f\x40\x80\x60\x62\x19\xa1\xff\x2f\x8f\x96\xe0\x43\xd5\x3c\xef\x45\x8a\x76\xcb\x3a\xf3\x0b\x0a\x6b\x7e\x70\xe5\x36\x63\x8f\x14\x8f\xba\xe3\x79\xd4\x3d\x2e\xba\x47\x51\x6b\x4f\x43\x55\xfa\xfc\xf6\x26\x4e\x55\x88\xd8\xce\x82\x54\x95\x29\xa8\xdc\x64\xf5\xe9\x5b\xe7\xd8\xd4\xdb\x6d\x85\xa4\x4e\xf3\xee\x3f\x61\x08\x6e\x10\xc8\xe7\x1a\x94\x1a\xc1\xc8\x0e\x86\x8f\x31\x8a\xdf\xd4\xc9\xe4\x6a\x13\x6b\xea\xc0\x7e\x3c\xd5\xd4\xc6\xc3\x41\x08\xac\x26\xc2\x8f\x5b\x86\xca\x78\x27\x83\x1d\x27\xd7\x27\x17\x6f\x4e\xbe\xfc\xf6\x6f\x5f\x9b\x93\xeb\x03\xe2\xef\x4b\x6e\xbd\x70\xad\x6b\xb2\xaf\x6e\x11\xab\x7b\x20\x59\xa0\x25\x7f\x77\x1a\xc7\x88\xfa\x90\x21\x85\x0a\x6d\xdc\x0f\x5c\xd8\xc5\x04\x1a\xaf\x17\x4f\x28\x25\xab\x0b\x34\xab\x35\x79\x2d\x2e\x20\x6c\x01\x3b\xa9\x4d\x2d\x35\x22\x35\xdc\x13\x97\x00\x8b\xe5\x1a\xd5\x76\x57\xca\x17\x73\x95\x9d\x20\x67\x3c\x7b\xc1\x14\x72\x19\x94\x0f\x21\x0f\x4a\x65\x66\xf5\xcb\x8d\xc8\x44\x26\x49\xc8\x72\xba\xc4\x41\x20\xa2\x34\x9b\xc9\x95\x28\xc5\xb6\x5a\x29\x5f\xa4\xb5\x44\x24\x99\xca\x5c\x72\x11\x54\xc2\x41\xa9\x3e\xe9\x75\x30\x28\x47\xbc\x3d\x1f\x81\x9f\x8e\x28\x14\xf7\x23\xd5\xc4\x04\x69\x51\x0b\xa9\xa4\xd9\x09\xa6\x81\x84\x67\xf2\xa8\xaa\x2b\x1b\x3f\xc2\xe5\x07\xc2\x74\xae\x17\x3a\xd5\xd6\x52\x04\xd7\xca\xad\xd5\xfb\xa7\x3d\xb8\xc3\x7b\x1b\x4e\x82\x8d\xe6\x5f\x6f\xe4\xa4\x11\x67\xc2\x38\xe7\x4c\xb9\x8c\x7a\xa7\xa7\xcc\x37\xcf\x2f\xcf\x6f\x56\x6f\xbe\x1d\xdc\xfd\x7b\x4e\x71\x50\xa0\x9a\x4f\x3f\x9f\x1e\x77\x75\x0b\xc5\x08\x28\x0c\xa7\x47\xa0\xf8\xb7\xd2\x2f\x9d\xfd\x41\x55\x38\xa9\xe8\xdc\xcb\x23\xcc\x39\xd5\x66\xdf\xbe\xe0\x28\x2c\x51\xf3\x20\x22\xf6\xad\x06\x39\x2a\x17\xe4\x1b\x03\xe3\xd6\x6c\x62\xfb\xcb\x4a\x70\x4f\x95\x77\xd5\xa2\xea\x8e\xde\x40\x8b\xb9\xd7\x85\xbf\xc7\x1a\x7f\x69\x66\x92\x6c\x80\xdf\x20\x22\xe2\xca\xcb\x33\xc3\x72\xa8\xd3\xb9\x11\x9e\xa3\xbb\xb0\xa8\x19\x28\xeb\xab\x25\xf5\xcf\x87\x91\x63\x86\x56\x75\x02\xb6\xae\x23\x30\x08\xa6\x72\x22\xa0\x15\x6b\xe9\x32\x4c\x15\xd2\x8c\x3d\xa1\xb5\x5c\x09\x3e\xa9\x14\x4d\xb7\x07\x0a\x86\xe3\x30\xc9\x6e\xe1\x6a\x69\xf0\x86\xdc\x39\x23\xb1\x39\xb8\xc5\x0e\xe2\x0b\xf3\x90\x48\xdb\x10\x36\xfe\xb4\xf2\x44\xc9\x84\x95\x27\xf2\x21\xb7\xe9\x74\x5a\x51\xc7\x3c\xc7\x81\x60\x5f\x5a\x62\xa0\x19\xc4\x66\x83\x69\xbf\x24\x4d\x80\x34\x69\xbb\xd7\xa8\x3a\xc4\x46\x1c\xea\x54\x8b\x51\xa0\x3d\x63\x3f\xfb\x6c\x41\xd1\xcc\x9b\x78\xff\xae\xfe\xae\x28\x34\x9f\xc4\x6b\x8e\x98\xdf\xac\xd2\x1a\xc5\xe9\x94\xc4\x6b\xd1\x2b\xa0\x9c\xed\x6f\xa8\xad\xf3\x2c\xf9\xe3\x85\x46\x73\xa9\x29\xb1\x3e\xf3\x86\xdc\xa1\xb6\x67\xae\xab\xa0\x93\x3d\x9a\xea\xb4\x30\xb1\x5b\xe1\x96\x31\xf3\xb9\x87\x9a\x1f\x4d\x38\x78\xd3\x80\xc8\x87\x22\x96\x11\x60\x81\x45\xa0\xc2\x59\x66\xd4\x29\x15\x41\x76\xd3\x3d\x87\x4a\x61\xed\xb8\xf2\x65\x03\xf4\xe2\x1b\x6a\x04\x7a\x65\xea\x28\x5b\xd1\xa0\x7a\x1a\x37\xc2\xc9\x5d\xb3\x63\xc2\x2d\xc9\x1d\x1a\x8b\x70\xd9\x8a\x6a\x84\x13\xcb\x1c\x93\x70\x35\x55\xb2\x33\xe2\xc5\xa2\xe0\x7b\x2c\xfa\x35\xd5\x8f\xcb\xcf\xc7\xa5\x62\xf7\xb2\xad\xc1\x7a\xb8\x9d\x27\xa6\x1e\x74\x5a\x1d\x57\xf6\x79\x89\x2d\x47\x46\xb6\xc8\x54\x0d\x77\xae\x64\xe3\x0a\xec\x3e\x32\x9f\x87\xa8\x74\xab\x9a\xc3\xfa\x41\x3a\x47\x49\xed\x5d\xff\xae\xbf\x4c\x5c\xb1\x38\xbe\xeb\x06\xfa\xb7\x01\x25\xb1\x27\x1c\x77\x5c\x4e\x04\xee\x56\x7c\x56\x3a\xe4\x39\x90\x5a\xd3\x29\xcf\x64\xd1\xb6\x90\x42\x78\x13\x4a\x4c\xac\x5d\x9c\xca\xa6\xa6\xcb\x6a\x7e\x98\x63\xde\x9d\x61\x96\x4d\xb1\x77\x0f\xbe\x51\x77\x7b\x42\xfc\xa9\x98\xd6\xa0\xbd\x9e\x3d\x2c\x10\xfd\xf4\x3d\xae\x3e\xe9\xc0\xf1\x06\xca\x91\x34\xd9\x4b\xd2\xc9\x79\x0d\xa6\xdd\x3b\x31\x8e\x4e\xbc\xfc\xa3\xe1\xd4\x4b\xe3\xbd\x23\x5c\x1a\x0f\xa6\xd9\x87\xb8\x7a\x24\x03\x91\x34\x30\x94\x5c\x01\x59\x45\x7b\x47\xb0\x6c\x52\x83\x49\x26\x2f\x74\xca\x44\x0b\xa4\xb3\x3a\x42\x71\xaf\x89\x0a\xbd\x3d\x7b\x6b\xf8\xb1\x77\x90\x64\x94\x08\x89\xc2\x7e\x9c\x78\xaa\xbb\x6e\x45\x94\x74\xb0\x4d\xf9\x87\x4b\x77\x5d\x0d\x56\xb2\x25\x83\x66\x78\x3c\x2b\x33\xce\x0e\x16\x38\xe8\x18\xc4\xea\x90\xbe\xd1\xe9\x7e\xbe\x43\x59\xa9\x8b\x77\x66\x12\x13\xb3\x61\x55\x78\x59\xae\x96\xce\x58\x59\x6a\xdd\x12\xd5\x80\xf8\xe3\xf9\x61\x75\x70\x4b\xc6\xda\x38\x49\x6b\xbd\xf3\xd6\x78\x04\xe7\x0c\xb1\x04\x47\x2d\x7d\x60\x9d\xc6\xb7\x67\xb0\x59\x52\x67\x79\x0b\x8d\x3c\x70\x1b\x05\xbc\xc6\x21\x42\x2c\x41\x41\x5e\xd8\x90\xa7\x3c\xf9\x24\xc6\x28\x00\x09\x01\xc9\x02\x01\x55\x92\x90\x67\xd6\x3e\x69\x0d\xe1\xb6\xa2\xa3\x1f\x55\xfb\x67\x74\x31\x3d\x07\xe6\xc7\xe5\xcd\x7b\xdb\x12\xb8\x4c\x19\x15\x82\x18\x7a\x36\x91\x84\x89\x92\xad\xc6\xbf\x83\x61\x8a\x2e\x61\xb2\xc8\x3f\xe1\x29\x41\xf2\x13\x56\xf4\x0d\x57\xca\x2f\x4f\x43\xd0\x00\x84\x45\x86\x9d\x9e\x30\x27\xbc\x14\x39\x65\x7b\x26\x05\x7f\x45\x4b\x3e\x85\xf5\x8c\xda\x05\x33\x5a\x72\xca\x77\xc1\x0f\x41\xf2\x33\x91\xed\xd0\xc8\x92\x33\xe2\x3b\x31\x84\x3f\x37\x98\x1d\x03\xb5\x47\x5b\x92\xe0\x43\xcc\x13\x1c\x90\x2a\xb8\x37\xd9\x82\x45\x30\xde\x19\x3f\xbb\x0b\x4a\xf2\x30\x0b\x65\x2c\x24\x0c\x97\xb8\xa8\xbb\xc9\x52\xc4\x37\x1f\x4d\x96\x91\x4d\x16\xee\x11\x3d\x34\x93\x25\x93\x87\x47\x8b\xe5\xd1\x62\x79\xb4\x58\x1e\x2d\x96\x47\x8b\x65\xe3\x16\x4b\x91\x1a\xe0\xdc\xc5\xe3\xe1\x59\x2c\x6e\x57\x69\xee\x36\x4b\x9f\x2b\xa5\xdd\x58\x2d\x0f\xc7\x58\x91\x35\xc9\x57\x79\x61\xf9\x4e\x4c\x15\xa7\xc2\x64\x69\xb3\x34\xd5\x25\x6f\xe6\xec\xb2\x0e\xc4\xe1\x27\xda\x06\xb2\x96\x02\x56\xaa\xff\xf8\x80\xbc\xb0\x04\xf3\x8b\x5d\xaf\x00\xb8\xd0\xde\x38\x95\x83\xc8\x3a\x00\x4e\xa2\xd3\x05\x0e\x03\x8a\xa2\x5c\xa9\x98\xb7\x8d\xf8\xbd\x6d\xdb\x38\x54\x08\xda\x0a\x27\xeb\xf4\x29\x7a\x6d\x66\xdb\x9a\x17\x56\x0e\x9a\x60\x2b\xb5\x7f\xfa\x29\x39\x09\x59\x2e\x3b\x7e\x46\x99\xdc\xe0\xb5\x2d\xa8\xcd\x0c\x19\xaf\x52\xf1\xf1\xf8\xde\xcf\xe3\x7b\xcc\xc2\xf9\x5a\x63\xad\x87\x77\x80\xbb\x66\x14\xb9\x1f\xe1\xa5\xcc\xa0\xc7\x33\x7c\x9c\x33\x5c\xe6\x41\x81\xf7\x28\xe5\x37\xce\x40\x95\x60\xab\x26\x6d\xdb\x38\xd3\x37\x55\x8c\x5f\x9c\x19\x2f\x55\x53\x40\x51\x1a\xd2\x5a\xf5\x30\x42\x91\xbe\xa5\x38\x5f\x55\xf0\x7f\x94\xd9\x45\x85\x8c\xb7\xce\x51\x6e\x46\x0e\x50\x68\x2b\xd9\xe7\x7d\x9a\x80\xee\x81\xf2\xa1\xaf\x65\xf1\xcb\x36\x8a\xf9\x2f\x29\xb9\xc3\x01\x02\x10\xb0\x05\xa1\x09\xe0\xab\x92\x58\x83\x08\x50\x25\x70\x0a\xec\xeb\xc6\x2e\x70\xbb\x0d\x3c\x18\x45\x29\x40\xcc\x6f\x95\xa4\x51\xf1\x27\x39\xde\x64\x3f\x99\x6a\x9e\xac\x12\xa9\xa7\xed\xf2\xa4\xc3\x57\xea\x62\x75\x7e\xef\x23\x1a\x27\x5b\x12\xac\x2b\x2e\x4e\xda\x5c\x32\x6b\x7f\x81\xc2\x18\x90\x64\x81\x28\x03\x69\x14\x20\x9a\x1d\xbd\xc1\xf8\xa2\xf6\x68\x95\x3d\x28\xab\xcc\x19\x48\x4d\xe5\x03\xf7\xe9\x61\xba\x7b\xeb\x6c\xd4\x92\x5f\xbd\x3c\x77\x9c\x82\x5f\x53\x13\xcf\x9d\x96\xfd\xbe\xfb\xe6\xf8\x6f\xe9\xd3\xe8\xc4\x0c\x2e\x31\xc3\xbc\x02\xd3\xda\x86\xc8\xb5\xa5\xb8\xd3\x05\xc7\x71\xed\x82\xc3\x7d\x57\x48\x01\xc6\x81\xdb\xbe\x17\x4f\xe8\x9d\x53\x2b\x1f\xbe\x0e\x8c\x6a\xdc\xcd\x33\x68\x06\x38\xa8\x8b\x00\xf3\x5a\xf1\x0e\x44\xd7\x56\x4e\x99\x1f\xbd\x5b\xc4\x8d\x49\x59\xf9\xef\xd2\xe1\xb2\x40\xd3\x7c\x5d\xed\x3b\x5d\x75\x16\x5a\x73\x2c\x3d\x6b\x83\x15\x29\x31\x76\xd3\x1c\x96\xcc\x09\x91\x78\xc9\xed\x89\x5a\x2f\xce\x28\x88\x89\x04\x76\xf4\x0e\x44\x8b\xbb\x83\x82\x70\x07\xea\xec\x2d\x7e\x41\xe8\x5c\x2c\xd1\xe3\x5f\x96\x21\x12\x8e\x45\x4e\x69\xc6\xdc\xbf\xa6\x88\xae\xdb\x6a\x56\x95\xec\x89\x51\xb2\xa5\x95\x31\x13\xda\x95\x5c\xdd\x49\xec\xd0\x81\xdf\xf9\x40\x6d\x82\xcc\xd8\x4d\x7f\x55\xe7\xde\x11\x36\xf0\x13\x3d\x3c\x60\x0f\x34\x6c\xb3\x4b\x0c\x62\x3e\x8c\xd1\x2d\x5a\x4f\x06\xf5\x35\xed\x68\xae\x3b\x04\x47\xab\xc3\xf5\x0b\x0e\x67\x12\x6e\x8f\x0c\x1b\xde\x36\xf0\xd2\xba\xab\x11\x54\x35\x7e\x94\xfa\xd7\x8c\xa0\x26\x90\x20\x53\xe8\xa9\x25\x88\xd5\x1a\x9b\xca\x95\x4c\xd7\xe0\xaf\x59\x5b\x8c\xdc\x21\xa6\xd7\xbb\x26\x35\x75\xdf\x67\x86\x1a\x0a\x8c\x29\xb9\x58\x30\x57\x06\x89\x8a\x48\x3e\xf7\xca\xb9\xcf\x36\xc3\x74\x79\x0a\xa5\x87\xe5\x09\x29\x50\xcc\xc9\xf6\xac\xe8\x56\x9e\x5f\xb8\xa8\x3b\x98\x13\xcd\xb0\xf2\x0a\x16\xb5\xb2\x59\xb5\x26\x3a\x93\x61\x2b\x17\xd6\x37\x83\xec\x94\x22\x7a\xfd\xf6\x62\x71\xca\xfd\x65\x27\xb6\x6f\xdd\x4c\x19\xcb\x02\x16\x85\xfe\x53\x5f\xb4\xf4\x59\xef\xd8\x00\xfe\xeb\x1f\x5f\xbc\x9f\xfd\xf1\xe7\x73\x37\xdc\x1b\xa9\x9a\x42\xb8\x26\x69\x72\x10\x92\x39\x29\xe0\x7b\xaa\x42\x2c\xba\x5f\xe4\x38\x5f\x5e\xd1\xc3\xc8\x9b\x78\x27\x8c\xe1\x79\x04\x48\x84\x00\xa1\x60\x49\x28\x02\x7e\xfe\x7d\xe1\xc6\xd3\x39\x8c\xf0\xaf\x85\xc3\x5e\x07\x7f\x6c\xae\x8e\x38\x55\x04\x36\x07\x23\x8c\x40\x24\xf9\x0c\x1d\x8c\xf9\x92\x9a\x0e\x31\x4b\xa6\x31\xf6\x6f\xf5\xc3\x16\x27\x68\xc9\x64\xfe\xc7\x97\x18\x85\x99\x91\xc1\x70\x34\x0f\x91\xc8\xee\xd0\x2c\x00\xfd\xcd\x13\xaf\x90\x0d\x79\xa8\x1a\xa6\xef\x7a\xfc\x3c\xad\x1e\x3f\x9d\xbc\x8a\x0a\x1e\x9d\x3a\x7d\xba\xb9\xdc\x2e\x2c\x72\xe8\x35\x21\x3d\x77\xab\x53\x6e\x83\xaf\x73\xe8\x30\xdb\xa0\xb8\x74\x8b\x84\x53\x66\x3a\xcf\xd6\x36\x7d\x71\x78\xe8\x55\x73\xe5\x32\x36\x80\x05\x64\x20\x22\xba\x48\xaf\x91\xc3\x51\x32\xb6\x0a\xab\xa8\x9a\x91\x35\xd8\x1c\x45\x88\xc2\x70\xc7\x0a\xec\xf6\x6f\xb7\x7f\x83\xcb\x37\xf7\x5b\x50\x60\x52\x09\xe5\x58\x2d\x1c\xb6\x05\x88\x0e\x6d\x7a\x14\x12\x46\x01\xc8\x1b\xb5\x03\x96\x70\x3f\xd3\x15\xfa\xc5\xa8\xa7\x6a\x90\xc8\x9a\x40\xde\x61\xb4\x9a\x36\xde\x2c\x0d\x0a\x87\x37\xde\xd0\x4b\x68\x63\x05\x3e\xea\x88\x6c\xac\x69\x9d\x19\xf1\x53\x36\xb5\x5c\x97\x54\x3b\x2c\x95\x43\xdc\x30\x4d\x48\x26\x9b\xaa\x92\xbb\x32\x15\x75\x2d\x92\x83\x1c\xbe\xd5\xd1\x2f\x35\x8d\xbf\x80\x2c\xfb\xea\x9c\xd2\xcc\x1f\xfb\xd8\x14\xf7\x06\x38\x9b\xeb\x1d\x0c\xf9\x0c\x1b\x62\xe3\x79\xfc\xfc\x5a\xca\x0f\x99\xcd\xcc\x60\xc9\x55\xda\x6c\x8d\x4f\x48\x85\xe7\x5d\x6f\x25\x9c\x6f\x22\xfa\xb2\x4b\xcd\x68\xe2\x3d\xd3\xd8\x55\x5c\x23\xd8\x6e\x22\xf2\x9f\x36\x12\x7a\x84\x3b\x86\x77\x9c\x36\x30\x2c\x6d\x70\x24\x1a\x67\xe1\x68\x0e\xb4\xeb\x58\x2b\x28\xdc\x1e\x9d\xba\xf6\x26\x94\x63\x9f\xba\x1b\x04\x3f\xae\x9e\x44\x23\x9f\x6f\x09\xdc\x35\x28\xe5\xf5\xab\xf3\xaf\xef\x4f\x5e\xff\xd1\x1c\x9d\xce\xe6\x37\xea\x01\x77\x0d\xe7\xac\x96\x6d\x71\x15\x23\x1f\xcf\xd6\x20\x8d\x33\xb3\xbc\x1e\x71\x5c\xc2\x7b\xfe\x3b\x5e\x85\x9c\xc0\x39\x03\xff\xfd\x9f\xff\x05\x42\xb2\x12\x98\xc6\x13\xe0\x2f\x20\x85\x7e\x66\xe3\x4c\x80\xc0\x77\x64\x13\xb0\x58\xc7\x0b\x14\x31\x40\xa2\x70\x9d\x6b\xce\xa1\xa6\x7c\x29\x64\x9c\xc0\xf9\xaf\x7d\x72\x4e\x74\x78\x94\xec\x78\x6a\xd5\xba\x0e\xbf\x9e\xc6\x14\xc5\x28\x0a\xec\x79\x1f\x8d\x50\x96\xfa\x48\xfc\x60\x6b\x0b\x30\x0f\x41\xa2\xbb\x86\x73\xfd\xe6\xba\xef\x85\x95\x4b\xc6\x22\x3f\x40\x5a\xee\xb0\xf3\x93\xbc\x24\x94\x30\x08\xb2\xed\x39\x9d\x65\x5e\xd5\xb4\x88\x74\x2b\x70\xd1\xe2\x32\xbb\xe1\x40\xcf\x7e\x2c\x27\x95\xad\x38\x4f\x90\x10\xc3\xc8\xb7\x9b\x63\x59\x46\x55\xdf\xf5\x66\xa7\x6e\xfd\x57\x61\x83\xa3\x9e\xde\xdd\x9e\x1c\x32\x42\x8c\xb6\xe3\xd5\x6d\xe0\x44\x49\xe0\x58\x37\x9e\x38\x40\x37\x90\xee\xcf\x8d\xe7\xf1\x97\xf8\xf0\xeb\xe3\xbf\x7f\xd5\xef\xc6\xb3\x8c\x73\xb8\x80\xec\x44\xbf\xc6\xcb\xf9\x5d\x81\xfa\xdb\xd8\xcd\xa8\x45\xfd\x96\xa0\x7f\x0f\xd5\x8d\x48\x7e\xdf\xd8\x05\xb0\x37\xb7\x56\x0d\xcc\x6c\x3e\x17\x1a\xee\x3f\xe5\x55\xe6\x96\x6f\x3c\x3d\xaf\x2b\x06\xd5\x90\x7b\xce\x07\x79\xdb\xd9\xff\xce\xd3\xed\xe6\xb3\x37\xfe\x65\xe7\xeb\xcf\x96\xcb\xb1\x21\xd6\xc1\x29\x25\x6c\xdb\x20\xb5\x1b\xb8\x75\x1c\xff\xe2\x71\xeb\x77\x8f\x1b\xb9\x7e\xfc\xed\xdd\x40\xf6\xbe\x18\xb4\x0e\x32\xfa\x7b\x46\xb8\x86\x1c\xa6\x8d\xcc\xc7\x01\x16\xfd\x6b\x32\x1d\x9b\x87\x20\xa7\x86\x13\x6e\x7c\x45\xa4\x23\xb6\xdb\x51\xb6\x3a\x92\xbc\x25\x92\xd3\x43\xaf\xd7\x11\xde\x6a\x76\x93\x63\xde\x51\xd7\xcd\x3e\x6a\x8b\x91\x11\xad\xec\x9a\x19\x35\xae\xad\x9d\x10\x7f\xc7\x46\xf6\x4b\x76\x7c\xf0\xfd\xc1\xaf\x91\xd9\xc8\x96\xb0\x7b\xee\x3d\x45\x44\xc6\xbc\x8f\xa2\x72\xca\x70\xc2\x93\x99\xc9\x4c\x05\x21\xd9\x48\x26\x48\x57\x73\x38\x21\xbe\x6b\x7c\xa4\xba\xcf\xa5\x67\xce\x14\x7e\x9d\x36\xd9\x46\x34\xd5\x89\xe7\xa7\x94\xf2\x56\xee\x95\xca\xa8\xb6\xa2\x1a\x1d\x6a\x4f\x5c\x36\xe8\x10\x90\x9e\x09\x84\x0f\x52\x4a\x56\x96\xd9\x95\x30\x2d\x79\xea\xb5\xfc\xa3\x1d\x65\xaf\x0e\x1e\x39\x7e\x34\xa7\x68\xa2\xc5\xdf\xd4\x35\xac\xe3\x42\x3f\x0d\x11\xb2\x17\x05\x2b\x30\x97\xdd\x69\x58\x45\x93\xdc\x24\x15\xf3\x56\x64\xe3\xd3\xb1\x8c\xe1\xda\x8b\x94\x75\x78\xda\xee\xd4\x34\x40\xc0\x6e\x92\xa0\xb2\x5b\xdd\x26\x08\x5a\xc2\x13\xee\x45\xcf\x1a\x50\x72\x77\x72\xd6\xd1\x88\x37\x49\xcd\xf7\xdc\x36\x1f\x21\x7c\xeb\x60\x38\x0d\x08\xe6\x38\x98\x29\xd5\x6c\xf2\x41\x87\x91\x3d\x22\xc3\x4b\x40\x45\xa7\xcb\xd6\xb0\x4c\xc6\x52\xc7\xb0\x8c\x7b\xd2\xb8\x82\xe1\x6d\x4b\x1a\xaf\x4a\xb9\x10\x0f\x31\xfd\x22\xfe\x51\x2b\x40\xab\x89\x7d\x88\xa3\x5b\xa0\x76\xc8\xfd\x94\xa3\xc0\xd7\x7e\x9f\x10\x5f\xc8\xee\x29\x63\x25\x88\x59\x4b\xac\x49\xbd\xb6\x82\x87\x9e\x87\xa1\xf2\xa8\xbc\x02\x87\x2a\xed\xa2\x6c\x9e\xf2\x6a\xaa\x3a\x17\x55\xad\x68\x41\xac\xfd\x8a\x24\xe4\x52\x66\x5a\x98\x08\xd1\xee\x8e\x34\xde\xbf\x68\x5d\xc9\x8a\x4e\x62\xa5\x77\xb4\xf4\x2d\xf3\x1a\x7a\xc5\x88\x31\x52\x86\xe8\xd7\x90\x9d\x2e\x60\x34\x47\x97\x28\x0a\xe4\x38\xb2\x18\x43\x7c\xfb\x16\xad\xb2\xd5\x15\x5f\xf7\xc0\x94\x6f\x5b\xa7\x48\x6d\xa2\x28\x98\x7e\x56\x4a\x6c\xfa\xf1\xff\xfa\xf8\xaf\x7f\xb6\x39\xb8\xde\x28\x68\xc0\x72\x7d\xc0\xe7\xc4\x60\x2e\xc5\x26\x8e\xc8\xfd\x5a\xd8\xda\x5c\xa8\x7e\x12\xc7\xb4\xd4\x6c\x87\x92\x10\x99\x1f\xb0\xd3\xbe\x78\xad\xe0\xaf\x58\xcb\xc9\x0a\xe2\x04\x47\xf3\xf7\xe8\x0e\xa3\x55\xef\x28\x60\x0b\xf3\x4c\x79\x69\x4e\xec\x1b\x8d\x83\x6a\x9d\x00\x72\x72\x89\x6e\x1b\x63\xf5\xd6\x6c\x0b\x91\xd4\x36\x66\xad\xc9\x5f\x5b\x8c\xc0\x39\x74\x50\x6b\xf3\x59\x77\xbe\x36\x97\xf8\x50\x9c\x75\xe3\x78\xce\x3c\x87\x2c\x07\x41\xdb\xa9\xeb\x7c\xf8\xe6\xfe\xfa\xdd\x87\xeb\x65\x17\xd7\xf9\x59\x35\xa9\xeb\x32\x3f\xa6\x9b\x76\xe8\xe0\x53\xdd\x6c\xe8\x34\x76\xb3\x81\x73\x24\x9f\x6a\x3a\xaa\xf3\x6c\xfa\xf6\xf0\xad\x16\xa3\xad\x77\x02\x17\x83\xaa\x5d\x2b\x40\xdf\xaf\xe4\x49\xac\x54\x9a\x58\xf0\x44\xa2\x07\xe6\xff\xe0\xb1\x06\xc2\x43\x04\x13\x51\xd0\xad\x1e\xe6\xf7\x0c\xfc\xce\x25\xcf\x34\x9c\x78\xb1\x3c\x8c\x26\x15\x8d\xaa\x5f\xb5\xe5\xce\xfa\xa5\x30\x02\x26\x1e\x45\x33\x8a\x18\x47\xd6\x53\x30\xf3\xbc\x96\x21\xff\xd1\x07\x1e\x4f\xac\x7c\xa8\x82\xbd\x5a\xf1\xad\x57\xc2\x64\x2d\xc1\x9d\x55\xc0\x53\x4c\x25\xbb\xd9\x67\xd9\xdf\x17\xe8\x0e\x85\xe2\xec\xcd\x3f\xbb\x42\xbf\xa4\x28\xf2\x91\xf6\x71\xbd\xf9\xe3\xc7\x32\xc8\xbe\x20\x71\xe5\xf0\x28\xd5\x1a\x6a\x7f\x4a\xba\x57\xfe\xd6\x1e\x90\x5c\xc8\xff\x96\xcc\xd0\x3a\x1d\xcb\xa6\x93\xf9\xdf\x9c\x3d\x7a\x63\x67\x99\x0f\xaa\xfd\xa2\x6a\x5a\xe8\x5c\xcb\x3f\x84\xc6\x0b\xdd\x12\x0f\x2d\x61\x79\xb9\x78\xc9\xe2\xc2\xe2\xb3\x3f\xaf\xf5\x1b\x70\xfd\x41\x4d\x5c\xfa\xfc\xb4\x02\x2e\xe7\x54\xf2\xed\x39\x3c\x5b\x05\x0a\xee\x02\xd1\xd7\x0d\x0f\xa8\x47\x91\x7a\x2b\x7d\xaa\xbb\xc2\x9d\xb2\x86\xbd\xe3\x46\x5b\xc3\xe6\x72\x4e\xe3\x3f\x72\x34\x16\x36\x16\x0f\x65\x09\xa4\x89\xea\x35\x6b\x09\x84\x0e\xea\xf5\xd1\xb3\x43\xad\x25\x28\x3a\x7a\x2b\xda\x05\xa2\xce\x4d\x3c\xfa\x04\x1c\x5a\x98\x99\x4d\xfa\x02\xdf\xba\x15\xef\x58\xd8\x79\x47\x12\x34\xbd\x21\xf7\xa5\xc6\xc9\xb6\xfe\xc5\xd9\x0f\xae\x17\x30\xba\xed\x70\x93\x63\x0b\xf6\xcb\xa1\xb4\xba\x92\xec\x83\x1c\x30\x67\x86\x50\x70\x03\xfd\xdb\x7f\xeb\x1d\xa3\x71\x9a\x46\x4c\xc9\xb2\x48\x15\x3f\x2a\x1f\x5c\x13\x2f\x94\x94\x6e\xeb\x9e\xdd\x23\xb1\xc7\x69\x7a\x22\xaa\x67\xb9\x66\x74\xce\x83\xeb\x05\x27\xf2\x03\x0a\x43\xb2\xca\xf3\xd7\xbc\x1f\x10\x9b\x00\xc1\xb9\x7f\xf3\x6c\xaa\xee\x3b\x92\x59\x31\x47\xce\x80\x21\x7d\xc0\x54\xb6\xbb\xf4\xb7\x24\x01\x14\xc1\x30\x5c\x3b\x2c\xfc\xb8\x7d\xe1\xed\x62\xdd\xe8\x72\x6d\xf4\x04\xa8\x1a\xdc\x5a\x83\xf1\x82\xb2\xca\xb0\xce\x8d\xe7\x7c\xc3\xe4\x76\x75\x61\x6a\x2b\x3c\xc9\xaa\x55\xad\xdb\xd2\xb2\xd6\xf7\x06\xcd\x08\x2d\x8c\x59\xa1\x79\x35\xc0\x55\xa3\x95\xa9\x1b\x8d\x26\xab\xb3\x6a\x64\xd6\xac\xd0\x7c\x82\x0d\x76\x65\xa3\x11\x99\xcd\xba\x34\xc7\xa2\xef\x26\xff\x3e\x42\xea\x9c\xba\x20\xbe\x04\xb8\x6f\x37\x2f\x2a\xab\x6e\xce\xf7\xd8\x52\x8d\xb0\xee\x35\x8f\xe8\x87\x53\x74\x87\x99\xa0\xc1\x2e\x1d\xf1\x6f\x3f\x0b\xe2\x5f\xee\x83\x77\x6e\x85\x75\xf5\x24\x07\xb5\x0c\xd7\xf3\xb8\x96\x37\xf5\x96\x80\x7c\x0c\xb0\x84\x41\x87\x9e\x9d\x4e\x57\x07\x65\x62\xb7\x1c\xf2\x0b\xc8\xce\xb0\xac\x33\xb2\x9f\xf0\xf2\xad\x8b\xa3\xd2\x7a\x8e\x26\x65\xaa\x98\x62\x53\xa6\x5b\x99\x6c\xa4\xe3\x2a\x65\x84\x6d\x1d\x80\x9b\x35\xf0\xcc\x63\xcf\x30\x65\x89\x21\x73\xb1\xe9\xf9\x10\xd6\x1f\x37\x4d\xa7\xdf\x71\xde\x76\x87\x83\x67\xb3\xe9\xaf\x24\x42\x60\xb5\x66\x78\xb5\x36\xa2\x6e\x96\xcf\xc3\x80\xf3\x42\x0d\xd6\x6c\x59\xda\x84\xa4\xa5\xe9\x9b\x0f\xa3\xf7\x24\x0c\x33\x53\x6b\x14\x6c\xa7\x67\xfd\xb1\x9d\x54\xaa\xfe\x00\x38\xda\xe6\x44\x7d\xbc\x44\xaf\xc4\x1a\xdb\xb0\xd1\xde\x23\x96\x10\xda\xda\x4a\x82\x77\xab\x16\x28\xab\x9d\xf5\x73\xcb\xd6\xe5\x77\xbb\x79\xa4\x8b\x4a\xf6\x4c\x4b\xa0\xae\x63\x21\xbd\xb6\x08\x6d\x4f\x98\x57\xa7\x51\xed\x18\xaf\x4e\x43\xd4\x00\x5e\x25\xf3\x5a\x50\xda\x9d\xc6\xb6\xc3\xb9\x36\xa9\xf3\xc6\x34\x58\x2a\x67\xc6\xf3\x60\x95\x4e\x6a\xca\x85\x1d\x32\xef\x36\xcc\xc5\xde\x76\xf3\xae\x00\x17\x37\x6b\xe8\xbb\x01\x59\xbb\x29\x85\x42\x93\x76\xb4\xff\x9d\x93\x32\x37\x76\xd9\x52\x32\x13\x06\x99\x79\x22\xc1\x5d\xe4\xb5\xcb\x9e\xe7\x38\x9a\x4f\x63\x48\x2b\xd7\x2e\x13\x4f\x7f\xb4\xcf\x60\xba\xbd\x38\x49\x7a\x58\x8c\x8d\x3f\x90\xcb\xf6\x26\xff\x81\xa2\x74\x89\x28\xbc\x09\xb3\x9f\x4c\xe6\x28\xf9\x22\x7f\xe7\x1f\xfe\x83\xa2\x24\xa5\x11\x48\x14\x99\xfe\xf1\x8f\x3f\xf4\xa2\xd3\x10\xb2\x3c\x6c\x2a\x08\x6f\xac\xb8\xd7\xd1\x30\x62\x76\xeb\x18\x2c\xff\xf6\xf2\xea\xef\xe8\x66\x65\xbe\xa1\xf3\x61\xd2\x76\x41\xe7\x82\xb3\x53\xbd\xa2\x73\xfc\x8d\x7e\xf1\x3e\x46\x30\x2e\x47\xe2\xd9\x64\xfe\x56\xa5\xbc\xb9\xbd\x6b\x74\xd3\x6c\x75\x1c\x8e\xa3\xa2\x2e\xa2\x2d\x46\x37\xa8\xb0\x60\x93\x9e\x76\xf3\x16\x18\xa4\x87\xab\xc3\x26\xa2\xee\x7d\x97\x7b\xea\x8f\x57\x07\x87\x0c\xbe\x7a\xd6\x50\xe9\x6f\x28\xf4\xef\x56\xef\xfe\x6c\xc2\xb3\xbe\xa6\x09\xa9\x57\x65\xfd\xc2\xab\xe3\x32\xeb\x35\x95\xf0\x1c\x0b\xc8\x16\x02\xfd\x20\x3b\xd1\xb3\xbf\x8a\x5f\xcd\x70\x98\xf0\x80\xd6\x12\x26\xfe\xe2\x3a\x7b\x4a\xfc\xf3\x34\xef\xa1\xc6\xff\xfc\x12\x73\x5b\x98\xff\x5b\xb4\x31\x2b\xf6\xa5\xb0\x29\x0c\x78\x9a\x3c\x35\x0c\x52\x7f\xd1\x7a\xf5\xbe\xd9\x2a\xf7\xd1\xf6\x59\xbf\x0d\x35\xfa\xc6\xc9\x24\x7c\xcc\x2d\xc3\x44\xba\xe4\x8e\x2b\x99\xef\x5f\x1d\xbe\x5f\x1e\x35\x54\x32\x6b\x11\x55\x55\x52\xd8\xa9\xe6\x82\x9b\x7d\x4c\x75\x7b\xd4\x75\xbf\x4b\xf1\x31\xba\x4f\xa6\x54\x24\xe3\xee\x07\x30\x6d\xf5\xcc\x2b\xb9\x0d\x0e\x60\xb5\x13\x2f\xbf\x25\x2c\xb2\x37\x5b\x1c\x09\xb9\xd7\x5e\x55\xc2\xd0\x36\xe7\xc8\x3b\x55\x30\x41\x13\x3d\xc5\x94\x5f\xb3\x61\xb4\x3a\x43\x11\xc3\x89\x78\xf2\xc8\xe9\x0e\x7c\x85\x13\x7f\xf1\x1d\x46\x2b\x4f\xfb\x45\x13\xa0\xde\x4e\xc8\x73\x12\x86\xee\xb4\x99\x11\x9a\xb4\x93\xe6\xb8\x33\x69\x8e\x07\x92\x46\x3a\x96\x79\x8d\x68\xa5\x36\xb4\x8d\x38\xde\x7f\xff\xe7\x7f\xd9\x70\x4a\x4b\xe2\x01\x7d\x07\x12\x3c\xed\x4c\x82\xa7\x56\x12\x98\x76\xae\x9b\x40\xd8\x78\x7f\x95\xb1\xd3\x8d\xf9\xea\xd1\x51\xc1\x9e\x25\xec\x8a\x0a\x56\x35\x96\x60\xcb\x62\xeb\x52\xd1\x75\xa6\x8f\x92\x84\x2c\xa7\x1c\xd8\xc6\xa5\x02\x7b\x8c\x3c\x08\x55\x80\x3e\xf1\x80\x1f\x12\x26\xc1\x5e\x1a\x52\x22\xb2\x7f\x1d\x67\xf6\x0c\x16\x80\xe3\x56\xdb\xda\xc1\x19\x20\x51\x02\x71\xd4\xd2\xb6\xa3\x77\x61\x76\x33\x84\x82\xf5\x98\xa9\x95\x05\xda\xf2\x7b\x9b\xab\x20\x52\x3c\x15\x9d\x6e\x25\x8c\x29\xa8\x7e\x30\x5d\x10\x8a\x7f\x75\x78\x4f\xb9\xde\xa1\x91\xd5\x62\x70\x53\xf5\x0d\xa1\xc9\xab\x75\x6e\x66\x35\x95\x0b\x34\x67\xc1\xa0\x84\x6f\x96\x62\x00\xb7\x2a\x7e\x07\x62\x7b\xdd\x3a\x43\x59\x43\x96\x1b\x21\x99\x4f\x11\x4c\x64\xa9\x52\x5f\xaa\x69\x63\x6c\x82\x70\xa7\x62\x78\x10\xc0\x64\x0f\x09\x98\xc6\xc1\x60\x02\x6a\x63\x6c\x82\x80\x17\x90\x25\x20\x7f\xc7\x48\x04\x6c\x7b\xa4\xfa\xfd\xa3\xd6\xdb\x94\x04\x42\xe6\x0f\x92\x3e\xf9\xfb\x4d\x48\xde\x09\xf3\x55\x0e\xf1\xbe\xed\x5b\x8e\x65\x38\x84\x6c\x6a\x80\x4d\xd0\xed\x0c\x8d\x4e\xb8\x6d\xed\x57\x23\x7c\xb8\x61\x20\x27\xc8\x98\x6a\xaf\x22\xcd\x03\x68\xb8\x65\xaa\x27\x9d\x59\x10\xe5\x72\x63\xba\xd9\xe0\x97\xe2\x22\x0d\x43\x77\xc8\x98\xb6\x30\xe9\xf1\xd0\x4e\x15\x26\x7e\xf5\x4b\xb8\x68\x2f\x78\xcd\xa3\x38\xc6\xe0\x44\x29\xaa\xa8\x3d\x3a\x42\xcd\x6b\x2d\x4c\x27\x47\xaf\x6c\x6c\x51\xae\x50\x6c\xe4\xc6\x82\xd1\x23\xbd\x0e\x36\x0f\x76\x55\xa0\xc0\xcc\x50\x55\x8d\xd1\x50\x11\x05\xe5\x57\xc6\x28\x64\x62\xad\xd1\x8c\x68\x64\x7b\x22\x33\x09\x84\x9c\xd1\xcc\x41\xcb\xd5\x91\xe8\x49\x50\xae\x82\x95\x9f\xb1\x30\x9d\xeb\xe5\x18\xea\x19\xb9\x5a\xf1\x6d\x5b\x4f\x8d\x0e\x3a\xa8\x02\xca\xfd\xd3\x4f\x11\x68\xf8\x3f\xaf\x54\x39\x67\xc6\x3b\x2b\xe7\xc7\xc8\x15\x30\x95\xec\x1f\x58\x33\x64\x9a\xde\xab\xde\x6d\xcb\x42\xc6\x51\x84\x02\xb7\x65\x54\x86\x1c\x14\x1e\xc6\xfe\xed\x19\x49\x6f\xf2\x1e\xa9\x1d\x5e\xaf\xa6\xe0\x9a\x5f\x7f\xfc\xbc\xa9\x16\x56\xae\xbd\x2d\x57\xc6\x65\x32\x2f\x9d\x9e\x76\xcf\x9d\x6a\xe0\x6a\xfd\x5a\xbe\x54\x83\x1b\x91\x64\xea\x12\xb3\xe9\x51\xd4\xdc\x98\x5b\xc6\x8f\xf5\x6a\xd9\x36\x2a\x00\xc6\xbb\xc4\xec\x27\x46\xac\x45\x6b\x70\x72\xc4\xa5\x88\x0a\x2f\x57\x51\x6c\x19\x2c\xef\x4f\xd0\xc9\xb4\xb5\x61\xf9\xd8\xc0\x01\xb4\xb7\x19\x4f\xf0\xfc\xeb\x89\x77\x46\xe1\x2c\xd1\xb1\x02\x02\xf1\x81\xfa\xd3\x36\x49\x2b\x40\x41\x87\x39\x5c\x60\xbd\xcc\x3b\x23\x56\x81\x41\xbb\x9d\x19\x9c\x50\x7f\x81\xef\x50\x09\x34\x01\xe6\x9f\xd9\x11\x8f\x9a\x0d\xb4\xca\x34\xf2\xb6\x8f\x6e\x68\x79\x23\x58\xa5\x65\x63\xd1\x96\xe1\x90\x1f\xcb\xda\xbd\xbf\x56\x52\x6f\x07\x04\xef\xf6\x5a\x71\xfd\x9b\x5f\xc2\xa8\xbe\xf5\x1c\xd4\xbc\x78\x65\x02\x1b\x5b\x74\xd8\xa9\xd0\xbb\xba\xbd\x21\x0b\x59\xa1\x11\xe4\xa9\xf9\x63\xf5\x51\x64\xf2\x30\x37\x5a\x85\xdd\x0f\xfe\x7a\x75\x16\x8e\xe6\x27\x61\x78\x46\x7c\xfb\xac\x5d\xce\xb3\xa1\x61\x64\x13\x2e\x56\xa3\x93\x78\x89\x23\xb5\xde\x2a\xcc\xac\x97\x7a\x3b\xb2\x0e\xde\x90\x3b\x04\xd2\x78\x9b\xe6\xc1\xf8\xc4\xd7\xe1\xb4\x7a\x91\xbf\x1a\x64\xdb\x2e\xf9\x03\x89\x3c\x36\x26\x03\x9c\x40\x2a\xcd\x1b\x7b\x94\x8b\x15\x3b\x2f\x3e\x44\x31\x8e\x6a\x0e\x96\xab\x05\x31\x98\xea\xe2\xf5\x8e\x35\xa6\xdd\xb5\x72\x47\x2c\x96\xad\x6a\xa0\xdd\x11\xfd\x72\x83\x24\x37\x0a\xb5\xd5\x8a\xf0\x1a\x60\xdf\xf2\x4b\xba\x05\xf2\x6f\x6f\xc8\xbd\xd7\x4c\x4f\x11\x4c\x38\xcb\x13\x44\x2c\x84\x35\x9d\x7e\x5a\x60\xa2\x1f\x86\xcf\xa0\x5c\x41\xb9\x3c\xfe\xbf\x28\x30\x27\x31\x8d\x24\xdc\x83\x27\xe9\x3e\x3b\x07\x39\x18\x91\x15\x2d\x86\x10\x54\xa6\xd5\x26\x53\x77\x78\xc0\x53\xcb\x83\x13\xd9\xfe\x5d\x70\xcc\x87\xe6\xa9\xb8\x24\xa7\x9c\xf3\xf4\x2e\xc7\x14\x05\xf1\x30\x28\x70\x84\x9a\x03\xb1\x6a\xdc\xe6\x0a\xa1\xaa\xe9\x6b\x06\xed\x7a\xa3\x03\x72\xf5\x68\x3d\xbd\x1d\xfa\x1d\x3b\x12\x90\x1b\x15\x09\x01\x30\x22\xc9\x02\xd1\xa2\xc5\x69\x4b\xb1\xd5\x1d\x3a\xd3\x42\xba\x3d\x8a\xae\x5c\x48\x5d\x01\x4b\xd9\x43\x62\x77\x80\x95\xd7\x7a\x23\x5b\x69\x2b\x1e\x1b\x44\xdd\x8e\xe6\xdc\x58\xce\xa3\xf3\x80\x9d\x80\xcc\x36\xdf\xc1\xba\xa0\x75\xbf\x06\xd6\x82\x61\xee\x6d\xac\x0d\xbc\x1d\xb9\x9f\xb5\xa7\x95\xdc\xaa\x03\x4b\x5f\x65\x88\xa2\x79\xb2\x68\x2a\xd4\x3d\x2e\x2e\x3f\x14\x35\x4b\x0f\x3a\xb7\xc7\x36\x1e\x64\x23\xf2\x8f\x2b\x2f\x7d\x5d\x5c\x37\x5b\xd5\x5e\xa9\x89\x14\x53\xaa\xcc\x85\x77\x0d\x3a\xaf\x23\xe7\x44\x1b\x66\xd9\xb3\x77\x46\xe8\x26\x59\x55\x2b\x5f\x1b\xb3\x7f\xf4\x92\xdc\x21\xd1\xa9\x52\xe4\xc6\x89\x76\x66\xe6\x02\xc2\xbe\xd8\x3a\x27\x41\xab\x99\x55\x5e\x16\x5a\xc6\xc9\x7a\x2a\x41\x60\x2b\x0a\x7e\x89\x18\x13\x30\x56\x96\xc4\xd8\xcc\x43\x12\x00\xe9\xde\x49\x10\x80\xfc\x2e\x12\xdc\x61\x08\xfe\x08\x4e\xdf\xbd\xbd\x3e\x7f\x7b\x6d\x68\xfd\xd9\x1b\x3e\x88\x88\xee\x32\x5b\x5d\xe6\x25\x55\x88\xa0\x13\xef\x8a\x4b\xa2\x76\xfe\x02\x48\x11\x88\x29\xba\x43\x11\x07\xd5\xcc\xd4\xcb\x8c\x92\x25\xc8\x7e\xc2\x51\x36\xa3\x00\xf0\x84\xad\xec\x8f\xf2\x6d\xed\x36\x31\x31\x8c\xf5\x01\x63\x54\x1c\xe4\x1d\xd9\x14\xa2\xca\x6e\xfb\x3a\xcc\xd7\x4f\x6f\x2f\x13\x73\xb7\x7c\x81\xb7\x32\x6e\x4b\x4e\xd5\x73\xfa\x95\xc2\x93\x51\x1f\x08\x72\x80\x98\x92\x3b\x1c\x20\x40\xd1\x34\xe5\xc0\xe4\x79\xab\xfc\x64\x01\x13\xe0\xc3\x08\xdc\x20\x80\x39\x70\x0a\x0a\x00\x8e\xb8\x75\xb9\x06\x81\xe6\xfc\xb6\xa5\xed\x37\xe6\x43\xdb\x62\xc9\x99\x20\x4f\x61\xb0\xc4\x75\x44\xb4\x96\x9f\x2a\xd4\x9a\xb6\xd4\x84\x1c\xdd\x66\x78\x95\x9f\x62\x9c\xbd\xc4\xaf\x53\x35\x50\x3b\xba\x87\xd3\xd8\xbd\xae\x2f\xf7\xc4\x51\xdd\x8a\x7f\x55\x02\x30\xb2\x7b\xa7\x01\x96\xdb\xc6\xee\x99\x72\x94\xa6\x72\x48\xa8\x43\x92\xd0\xfe\xf9\x38\x0e\x6b\xbe\xaa\x1a\xce\x8e\xeb\x77\x8d\x55\x6f\xc8\x05\xd1\x4e\x6f\xcc\xf8\xd1\x79\x22\x14\x8e\x45\x25\xfc\xeb\x9f\xe2\xff\x6d\xd8\x8b\x29\xe9\xed\x2d\x79\x32\x25\x94\x4f\xf3\x0e\x55\xab\xd7\xa9\xd0\xbb\x65\x5d\xfd\xcc\xe1\x92\x56\x71\x48\x8a\x57\xed\xa2\xe7\x94\xd9\x8a\x18\xd5\x30\xc9\xef\xa2\x77\x8c\x9b\xfd\x6c\x71\x77\xf8\x2b\x0b\xcd\xa6\x49\x61\x52\x8a\xa2\xf6\x91\xad\x14\xed\xe2\xde\x3b\x61\x0c\xcf\x23\x50\x5c\xdc\x73\xb9\xc9\x6d\xf7\xcc\x60\x0d\x90\x9f\x19\x2d\xab\x05\xe1\x16\x4a\x66\xcb\x82\x64\x81\x96\xee\x35\xf2\x5b\xb4\x47\xca\x19\x08\x0d\x78\x3e\xbc\x5d\xa4\xad\x8f\xe4\xd1\x51\xb6\x51\x59\x7a\xb3\xc4\xf6\xc8\x28\x77\xb3\xd4\x06\xe8\x01\xff\xc3\x1b\x5e\x37\xf6\x2c\xaf\x1d\x54\x33\xe2\xa7\x6c\x5a\xe9\xcf\x2d\x5a\xe8\x88\x26\xdd\x6d\xfd\xb9\x23\xb4\xca\xb7\xc0\x54\xf8\x9d\xb2\x67\x77\x43\xef\x6d\x8d\x99\x79\xdb\x6d\x89\x09\xd8\xc2\x64\xfb\xf5\x50\xed\xf4\x75\x05\xc3\x91\xe7\x71\xb7\xc6\xd7\x2d\xa8\x38\xc2\x59\x76\x12\x67\x57\x61\x68\x20\x48\x8d\x1a\x0e\x67\x67\x77\xac\xb2\x1d\xec\x2f\x93\xcd\xaf\xe7\xfd\x6c\x0f\xdb\xa3\xb9\xc3\xff\x8c\x58\xd3\xe7\x3a\x3b\x0e\xc7\xe5\x35\xb6\xf8\x0e\xdd\xdc\x87\xa6\x7b\x5a\xa1\xaf\x51\x90\xa9\x69\xaf\x34\x13\x3d\x9c\x60\x0c\x78\x99\x53\xdd\x6a\x3f\x3d\x2a\x72\xf9\x8a\xa2\xfc\xa0\x1a\xbd\x6b\x4d\xab\xca\x4e\x8e\xec\xa8\xe0\x26\x87\x06\x7d\x28\xde\x98\x32\x09\x5d\xaa\x4f\x94\x7f\x78\xc0\xb5\x21\x6b\x4f\xea\x9f\x54\x50\x2c\xc5\xc0\xd0\xf7\x11\xeb\x94\x67\x65\x8a\x38\x36\xf6\xd9\x01\x37\x24\x0c\xa6\xcf\x4b\x1d\x5b\x7e\x20\x29\x58\xc0\x3b\x04\x22\x22\x0e\xc7\xe2\xf8\x96\x30\xd0\x98\x01\x5d\x7c\xbb\x26\xaf\x8a\x95\x61\x76\x26\x61\x8c\x46\x5f\xdc\x9a\xd7\x6b\x34\xad\x4f\xbe\x36\x5f\x02\x5f\x54\x84\x56\x40\x03\xbe\xeb\x95\x11\xd3\x9c\x39\xf0\xd0\xaf\x7c\xb7\xe1\x5b\x5e\x10\x99\x52\xe0\x54\x8f\x8e\x92\xaa\x6c\xb2\x56\x27\xf3\x84\xef\xa5\x4b\x19\xe7\xce\xe5\xb0\x8b\x93\xbd\xa7\x81\x05\xcd\x0b\xb0\x93\xa0\x88\x2f\xec\xeb\xd2\x7b\x84\x18\x9c\x57\xaf\xf7\xec\x6e\x5f\xff\xf0\x9d\xdf\xa6\x49\x8e\x7b\x44\x1e\x9a\x70\x49\x73\x2b\x18\x05\x38\x79\xc4\x24\x75\xc0\x24\xe5\x3b\xe7\xd4\x78\x8e\x75\x1b\xd9\x09\x91\x74\x88\xc7\x34\xb2\xd3\xc4\x25\x64\x14\xaf\x29\x1b\x49\x40\x11\x38\x34\x13\xe8\x75\x34\x76\x20\xcf\x8b\xdc\xa9\x2a\x87\x93\x72\x33\xa3\xc5\x92\x95\xe4\xbd\x9f\x26\x64\x3e\x0f\xb5\xeb\x34\x41\xb9\x89\xc7\x1d\x94\x89\x97\x2c\xd0\x52\x00\xe1\x5f\x8b\x07\x8b\x5e\x4c\x01\x4e\x0a\xa3\x66\xe2\x2d\x51\x80\xd3\x65\x71\x4c\x37\x43\xcc\x7f\x3e\xf1\x96\x19\x3b\x8d\x03\x95\x8a\x79\xdc\x02\xc1\x2f\x26\x1e\x5b\xc2\xd0\x5c\x81\xc9\x69\x9a\xf1\x1b\xf0\x62\xf6\x65\x9a\x94\x8a\xdc\x4e\xd2\x84\x2c\x61\x82\x7d\x18\x86\x6b\x00\xe3\x38\x94\x61\x94\x08\xad\xc2\x35\xf0\x15\x82\x82\x5e\xc7\xe9\xd2\x00\xdf\xe5\xe3\x4f\x04\x45\x37\x24\x0c\x75\x03\xd1\xdd\xaf\x2e\x1b\xae\x81\x86\x2b\x78\xd7\x0a\xc8\x0d\xef\xd0\x36\x70\x77\x5d\x8f\x47\x11\x43\x7e\x3c\x20\x1d\x0e\x48\x75\x9b\xb0\xad\x23\xb2\xdf\x45\x80\xe2\xec\x6f\x17\xb3\xfb\xa1\x6b\x1b\x37\xa8\x6f\xdd\x31\x68\xb9\x8b\xda\xa2\xbe\xd9\xc4\x2d\x5e\xe6\xdc\xe6\xe6\x96\x70\x5a\x95\xae\xed\x96\xd0\xa6\x06\x39\x51\x41\x24\x1b\xe9\xbe\xa2\x30\x4a\xd4\x93\xc3\x52\xda\x4a\x57\x2b\xc5\xe5\xcb\x0a\x27\x0b\x1c\x35\x84\x8e\xda\xb7\xe4\x0a\x07\x73\x94\x94\x92\xd5\x9a\xb5\x65\x03\xf8\x04\x89\x9b\x23\x2d\xc6\x58\xef\x65\xa9\xc1\x90\x5b\x9c\xca\xeb\x8b\x29\xe3\x0a\x3d\xd1\x58\xa9\x23\x0d\xd2\x02\x14\xb6\xb5\xf3\x78\x37\xe4\x85\x6a\x4d\xf1\x6a\x41\x5e\xeb\x17\xc7\x48\x5d\xf2\xa5\x8c\xfb\x1c\x25\x07\xbb\x7b\x8c\xaf\x9b\x09\x0b\x82\x29\x8e\x42\x1c\xa1\x69\x35\xa3\xe6\xf7\x6b\x92\xfe\xa1\x5f\xa4\x72\x78\x9d\xc7\x50\x24\x88\x0e\x45\x36\x2e\xc1\x09\x87\xfc\x07\x17\x55\xb8\xcd\x6b\x73\xb5\x17\x47\xbd\x38\x0f\x54\x2c\x68\x97\xd7\xe6\xef\x67\x27\xbf\xac\xbf\x8d\x9f\xbb\x75\xb9\x1a\x72\x49\x2e\x6d\xb9\x2b\x09\x07\x73\x49\x89\x8f\x50\xc0\x55\x32\xf0\x61\xca\x95\x11\x64\x20\x59\x20\x8a\x00\x66\x20\x22\x20\x8d\x02\x62\x91\xcd\xa2\x22\xc3\x72\x23\x5e\xba\x99\xee\x62\x2b\xdb\xfd\x7e\x9b\xbb\x7f\x19\x22\xc8\x10\x48\xd6\x31\x92\xb9\xd5\x99\x66\xcb\xac\x46\x79\x14\x37\x1d\xfd\xae\xe1\x15\x15\x0e\x30\x87\x59\x60\x9a\x10\x5f\xc1\x08\x67\x94\x97\x0e\x87\xb8\xa3\x2c\x05\x5b\x24\xc8\x11\xff\x9e\x33\xe6\xad\x82\x9c\x6c\x8c\xc2\x5c\xe5\x0b\xca\x0e\x33\xd9\x11\xac\xe9\x62\x76\x48\x10\xe0\x3a\x33\xad\x57\x38\x0c\x95\xad\x0d\xb3\x7f\x96\xf2\x28\xf2\x6d\xa6\x0e\x76\x6e\x8e\xf3\x75\xfe\x5b\x1f\x53\xaa\x53\x33\x2a\x69\x14\x2a\x7b\x73\x94\x66\x54\xb6\xd0\x73\xdd\x0a\x95\xe6\x6a\x6f\x53\xd4\xdb\x88\xae\x14\xdc\x1a\x55\x53\xce\x51\x84\x28\x0c\x77\xac\x2a\x83\x6f\x5e\x5e\x7f\x9f\xbe\x49\xcd\x19\x46\xa5\x6c\x8a\x51\x15\xa7\xd8\x71\x6f\x44\xfb\xf9\xcc\x32\x17\x3a\xe5\x0e\x33\x7c\x83\x43\x9c\xac\x27\x80\x9f\xe2\xd9\x8e\x90\xb3\x68\x06\x5c\x96\x24\xdd\x3f\xa5\xd9\x84\x27\xbb\x41\xbd\xd8\xa8\x10\x99\xae\x0a\xab\x90\x8b\x0b\xc8\xb2\xaf\xce\x29\x25\xb4\xae\x2a\x71\x36\xc1\x3b\x18\xf2\x69\xe9\xdf\x14\xf8\x39\x6e\x1a\xb4\xa6\xa0\x36\x49\xfc\x33\xc4\x7c\x8a\xe3\xa6\xc6\x68\xb6\xb0\x96\x20\xa2\x4a\xb4\x28\x79\x4b\xa2\x99\xa1\x6a\x6a\xc8\xaf\x85\x48\x53\x28\x43\x8b\x0b\xf0\x11\xcf\xc4\x80\xad\x0d\x0e\xb7\x4d\xa9\xef\xf2\x5d\xd7\x22\xac\x32\xc1\x48\x14\x2a\x95\xa5\x35\x2f\x10\x96\x3e\xd8\x77\x99\xd8\x5e\xc2\x64\x91\x7f\xc2\x75\xbd\xfc\x44\x0c\x21\x9c\x1a\x58\xb8\xe8\x9c\x4a\x99\xdc\xb3\x69\x40\x49\xcc\xa1\x38\x74\xf1\xbd\x5e\xc7\xa5\x92\x28\x1c\x14\x87\x56\xe5\xb1\xb6\xf8\x29\x4a\xae\x8a\x47\x2d\x71\x8d\xad\x32\xe2\xb5\xdf\x49\x56\x35\xc0\xdb\x4c\x59\x5a\xdc\xf7\x56\x0f\x9e\xb7\xfe\x68\x75\xdf\xb3\xb7\x5c\xf0\x27\x3b\x03\x14\x59\xdd\x76\x9c\xa0\x25\x68\xc2\xd9\xca\xd9\x2a\xa8\xf3\xb1\x06\xf4\xd9\x03\x1f\x56\x9c\x1c\xc5\x40\x0e\xd8\xef\xa5\x2d\xc0\xc9\xcd\xb1\xdb\xca\xd7\xf3\x1f\xf3\x44\x1c\x07\x54\xa9\x36\xe7\xaf\x76\x8f\xdd\x3b\xc6\xb6\x61\xb1\x95\x98\x63\x8d\x72\xdb\x20\x73\x42\xcb\xf2\x11\x9d\x44\xd7\x2a\x42\x7c\x18\x10\x91\x08\xb5\x0b\x52\x8e\x91\xe6\x79\xfd\x45\x48\x99\xae\x3a\x58\xd1\x5b\x12\xd5\x1a\x1a\xd7\x77\x11\x9f\xea\xb8\x71\x2f\xb1\x7a\xf7\x85\x9b\x4a\x41\x9a\x00\x59\xb3\xd3\x2b\x59\x6b\xf1\x2f\xef\x66\x2e\x6c\xff\xfc\x7b\x69\xe5\x55\x62\x5e\x6e\x04\x74\x47\xc0\x71\x09\xac\x6d\x38\x42\xb3\xe1\x8d\x74\x1e\xf1\x3c\xc8\x2f\x11\x0a\x64\x63\x4d\xdb\x69\x3c\xe0\x4a\x1d\x86\x21\x59\x5d\xe0\x5b\xd1\x59\xbe\xff\x8d\x7a\x69\x1c\x87\x0b\xf5\xa6\x60\xbf\x66\x8a\x1a\x86\x6c\xed\x1a\xd6\x3b\xcd\xc1\xc6\x0c\xc5\x05\x70\x49\xc9\x32\x6e\xc9\xb5\x50\x99\xb3\x65\x3b\x5e\x9a\xf0\xc2\x40\x6a\x49\x1f\x91\x99\x22\x52\x29\x66\xeb\x9f\xc6\xe2\xc5\x15\x9b\x3b\x13\x93\x04\x51\x20\xbe\x05\x90\xdd\xe2\x68\xce\xb3\x2d\x53\x86\x28\x98\x29\xe1\x91\x16\x51\xa8\x48\xd9\xba\x57\x86\x04\x36\xae\x62\xe4\xe3\xd9\x1a\x24\x0b\x24\x27\x36\x01\xe8\xc9\xfc\x09\x38\xc3\x81\x88\x60\x2c\x50\x18\x83\x35\x49\xff\x02\xbe\xe7\x11\x31\xf9\xd1\x2c\x0d\xff\xc2\x1f\xe2\x55\xd0\x38\x0a\xc0\x6a\x01\x13\xfe\x57\x84\x50\x80\x02\xe3\x05\xa4\x7b\xd4\x79\xfb\xf1\x90\xca\x8d\x91\xdd\x61\x75\xc8\x02\x68\x8b\x88\xd8\x53\x01\x36\x13\x0f\x91\xc1\x8b\x51\x03\x22\xe5\x9c\xd3\x9d\x36\x6e\x3c\xbb\xfb\xea\xbb\xa7\x27\xcc\x1c\x14\x91\x97\x30\x5a\xf5\xd5\x06\x22\x23\x97\x25\xb8\x1e\x59\x7e\xa5\x63\x08\x24\x44\x24\xc2\x03\x42\x81\xc8\x85\xe7\xb1\x12\x1c\xdd\xe1\x04\xf1\xbc\x6b\xf1\x75\x42\xb4\x00\xa2\x25\x88\x92\xe7\x09\xf7\xa9\xc4\xe2\x7d\xf5\xfc\x94\x25\x64\x29\xab\x4d\xba\xc4\x57\xd0\x7d\x1c\x42\x1c\x4d\xb3\x09\x73\x29\xb0\x15\x65\x35\x62\xc4\xc9\xda\xec\x46\x9b\x43\x9c\x95\x9c\xba\x97\xe2\x1d\xe6\x23\xa1\x46\x7f\x70\x2e\xe6\x87\x82\x46\x8c\x89\x7c\x54\xf9\x68\x27\x28\xd4\x11\x2e\xb4\x4c\xb8\x83\xc3\xd1\xe3\x46\x9d\x98\x8e\x0a\xda\x0d\x3a\xae\x87\x43\xcc\x85\x48\x88\x7c\xb3\x40\xb9\x0d\x33\xad\x40\xee\xf3\xc6\x72\xbd\x72\x5f\xf8\x68\x95\xe2\x9d\x2b\x54\x14\xda\xd6\xc2\xfd\x03\x5e\x53\x99\xf4\x1b\x18\x49\xc4\x92\x71\xa6\x2d\xc6\xe3\x97\x17\x90\xc5\xc8\x4f\x18\x20\x33\x19\xc2\x45\xf7\x3e\x8a\x13\x71\xbf\xd1\x10\x7a\xeb\xb7\x88\x77\x2b\xd9\xa5\x6d\xdc\x35\xf0\xd2\x55\x7e\x17\xd3\x48\x74\x93\x0f\x20\x3f\xee\xd7\xca\x63\x34\x75\xa6\x70\x8c\xac\x1a\x4d\x3d\xd4\x51\xa9\xe9\x63\xbb\xe8\xb5\x8d\xa9\x8e\x47\x9d\x56\xe8\xb4\x1c\xe0\x7c\x64\xb5\x26\x1a\xb8\x8d\xb7\xbb\x4e\x61\x24\x53\x9a\xb9\x2d\x52\x5c\x71\xe2\x68\x6c\xe5\x26\xaa\x7a\x46\x9d\xf8\x02\x46\x73\x94\x4f\x5a\x69\xe8\xa6\x94\xec\x1e\x73\xce\x6f\x31\x47\x9c\x35\x45\x4b\x81\x5f\xad\x48\xcd\x31\xa5\xc6\x3e\x49\x38\x36\xe7\x98\xd3\x36\x4d\xba\x38\x03\xeb\xc8\x99\xa3\x2d\xe5\x94\xc4\x3d\x93\x6f\x9b\x96\x12\xa4\x71\x88\xfd\x4c\xe6\xdb\xb2\xf8\x7b\x4c\xf7\x5a\xf9\x50\x1b\xd9\xa4\xd9\x31\x18\xa7\x37\x21\x66\x8b\x42\xee\x93\x11\x5e\x59\x59\xc5\x49\x1c\x53\x72\x07\x8d\xd1\xe2\xfe\x8b\xf8\xfd\xd1\x1f\x00\xe4\x23\xa3\xcc\x1f\xa2\x28\x73\x12\xb5\xfd\xcb\xf7\x33\xfb\x13\xf8\xfd\xf1\x1f\x8c\xf2\xc6\xdb\x91\x64\xa2\x26\x9b\x82\x8c\xb5\xcb\xb3\x61\x47\xe6\x17\x4f\xfe\xcc\xb8\xb5\x22\xf4\x16\x90\x48\x5b\xca\x12\xd2\x5b\x14\x00\xc8\x80\x6a\xaf\x32\xd2\x3a\xbe\x43\x94\xa9\xfc\xce\xd1\x25\x2f\xe7\xd2\x9d\x78\x8b\xb8\xf2\xc7\xd1\x2d\x47\x0f\x01\x09\x99\xa3\x64\x61\x36\xfc\x5a\x82\xb5\xc6\x60\x63\x8f\xe6\x78\x2d\xeb\xb3\xb5\xae\x74\x0e\x38\xa9\x08\x53\x25\xf0\xe4\x18\x70\xb2\x26\xb4\x2b\x48\x42\x44\x99\xb8\x3f\xe3\xc0\x8b\xe7\xf7\x98\x71\x7c\xc1\x0f\x4c\x94\xed\xda\x6b\x7c\x83\xe0\x8d\xac\xe2\x70\x06\x77\xc6\xec\x24\x4d\x16\x97\x02\xcc\x8e\x9e\xc9\x58\x90\x93\x6b\xec\x75\x48\xa8\xaf\xfe\x66\x1f\x48\x1d\xa6\x22\xae\xfe\x5a\x44\x63\xde\xa2\x95\x1b\x99\xc5\xf3\xad\x94\xee\x10\xed\x1c\x5f\xdc\x35\x54\x10\x90\xc0\x9b\x10\x4d\x29\x62\x31\x89\x98\x54\x9d\xa6\xc8\x0f\x7f\xce\xbc\x79\xf8\x85\x87\x18\x67\x41\xee\x10\xd5\x82\x5c\x53\xf1\xb3\xe6\x58\x50\xb2\x40\x30\x30\xa7\xf4\x94\x9f\xa3\xb6\x87\xf4\xf1\x4a\xcf\x59\x2b\x2b\xb5\x67\xf9\x7a\x48\xc8\x62\x18\xc9\x96\xf3\x75\xfd\xb0\x82\x34\x92\xad\x42\xf3\x88\x39\xf4\x1b\x4f\x56\x87\xf7\xbc\x34\xbe\xa7\x02\x5f\x72\xe6\x60\x87\x34\x6b\xf4\x6d\xd0\xcd\x4e\x24\x4b\xb4\xa5\xef\x90\xd6\x58\x48\xdf\x41\x6d\xb1\x09\xb7\x31\x2b\x8c\xb3\xfa\x63\xbd\x46\xb4\xb8\x49\xbd\xc6\xb3\xba\x30\xbd\x46\xb4\xf8\x16\xfd\x68\xd8\x6c\xe0\xf7\x1a\xaf\xcd\x02\xef\x35\x68\x8b\x41\xdc\x8f\x35\x36\xbb\xb3\xd7\x88\x0e\x16\x60\xab\x71\xa6\xbd\x98\xd7\x2d\xd6\x55\x8b\x67\x48\x96\x60\x2a\xb4\xde\xb3\x5c\xa8\x55\x87\x69\x8f\x06\x66\x44\x27\x32\x5d\x51\x18\x83\xec\x7f\x71\x90\x2c\x4c\x07\xd2\xc8\x21\xa6\x6b\x8a\x21\x87\x04\xd7\xa2\x4c\x13\x0f\xf8\x29\x65\x84\x4e\x63\x82\x85\xb1\x69\x8a\x3b\xe9\xbd\x81\x62\x12\x67\x47\x6a\xbd\x1f\xee\x02\x07\xe8\x5d\x24\xeb\xe4\xf8\x3f\x30\xcb\xec\x0f\x71\x03\x85\x96\x37\x88\x4e\xc5\x18\x28\x7b\x5d\x1c\xf3\x1b\x2f\x3f\xb3\x8f\x00\xff\x2f\x49\x13\xf5\x81\x0a\x5f\xba\xb7\x39\x69\x31\x30\x96\x28\x4a\xdb\x68\x5c\x1a\x08\x9a\x23\xa8\x38\x41\x02\xa5\xef\x78\xe2\x2d\x28\x9a\x79\x13\xef\xdf\x3d\x5b\x4e\xca\xab\x34\xbc\xbd\xd4\x30\x15\xf3\x4c\x2e\x05\xea\xa3\xa6\xc4\x6b\xfa\x00\x0c\x2d\x9b\x76\x27\xd3\x54\x8c\x50\xf3\x7c\x8f\xee\xc8\x2d\x72\x9c\x68\xd5\x77\xea\xd6\x2f\x55\x20\xbf\xac\x16\x84\xff\x90\x97\x5f\xf7\x28\x50\x1b\x67\xf7\x5c\x22\x12\x97\x9b\xfc\x3a\x2c\xfd\x05\xb7\x6c\x23\x0b\xfc\xd5\x9c\xc2\xf5\xf4\x45\x09\xf3\x4a\x80\xad\x16\x78\x65\x86\x9c\x24\xf0\xfb\xf2\x23\x4b\xbe\xbb\xaa\xa0\x66\x2e\x65\x74\xcd\xbd\x18\x0d\x6c\x78\xdd\x50\x93\x71\x7e\x87\xe8\x9a\x44\x28\x73\x47\x5e\xf7\x2c\x23\x1c\x8d\x51\xdf\x13\x1a\x36\x74\xbb\x6a\x79\x6b\x2b\xab\x10\x8a\x3a\xf2\x6a\xd8\xbd\xc2\xe8\x22\x2c\x9d\xf5\x81\xa4\x71\x97\x53\x6b\x51\xaa\x41\xa8\x46\x2b\x4a\xd5\xff\xff\xbf\xfe\xc9\x6b\x4a\x7b\x76\x4c\x74\x52\x62\x63\xf6\xab\x4b\xca\xce\x67\x6b\x5a\x5e\x39\x0f\x4f\x90\x95\xdb\x37\xdf\xc9\x5e\x11\x4e\x79\x77\xf5\xdf\x35\x27\xde\x6d\x6d\x05\xca\xab\xea\xbe\x86\xfc\x97\x3b\x58\x05\x47\x8c\x80\x37\xa1\x48\x65\x2b\x4d\x4b\x7a\x74\xdd\xd7\xa3\x7e\x58\x5e\xce\x44\xc5\xc4\xde\x12\x91\x61\x92\x3f\xb6\x65\x6e\xa9\x70\x6b\x0e\x66\xeb\xbc\xba\xf2\x2f\x77\x2b\x73\x6a\x2e\x05\xa2\x5f\xe7\x65\xc8\x9f\xee\xc7\x3a\xda\x51\x38\x2c\x2b\xa9\x34\x71\xdb\xf5\x5a\x64\xfb\xbe\x3e\x2b\x29\x75\xfe\xdb\xf5\x3a\x44\xf8\xa0\xd7\x3a\xe4\x4f\xf7\x63\x1d\x2a\x6c\xd1\x73\x2d\xda\xcf\xf7\x63\x3d\x22\x62\xd2\x77\x39\xc5\xaf\xf7\x63\x35\x17\xaa\x71\x7f\xcf\xf5\xe8\xbf\xdf\x8f\x15\xc9\x58\x51\xcf\xf5\x14\xbf\xee\xba\x9a\x36\xdb\xcf\x54\x4e\x55\xb3\xf2\xaa\x83\xf4\xb9\x52\xa9\xa7\x7c\x6d\xe9\x6e\xca\x8e\x2e\xe7\x00\x08\x3c\x22\x00\x9d\x15\x36\x4e\xdd\x21\x05\x22\xe7\x77\xd7\xa8\x71\x40\xfc\x11\x3e\x08\xf8\xb8\x93\x20\x30\xa6\x76\x6f\x14\x46\xce\x5c\xde\xe2\x8a\x8e\x3a\xf1\x6e\xd1\x7a\x2a\x8a\x70\xb8\xbb\x38\x65\x08\x52\x7f\xe1\x80\x8f\x7a\xc5\x1f\xcc\xab\x5b\x18\xb8\x59\x83\x19\xa6\x2c\xc9\x5c\xd8\x09\x08\xa1\xfa\x17\x5a\x42\x5c\x54\x01\xf3\x5f\x5d\x67\x63\xb7\x95\x01\xf3\x79\x38\x61\x80\xf6\xdb\xfb\x35\x55\xdb\xa7\xdb\x42\x87\x61\xd4\xa6\x72\x00\xe3\x9a\xe1\x30\x41\x14\x05\x1f\x24\xca\x7e\xbf\x48\x5d\x63\x23\x05\x19\xd7\xac\xcd\x61\x2f\xa0\xd7\x4d\xd2\xbd\x31\xf0\xed\x93\x80\xd3\xb8\x0d\x7a\x5c\xaa\x6f\xef\xbd\x48\xe4\x13\x91\xc2\xd6\xbe\x32\x1a\x2a\x99\x3b\xe4\x78\xfb\xf2\xe5\xd1\x53\x3b\xa0\xfa\x64\x4b\xa8\x92\xcd\x59\x1a\x86\x91\x8e\x40\x31\x68\x55\x7d\x42\x44\x6d\x36\x82\xa9\x24\xd4\x21\x24\xd4\xe1\x5a\xcc\x55\x27\x37\x60\x64\x82\x66\xce\xed\x33\x48\xa6\xd3\x05\xa1\x83\xed\x65\x37\x28\x44\xf1\xd3\xa3\x4d\xd1\xd9\xa6\x90\x79\x4a\x5b\x37\x2b\x4c\x60\x97\xe7\xd9\x41\xae\xea\xd8\x42\x04\x03\x3e\x23\x08\xd8\x92\x90\x64\x01\x48\x74\x43\x20\x0d\x70\x34\x07\x31\x25\x12\x56\xd3\x7e\xcf\x5d\xee\xe3\xe5\xda\xb3\x8b\x47\xe9\x04\x61\xec\xbd\xbb\x9c\x28\xe2\x08\xb8\xde\x54\x92\x9c\x0d\x35\x13\xc8\xa6\xba\xa4\x0b\xa3\xa7\x42\xbb\xb6\xbb\xbe\xe1\xf6\x5c\x81\x33\x54\x9a\xc7\xc4\x53\xff\xdb\x68\xce\x89\xca\xe5\x92\xad\x26\x86\x90\x33\x77\xee\x97\x31\xa4\x56\xf9\x94\x2c\x97\x10\x30\x94\x69\xfe\x04\x81\x65\x9a\x1d\xe5\x21\x12\xd3\x02\x30\x08\x28\x62\xcc\x96\xe5\xe1\x78\x3d\xb0\x5d\x59\x58\xb2\x52\x96\x53\xd1\xa4\xda\x51\x16\x32\x52\x41\x8a\x60\x45\x1c\xaa\xf0\x53\x94\xac\x58\x5d\x00\xb2\x97\x97\xf8\x99\xbf\xff\x63\xad\x7a\xfd\x79\x23\xba\xde\x5e\x9d\xb4\x0f\xf3\xa0\xd5\xe6\xbb\x5f\x68\xd4\xae\xd8\xf7\x4a\xe3\xda\xdd\x36\x83\x6e\xde\xa0\xf1\xb1\x99\x1a\x7a\xad\x9a\x7b\x94\x3a\x7a\xbe\x1f\x19\x0e\x10\x77\xab\x76\x5a\x40\xff\xf6\x8f\x67\x41\xf8\xf2\xc3\xb1\xb9\x80\xde\xd8\xaa\xd4\xe6\x19\x8b\x35\x35\x5a\x3e\x6d\x8e\x35\xca\x01\xc6\x3a\x1a\x5c\x79\x0d\xa6\xfc\x9d\x70\x98\x9b\xc4\xc9\x32\x50\x1d\x5d\xcb\xa8\xa2\x06\xe0\x63\x49\xe4\x9e\x2f\xe5\x0c\x3f\xca\xc3\xa1\x2f\xbe\x91\xca\x1b\x96\xe3\xa9\xd1\x74\x90\xb5\xfc\xca\xbf\xcd\xc2\x6b\xc8\x83\xf8\x9c\x63\xc6\x65\xb2\xe0\x92\x10\x91\x2f\xac\x6c\x8a\x59\xed\x3e\x97\x16\x8d\x87\x13\xef\x24\x0c\x8b\x24\x9d\x67\xa5\x3e\x87\x13\x2f\x44\xd1\x3c\x59\xd8\xb3\x75\x1a\xbd\xcb\x6a\x45\xc4\x02\x32\xad\xab\x6e\x63\xc0\xa5\x94\x83\x31\x2f\xc0\x76\x28\x21\xc9\x19\xf1\x4f\x49\x1a\xf1\xb8\xd6\x61\xd7\x6c\x8b\x8d\xc9\x5a\x1a\xa9\x86\x9f\xbf\x16\x12\x36\x58\xe6\xca\xa3\x76\x93\xbd\x1d\x4b\x60\x1f\x39\xfc\xa0\x2f\xb7\x90\xc8\xe3\x49\x85\xf1\x2e\x92\xe8\x16\xed\x68\x6b\xd6\x5d\x95\xdf\x12\x42\x4b\xf3\x05\xa1\x63\x66\xee\xf8\x62\x98\xe4\x33\x19\x49\x02\xf3\x01\x3b\x0b\xdf\x2e\x25\xaf\x9b\xd8\xe5\x59\xed\x65\x25\x58\xd4\x7e\x76\x54\x82\x3d\x53\x49\x9b\xe5\xab\x7e\xc3\xb9\x33\x01\x53\x75\x95\xe3\x48\x97\x18\xed\x13\x16\x2d\x51\x87\xd0\x70\xb8\x9e\x89\xd5\x0f\x14\xae\xad\xb0\x5d\x56\x05\x8f\xc3\x75\x3e\xd8\x27\xcc\xf4\x0b\x7c\x87\x1a\x58\x7e\xc1\x97\xbe\x41\x75\xa2\xeb\x81\x8d\x49\x03\x0c\xc6\x33\x71\x60\xd0\xd5\xb0\x79\x28\x46\x75\x10\xa0\x00\x50\xe4\xa3\x28\x09\xd7\x65\x79\x10\x9f\xf2\x5b\x9e\x21\xf6\xf5\x16\xcc\xda\x38\x18\xd3\x9a\x90\xc3\x7d\x92\xfc\xfe\xc0\xd7\x66\xe7\xf8\x07\xb9\xfe\xe1\x4c\x6f\x89\xde\x14\x9f\xf5\x83\x67\xda\x5a\x40\xa1\xb1\x67\x57\x9f\x90\x42\xdd\xdf\xf4\xdd\x9c\x4d\x53\x87\x2e\xeb\x6f\xc6\xf3\x2c\x07\xb7\xe6\xaa\x6d\x32\xbd\x6b\xb5\x2b\xb0\xf0\xc8\xdb\xac\xe8\xec\xb8\x19\x5f\xb1\xc0\x40\x2e\xe4\xa7\xb1\xe6\xe8\x48\x1c\xc0\x79\xd0\x60\x34\xe7\xf1\xc8\xe2\x3d\x56\x04\xa6\x23\x16\xd6\xf6\x42\xb1\x7a\xc8\x74\xbc\x18\x6c\x9e\xda\xb2\xd3\x18\xec\xf3\xf8\xdb\xf8\xed\xcb\xf3\xcf\x9b\x63\xb0\x22\x04\x9b\x6a\xc9\x3a\x75\xdd\x30\x5a\xb2\x4e\xc3\x7f\x0d\xf9\x3a\xa5\xf0\x17\xa1\x7a\xf4\x4c\x83\x33\x50\xa9\x34\x31\x8e\xae\x12\x71\xac\x60\x76\x89\xa3\x08\x19\x8b\x94\x60\x9a\x2c\x50\x94\x70\x74\xa6\xf6\x42\xa5\xea\xc2\xb5\x6e\x14\x8a\x02\xea\xf2\x03\x52\x4a\x38\x44\x81\x77\xaa\x3a\x60\x34\xe4\x21\xed\x6b\x5d\x6e\xdb\x25\x59\xad\x1c\xb7\x7e\xd0\x98\x99\xd0\xa3\xab\x5f\x03\xc8\x7d\x9e\x4c\xd6\x78\x0e\x7c\x88\x62\x1c\x79\xa5\xda\x57\x9e\x44\x75\x43\xc8\xed\x32\x13\xd6\x21\xf5\x95\x2e\xa2\xb4\x9d\x65\x5e\x96\x17\xf9\xca\xb8\xba\xda\x3b\xdd\xe3\x7e\xa6\x90\xb5\xbe\xe9\xb6\xb9\xd6\x4c\xf0\xcf\xb9\xfe\xd4\x97\x7c\x46\x56\x51\x48\x60\xd0\xcf\x29\x1c\x21\x28\xda\xf2\x22\xd3\xee\x30\x86\xb5\xf4\x32\xaa\x71\x14\xd0\x5b\xb4\xfa\xf4\x95\xcf\x26\x84\x6c\x19\x27\xeb\x33\xe2\x4b\xdc\x25\x6d\x7b\x85\x30\xba\x05\x3e\x8c\xee\x20\x73\xb8\xdb\xd1\xf0\x41\xb6\xbe\x51\xd4\xbb\x4d\xcb\xf8\x92\x43\x2a\x16\xb1\xf1\x7e\xfb\x66\xa4\x89\xbe\x5e\x66\x3b\xda\x34\x4d\xf1\x0d\x98\xe1\xb0\x0d\x61\x65\x7b\xdb\xb7\x6c\x81\x94\x37\x72\xb5\x4c\xb4\xe1\x09\x73\x7d\xab\xbd\xa5\xc5\x90\x84\xe4\x10\x47\xb7\xd7\xc4\x9c\x8c\xe1\xd4\x7f\xa0\x9e\x90\x2c\x20\xd1\x55\xe2\x02\xcf\x60\xca\xcc\xdd\x27\x4c\x6b\xbc\xe7\x9c\x9c\xeb\xc2\x80\xa6\x34\x4f\x94\xed\xd4\x69\x40\xfc\x9d\xa7\x77\x56\x07\xdc\xc7\xac\x4e\xa1\xbe\x4e\x0d\xea\xab\xdb\xc0\x4e\x79\x9c\xfd\x92\x2c\x4f\x82\x40\x69\xdf\x7d\x4a\xb2\x2c\xe4\xac\x7a\xa3\xa1\xc0\x2a\x9b\x3a\x3b\x56\x5f\xd2\x9e\x68\xa9\x12\xec\xca\x89\x96\x79\x39\x47\xb5\xbf\x63\x65\x6a\xe5\x1e\x8f\x48\xd2\x32\xef\x78\x2b\xf2\x2d\xc5\x93\xd5\x9e\x8f\xfa\xc3\x0d\x8d\x1f\xf3\xd4\xcd\xe6\x16\x90\x5a\x7a\x67\x1e\x27\xb5\x75\xd0\x75\xbc\xc7\xf9\x4d\xe6\xf8\xc1\xc8\x17\xed\xb9\x3e\xf5\x24\xbf\x16\xf0\x81\x06\xc5\xb0\xd1\x0c\xbf\xe6\x43\x47\x59\x4e\x8f\xe7\x8e\xe3\xb9\xc3\xed\xcd\x6b\xa3\xbd\xb9\x4f\x07\x8f\x66\x32\xef\xd3\xd9\x53\x12\xb7\xbd\x3b\x7e\xea\xb3\x2b\x9f\x40\x49\x41\x54\xa7\x43\xa8\xf2\xfc\x5e\x9d\x43\xed\x4c\x5f\xe1\x60\x8e\x92\x69\x88\x59\x62\xef\x60\x59\x1d\xb0\xa1\x23\x26\x51\xbd\x6d\xdb\x4a\x37\x93\x9e\xae\xa6\x8b\x1f\x27\x2e\x6b\xc4\x54\x6a\xd7\x35\x4f\x87\x5d\xd7\x5c\xf1\xa7\xaf\xb5\xb4\x2a\x3e\x64\xfb\xfd\x8c\x2b\x47\x8a\xaa\x8f\x84\x8a\xfc\xc1\x36\x8e\x98\xb6\x8c\x58\x67\x15\x25\xeb\xc5\xc4\xbb\xa1\x35\xa4\xdb\xe2\x79\x74\xef\x23\x1a\x57\x6f\x59\xda\x97\xd3\x14\x56\xa8\x51\xbb\x2f\xac\x96\xfd\x72\xcb\x0d\x91\x92\x9f\xfd\xce\x5d\x58\x5a\xca\x30\x1d\xfc\xf8\xa7\x2d\xa3\x74\xb8\xbb\x7a\xb4\x2d\x1f\x6d\x4b\x87\xb3\x7f\x47\xe6\x25\xe6\x61\xaf\x47\xe3\xd2\xb5\x54\x55\x44\x09\xbf\xb4\x44\x09\xc7\xb3\x2d\x1b\xb1\x0d\x04\xcf\x7e\x95\xed\x9e\xdb\x6c\x46\xb5\x0f\x9a\x59\x2f\x7a\x3a\xc9\xe7\x2a\x2f\x0b\x96\xbf\xaa\x1d\xb8\x46\x61\x48\x56\x53\xbe\x7f\x40\xa5\xef\x04\x17\x0f\x61\xd3\x15\xe3\x38\x98\x22\x86\x23\xad\xe9\x17\x7c\x97\x82\x84\x00\x71\x26\x89\x50\x2d\x20\x14\x04\x14\xce\xf9\x15\x85\xf8\xa8\xe3\xeb\xba\x4d\xe2\x49\x40\xfc\x09\xc8\xfe\x7b\x3f\x01\x4f\x96\x41\xf6\x1f\x48\x6f\x03\xb2\x8a\x36\xf7\xde\x21\x46\xa2\xe4\xb2\xbc\x6b\x6f\x35\xed\xc4\xe3\x57\xf2\xe9\x9e\xa0\x1c\x71\x0d\xce\xa9\x8c\x11\xdc\x1d\x29\xe9\xf1\x6c\x1d\x7e\xb6\x0e\x3e\x47\x9c\x50\x10\x44\xce\xc9\xe3\x61\xe2\x70\x98\x88\xeb\x65\x00\x19\xf8\xfa\xfa\xcd\xc5\xb8\xc7\x89\xd7\xb7\xfc\xab\xf1\xde\xad\x0e\x95\x20\xa7\x1f\x86\xb2\x59\x9a\x6a\x25\x2a\x17\x94\xa9\x66\xa9\xaa\x8b\xb4\xbe\x27\x46\x97\x63\x84\x1c\x40\x39\xd1\xfc\xea\xda\x5f\x20\xff\xf6\x86\xdc\x17\x9b\x51\xf3\x15\xf3\xdc\x3f\x21\xad\x57\x9a\x93\x53\xbf\x33\xb6\x25\xbc\xb5\x5f\x27\x0d\x48\x5c\xeb\xc0\x8b\x93\x1a\x13\x56\x38\x0c\xc1\x0d\x02\x62\x85\xa2\x31\x17\x04\x0c\x47\xf3\x10\x65\x6c\x99\x4d\x51\xe4\x87\x84\xa1\x40\x30\x2b\x3b\x3a\x6b\xcc\x69\x45\x2b\x7e\xd4\xae\x9f\x8c\xe7\xa2\x25\xbb\x34\x3b\x2f\xea\xa1\x87\x56\xf5\xae\x67\x46\x0e\x4a\xb5\x94\x4d\xd5\xb3\x5d\x06\x71\x84\x76\x9d\x66\x79\xf8\xfc\xfe\xef\xef\x7f\xbe\x5e\x98\xd3\x2c\x7f\x27\x07\x34\xb4\x88\x7f\x36\x39\x2a\x9f\xeb\x63\x50\xbb\x4a\x9c\x31\x28\x3d\xa7\x38\xd8\x1b\x72\xa3\x93\x17\x7f\x5d\x7f\x15\xc5\x7b\x45\xee\x32\x85\x46\xa5\x39\x4f\x28\xdd\x29\xc5\x3f\x7b\x4d\xbe\xbe\x7a\x77\x15\x0c\xa2\xf8\x66\xc8\x8d\xa2\x64\x34\x62\xe7\x20\x13\x29\x4b\xc8\x72\x9a\x2b\xdf\x5d\x92\xfe\xf5\xab\x5f\x0f\xfe\x7e\xba\x3e\xd9\x33\xd2\x1b\x49\x35\x3a\x23\xe6\x64\x9a\x90\x78\xc7\x1c\xb8\xb8\x3e\x7b\x39\x9f\xfb\xdf\x1a\x39\x60\xc2\x30\xb1\x5d\xa9\xb4\x06\xd9\xbf\x22\xd7\x24\xef\x75\xde\x78\x87\x22\x2d\x8e\x92\xd5\xa6\x1a\x60\x16\x69\x9e\x79\x42\x58\x6e\x7c\x2f\xc8\xea\x0c\x85\x90\xbb\x29\x2f\x9e\x1f\x9a\x73\x33\xbf\x22\x20\xe1\x73\x70\xc8\xd2\x1a\xdb\x54\x68\x96\x82\xb1\x85\x6b\xd7\x87\xd8\xb7\x2f\x7e\x60\xdf\xcf\xa3\xfd\xdc\xd7\x63\x10\x3b\x24\x73\xc2\xdd\x6d\x1c\xcd\x77\x4c\xec\xeb\xeb\xc5\xcd\xd3\xf7\xbf\x9a\x89\xdd\x05\x86\xa8\xb4\xa6\x16\x57\x9f\x67\x67\xb6\xfb\xce\x6d\x91\x43\xbf\x31\x8a\xdb\xe5\x4a\xef\x78\x92\xcf\xa7\x21\xce\xd9\xee\x75\xb6\x54\x47\x64\x62\x37\x7c\xbd\xd9\x28\xd3\x96\x45\x97\xdc\xb4\xec\xd9\x29\x7f\x77\x39\x2f\xf6\x63\x75\x5e\x0d\x6e\xd2\xe0\x75\x67\x32\x31\xd2\xba\xc5\x50\x56\x66\x2f\xe7\x25\x76\x33\xea\x4b\x66\x8b\xc9\xc0\x38\x7e\xc3\x69\xe1\xa1\x28\xe0\x4d\x02\xf9\x8a\x0e\x78\x5f\x77\x9f\xef\xc9\xbf\xf8\x37\x7f\x96\x22\xe1\x43\x7f\x81\x5e\xa5\x4c\x56\x04\xcb\x29\xb1\x64\xcd\xc3\x75\x4b\x78\x2f\xba\x1d\x7e\x01\x8e\x0f\x0f\xe3\xfb\x3f\x81\xec\x93\x05\xca\xfc\xdf\x2f\xc0\x11\xff\xc8\x73\x92\xa6\xae\x15\x28\x96\x88\x87\xc3\xdd\x7f\x53\x78\x51\x8a\x8d\x54\x4f\x31\x9c\xa3\x42\x3d\x29\xd1\xc9\xab\x73\x65\x8e\x85\xf8\xd3\x2a\x3c\x86\x61\x79\xa7\xf3\xa2\x50\x4e\xf6\x3d\x97\x48\x08\xfc\x2f\xf3\x88\x6d\xf7\x87\x5d\x4b\x99\x47\x3d\x1f\x74\xdd\x67\x3e\x1f\xfe\x47\xa7\xf3\x61\x09\x33\xb9\x9b\x46\xf0\x0e\xcf\xe1\x1e\x58\xda\x87\x27\xc1\xe5\xf3\x5f\x7f\x3e\x37\x9f\xc8\x31\xce\xac\x33\x5e\x60\xd6\xe1\xbc\x88\xe0\x5d\x66\x6a\x74\x0c\xa1\x17\x8e\xb6\x11\x3b\x3d\x0a\x11\x57\xf1\x32\xa2\x8c\x03\xf4\xb6\xa0\xa1\x53\xb0\xb6\xe5\xfd\xb6\x14\xa4\x10\x47\xb7\xd3\x84\xd4\x4b\x87\x28\x49\x13\xb9\x73\xda\xe0\x15\x5e\xf3\x22\x11\x85\x4f\xc7\xb4\x64\x2d\x91\x70\x94\xc7\x88\xd5\x27\xc5\x13\x22\x94\xc4\xab\x16\x9c\xe3\xb4\xa3\x14\x74\x7f\x45\xcb\xcd\xed\x5a\xaf\x55\x5d\xcd\xf0\xa3\xc3\xc3\x06\x3b\x5c\x75\x07\x6f\xb3\xc3\xad\x97\x73\x5d\x9b\x78\x56\x0e\x91\x00\x27\x79\x1f\x97\x2a\x65\x2e\x29\x09\x52\x3f\x51\x90\xbe\x31\xc5\x0c\x9d\xe7\x3f\x68\xad\xae\x35\x16\x56\xde\x61\xb4\x3a\x83\x6c\xc1\x01\x9e\xad\xb5\x71\xa3\x0a\xa2\xf0\xb2\x3a\x49\xa2\x74\xcc\xba\xf7\xbc\x1d\x45\x1c\x2f\x30\x4b\x5e\xa5\x61\x88\x12\x67\xa1\x1c\x53\x34\x4f\x14\xbd\x3a\xca\x66\x0f\x09\x1d\x9d\xcf\x77\x38\x59\x77\x65\xb4\xf8\xcd\x6e\x58\x7d\x99\x86\x0c\xed\x8c\xcb\x6a\xe5\x1b\x64\xb3\x2b\x34\x5c\x59\x4b\x9c\x44\x30\x5c\x27\xd8\xb7\xe3\x9a\x8c\x2b\x3d\xc5\x2b\x3b\x88\x8f\x36\xcf\x9d\xc8\xcf\x2b\x48\x4f\x17\x90\xee\x46\x51\xbc\x47\xd2\x9e\xdb\x89\x04\x6d\x4f\xb1\xb0\x52\x13\x21\x17\xb9\x50\xbf\xd8\xb6\x21\xa3\xda\x1d\x6d\xd7\x94\xc9\x17\xbb\x21\x53\xc6\x76\x1d\xee\x7c\x23\x6e\xb3\x7b\x8d\x7a\x08\xb3\x13\xd1\xab\xc9\x56\xc3\x5f\x36\xd7\x0b\xdb\x4a\x54\x30\xf4\x2a\x13\x6f\xc2\x58\x52\x62\x27\xcb\x23\xa6\x71\x08\xf9\xfc\x9b\xfb\xc8\xe3\x30\xe4\xa1\xac\x76\x95\x30\xa6\x0c\x9e\x44\x11\x49\x23\xbf\x7e\xaa\xd9\x92\xfe\x5a\x84\xb1\x89\x88\x6f\x30\x63\x38\x9a\x03\x7e\x8c\x73\x1f\x09\xdc\xa2\x5e\x47\x5a\x27\xb3\xa5\x91\xed\x3e\x89\x66\x78\x9e\xd2\xbe\xb8\x21\xa3\xf1\xfe\x54\x9f\xc8\x27\xcf\x7e\xde\xd7\x83\x21\x7a\x87\x28\xd0\x6a\xd6\x37\x26\x04\xdd\x8d\x1a\x47\x4c\x99\x5a\x3e\xd9\x25\x8e\x7a\xa2\x4d\xd8\xf5\xa0\xa7\xa7\x15\xf2\x7e\x4a\x31\x8e\xd8\xd4\x2d\xb1\x78\x6c\x1b\x46\x82\xdc\x5c\x91\xd0\xe0\x86\xd7\x32\xd9\x36\x08\x73\x42\xd2\x04\x48\x78\x93\x8e\x30\x27\x1d\x18\xe0\x82\xb7\xb4\x80\x8c\x07\x08\x7a\xb0\xdf\x30\x93\x10\x37\x36\xf0\x03\xb5\x94\x49\x15\x98\x68\xcb\x21\x64\x23\xcc\xaf\x98\x22\xb4\x23\x8e\x64\x9f\x2d\x28\x9a\x79\x13\xef\xdf\xd5\xdf\x01\x4c\xe0\x14\xcb\x4e\x72\xc7\x39\x0e\xa0\xf8\x52\x7c\xfe\x52\x40\x57\x4d\xab\xcf\x58\xae\x5f\x7f\x4e\x97\xf1\x35\xb9\xc4\x91\x57\xe4\x54\x7f\xac\xa6\x59\x7b\x12\x8b\xaa\x53\xae\xb5\xab\xd2\xd0\x10\x99\x76\xc0\xfe\xd3\x22\x0b\xd7\xce\xff\x60\x9c\x39\x8e\x27\x02\x47\x0e\x22\x70\xd4\x43\x04\x8e\xea\x22\x70\xd4\x4d\x04\x6c\x09\xa9\xc3\x0b\xe9\x3a\xd5\xd1\xf5\xc2\x03\x6a\xd2\x64\xfc\xdc\x98\x53\x78\x07\x13\xd9\xbd\xc5\x10\xd8\xee\xac\x1f\x4b\xa3\x96\xce\xa9\x98\x92\x19\x0e\x51\xb7\x53\xea\xa8\x06\x15\x98\xbd\x20\x13\xac\x08\x27\x18\x86\xac\x5e\xce\x69\xd4\xc7\xdf\x2f\x60\xc2\xde\xa2\xd5\x90\x82\xdc\xc6\x32\xe3\x6c\xec\x69\x84\x56\xd3\x80\x24\xf5\x5b\x37\x77\x80\x7d\xdd\x7b\xf9\x2a\x24\x37\x30\x6c\xf7\x61\xb4\x9f\x17\x86\xac\x80\x32\x3e\xb9\x83\x38\x84\x37\x1d\x90\xf9\x3b\xb2\x9a\xbf\x65\x0a\xd5\x6b\xba\x2e\xdf\x4a\x96\x4f\xcf\x4e\x68\x21\xb4\x53\xd8\x43\xe8\xd3\x7c\x2f\x35\x84\x28\x2e\x8b\x6f\xbb\x82\xe1\x75\x70\xa0\x5d\x0f\xb0\x26\x0a\x05\xf8\x0e\x6b\xa7\x57\x8b\x83\xd1\x9f\x56\x22\x0f\x0e\xff\x8a\x9e\xcc\x51\x84\xa8\x40\x35\x33\x06\x42\x5c\x5d\x0f\xf3\x6d\xdf\xb0\xf0\xc1\xa0\x55\x82\x1b\x12\x06\x80\xf2\x60\x56\xb1\xdc\x9b\x22\x82\x60\x98\x82\x80\xfb\x06\x5a\x98\xa1\x6b\xa5\x46\x7f\x7f\x6a\x3f\xd4\x5b\x7f\x4a\x8b\x42\xcf\x12\xb1\x63\x79\xe3\x66\x25\x36\xd4\xa6\xbc\x01\x72\x0f\xd2\xe6\x7d\xb6\xa3\xd5\xf6\xab\x62\x89\x94\x4f\xe1\x49\x4d\x70\xa5\xa9\xa8\xbc\xc7\xaa\xc5\xd8\x18\x2c\x91\xe3\x29\x4d\x9b\xbd\xe3\xa7\xff\x93\x01\xfe\x71\xe7\x75\x68\x84\x91\x2f\x5f\x24\x49\xcc\xbe\x38\x38\x08\x88\xcf\x9e\xa8\xec\x89\x27\x3e\x59\x7a\x79\x9d\x1e\x9d\xa3\xc4\x9b\x78\xff\xeb\x26\x84\xd1\xad\x67\x30\xd4\xb5\x83\xe0\x6b\x14\xc6\x46\xf3\x5c\x87\xfe\x8a\x32\x19\xb9\x20\x73\x92\x26\x0f\x5f\xff\xc2\x34\x59\x3c\x09\xd5\x62\x4c\xcb\xc8\x57\xda\x7b\x4f\x6c\xcf\x04\xef\x3e\x76\xaf\xab\x2f\x15\xe8\x29\xc8\x87\xdd\x2f\xb4\x75\xc3\xd9\x54\xc9\x74\xa1\x46\xeb\x0f\x0a\x69\x8d\xeb\xb7\x93\xd8\x96\x4d\x35\x76\x72\x54\x2d\x99\x69\x8c\x0c\x5a\x39\xe8\x7e\x60\xc9\xdf\xff\x31\xfc\x79\xb6\x3a\x4d\xba\x26\x2c\xdb\x92\xf5\xe4\xc2\xc6\x49\x8f\xd2\xc4\xb2\x5c\xe8\xb3\x85\x0a\x37\x23\xc3\xc6\x10\x01\x2d\x9d\x70\xa7\xdc\xff\xfe\xf5\x72\xf6\xd9\x15\xfb\xca\x2d\x83\x5a\xd6\x5f\xca\xc4\x47\xc9\xc2\x0d\xd0\x3b\xa7\xce\x68\xa4\xde\x8f\x7c\xf5\x17\xbf\xd0\x67\x4f\x7d\xb6\xec\x44\x6d\x95\xba\x6a\xd0\xb7\xa3\xd2\xdb\x9a\x02\xea\x48\x72\xd9\xc1\xff\x80\x2d\x20\x45\xd3\x99\x84\x9c\xdb\x29\xcd\x17\xdf\xe3\x93\xe0\x97\xb7\x97\x83\x6b\x04\xe4\xda\x70\x34\xb7\xc4\xbb\x5a\x54\x1c\x4b\x32\x4a\x1f\x35\x29\xb8\x21\x18\x84\x5e\x4b\x3f\x79\xf1\xe6\xe9\x0c\x53\x96\x54\xa0\x07\xbf\xcc\x3e\x03\x51\x33\xee\xa0\xba\xf2\x11\x50\x83\x35\x68\x0a\xd3\xd0\xd9\xb7\x0a\x7f\xb0\x6a\xd5\x96\xb0\xfd\xf4\x3f\xa6\x61\x0e\x2d\x21\xe1\x6e\xf4\xbc\xef\xd6\x5c\xf4\xed\x51\x31\x84\x35\x22\x5e\xc0\x31\x68\xa8\x0f\xbc\x43\x12\xb6\x26\xa4\x3f\xad\xf6\xd6\x4a\x5c\x4a\xed\xf9\x52\xab\xf5\xf6\x12\xed\x5c\x90\x3c\x1b\x5b\xd1\x22\xd2\xb0\x27\xfb\xd4\xde\xab\x5b\x69\x4a\xc9\xea\x3d\x7f\x99\x31\xdd\x55\x19\xb6\x6f\x39\x9d\x5c\x12\xf8\x3b\x6c\xf5\xe3\x9d\x6d\xf5\xe3\x69\x0c\x19\x5b\x11\x1a\xe8\x57\x3c\x0b\x42\x18\x02\x97\xda\x37\x3d\x45\xb5\x3c\xfc\x48\xa2\x5a\x9d\x71\xf3\xdc\xd8\x12\x86\x66\x9c\x4d\xfe\x86\x02\x2a\x72\x99\x4a\x50\x12\x05\x9c\x8e\x92\x15\x42\x11\xf8\x0c\xc0\x28\x00\xcf\x0f\x81\xbf\x80\x14\xfa\xdc\xd5\x30\xe7\x17\xed\x4c\xcd\x14\x24\x9e\xf2\xe4\x12\xba\x2c\x5f\xd6\x65\x9f\x8c\xcb\x4a\xfd\x3d\x0f\x87\xa5\xef\xd1\x34\x7b\x19\x58\x93\x94\x02\x7f\x41\x18\x8a\x40\x6c\x21\xcb\x1e\x2b\xbd\xe3\x6d\x2b\xbd\x2b\x3c\x8f\x5e\x47\xa3\xab\xbd\xa7\x16\xb5\x17\x9b\xef\xc1\x20\xd6\x0b\xbc\x2e\x43\x04\x19\x02\xd9\xa7\x4f\x9e\x3c\xa9\x71\x6c\x2b\x21\x00\x93\x31\x3b\xc8\x3a\x16\xa9\xa1\xf2\x7f\xa6\x14\xb1\x34\xcc\x98\xb1\x53\xf3\xf8\xf3\xf4\xfd\xed\x0b\x0c\xff\x66\x76\xff\xc5\x1c\x3d\x75\xa3\xc6\x0d\x5e\x77\x8b\xf9\x0e\xa3\xd5\x34\xcf\xa0\x2d\xc9\x83\x21\x70\x19\x74\xe8\x45\xd5\x22\x84\x5c\x4d\x50\x21\xfd\xa6\x4a\xab\x9d\x34\xbe\xeb\xd1\xf1\xc5\xda\xe8\x25\xc7\x13\x6a\x03\x61\xca\x1f\x1d\xb5\x71\x94\x84\x15\x57\xb8\x6f\xf6\x5b\xd3\xca\x65\x69\x46\xcb\x24\x21\xcb\x29\x8a\x82\x4e\x81\xc9\xa1\x28\x0c\xa7\x94\x30\x71\x47\x07\x38\x3c\x97\x68\x98\xdb\x70\x3d\xa0\x32\x7e\x32\x1a\x58\x0a\xac\x3b\x44\xcd\x9d\xf3\x24\x5c\x4f\xa4\x23\x53\x8b\xdb\xce\xd3\xaa\xa0\x8d\xba\xd5\x10\x34\x23\x9d\xa7\x78\x2a\x02\xd0\x12\x37\x1d\x54\x3f\x98\x2e\x08\xc5\xbf\xba\xbd\xaa\x9c\xcb\xd4\x0d\xd2\x9c\xdf\x1b\x12\x9a\xbc\x5a\xe7\x5d\x56\x7b\xa0\x9a\x27\x7c\xfb\x14\x03\x74\x42\x1c\x77\x2f\x69\x76\x81\xfd\x77\xbb\x56\x18\x9f\x76\x3e\x45\xb0\x2f\x28\xbc\x22\x9f\x36\xc6\x86\x28\x78\x2a\xde\x00\x82\xe6\xd6\x14\x3b\xa7\xa4\xb8\x7d\x1e\x46\x49\x6d\x8c\x0d\x51\x92\xc7\x32\xf2\xd7\x8c\x4a\x49\x87\xa7\x1a\xfc\xb0\x47\xfd\xb8\x51\xc9\x84\x1c\xbe\xa0\xbf\x54\xca\xdf\x6f\x48\x22\x4f\x98\x8f\x22\x85\xce\xb2\x8f\x1b\x5b\xc2\x3f\xf4\xa7\x9f\x1a\x60\x43\x04\x3c\x43\x1b\xa2\xe0\x76\x37\x74\xcd\x05\xb7\x67\x7f\x36\x3a\xe5\xca\xc8\xcf\xfd\xf2\x3a\xe8\x67\x83\x83\xad\xac\xeb\x1f\x44\x1a\x8f\xdd\xbb\x6e\xc7\xfc\xbc\x92\x02\x54\x64\x9c\xb7\xa2\x7f\x36\xd0\xb5\x47\xfe\xb9\x43\x32\x83\x25\x28\xd6\x0b\xb5\xa4\xad\x2c\xa7\x45\xaa\x85\x43\x3a\x65\xe9\x72\x09\x69\x8e\xca\x2c\x6f\xca\xc4\x97\x97\x0b\x0a\x99\x7e\x61\x56\x8b\x1c\x34\xab\x66\xcd\x07\x6d\xc3\x72\x2f\xbb\xab\x3f\xfe\xe8\xf1\xea\x33\x95\x64\xee\x02\xd3\xd1\x90\x9c\x6f\x46\xd3\xf6\x5a\x32\x67\x7e\x49\x11\x5d\xe7\x49\x20\x1c\x05\x18\x85\x7c\x19\xfc\x37\x52\x73\x2d\x20\x5b\x68\xbf\x4d\x29\x45\x51\x72\x09\xe7\xe8\x35\x0f\x07\x92\x94\xfa\xb2\x42\x56\x26\xcc\x27\x68\xf9\xba\xd4\x74\x3d\x73\xe6\xff\xca\xdf\x25\x62\x46\xf9\x74\x9f\x48\xbc\x71\x21\xeb\x34\xf3\x3d\x8b\x71\xb8\x84\xa8\x81\xb4\x8f\xae\xc2\x74\xae\x7f\xa8\x06\x2b\x3f\xaa\x3e\x95\x4f\xe7\x3b\xc4\xbd\xc2\xb6\x51\x49\x2a\x58\xa0\xb6\xa4\xf5\xa3\xda\x64\xda\x72\xc7\x3f\x9f\x78\xf3\x44\x23\xc1\x1d\xa2\x0c\x93\x88\x13\x3a\x44\xd1\x3c\xe1\x65\xb3\x87\x8e\x9d\x63\xcd\xcb\x62\x31\x8c\xcc\x91\x17\xf1\x32\x6d\x65\xff\xfa\xe7\xbf\xfe\x59\x5e\x48\x31\x21\xc7\x5a\x86\x7e\x9d\x03\x1c\x42\x86\x99\x24\x78\xb5\x2a\x0b\xf9\x71\xc3\x3e\xee\x32\x7e\x84\xe3\x18\x25\xf5\x37\x18\x9a\x3a\x35\xf7\x6b\x3a\xd2\x5a\x73\x8d\x5b\x96\xa7\xb7\x6f\x96\xdc\x32\x77\xd8\xeb\xce\x12\x79\x06\x4a\xa0\xe6\xbc\x19\x49\x02\xe7\x4c\x8b\x7b\xc9\x8f\xaf\xb3\x4f\xb5\xcd\xcf\x9f\x32\x45\x86\xfb\x15\x6c\x5b\x8a\x63\xcc\x99\x5d\x1b\xca\xe9\x31\x46\x61\x47\x8c\xeb\xde\x61\xb4\xda\x75\xce\xc3\xcb\xc3\xf3\xe7\x8b\x3f\xbe\x1d\x9c\xf3\x60\x89\xe0\x2a\xa9\xee\xd7\xa3\xf1\xaa\x84\xab\x60\xba\xef\xc1\x51\x88\xcd\x2d\x78\xc6\xb8\x7c\xcb\x37\x86\x9f\xb2\x69\xa5\x85\x62\xa5\x7b\xa2\x1a\x57\xef\xa2\x28\xda\x25\x16\x37\x35\xb7\x68\xbd\x22\x34\x10\xa1\xc5\x72\xeb\x42\x3a\x7d\x0a\xa4\x64\xf0\x86\x09\xf9\xb3\x13\xa0\x36\x98\x03\x7e\xe1\xe8\x2b\xdf\x21\x16\x7e\x01\x1a\xe1\x2e\x20\xae\x44\xaa\x5f\x0c\x95\x2f\x19\x78\x75\x45\x05\x2a\xc3\xa9\x5f\x7b\xc3\xdd\x8d\x22\x5c\xfe\x81\x26\x0a\xea\x9d\xea\xbb\xdc\x8a\xd2\xa4\xc5\x51\xb9\x5a\x67\xd8\xff\xde\xb2\xf1\x36\x8e\xcb\xc1\x94\xa2\x60\xfa\x22\xfb\x6d\x2e\x4c\x3f\x90\x94\x4a\x69\x06\xdc\xe2\x04\x98\x81\x84\x10\xc0\x16\xa2\x73\x41\x7b\x83\x8b\xcd\xaa\xf3\x4c\x61\x0d\xd4\xe5\x5c\x1c\x0f\x20\xa6\x09\xbc\x09\xd1\x41\xa6\x0d\xa6\x28\xc0\x09\xd9\x75\x26\xdb\xf5\x3d\xfb\x7e\xf9\x22\xfa\xd9\x3d\x7b\xb0\x80\xaf\x2c\x83\xf6\x46\x25\x54\x4c\x19\x7b\x28\x30\x69\xbd\x13\xb9\x78\x6f\xe2\x5d\x42\x9a\x00\x16\x53\x04\x03\xb6\x40\x28\x99\x80\x38\xfb\x24\x80\x09\xbc\x81\x0c\x4d\x78\x1a\x05\x8a\x12\x4c\x51\xb8\x06\xb3\x10\xdd\xe3\x9b\x10\x81\xdf\xab\xca\x07\x45\xc7\x27\x3e\x59\xfe\xc1\x72\x33\xf3\x3a\x4a\xd0\x9c\x42\x05\x3f\x66\xda\xf0\x6a\x3b\x2b\x16\x65\xef\xcf\x39\x53\x35\x66\x3c\x65\xf5\xf0\x1c\x04\x7e\x7f\x87\xd9\x19\xa6\xc9\x5a\xa8\x33\xd1\x79\x84\xb7\x0c\xf4\x15\x2a\x42\xd9\xb1\x2b\xf6\xab\x1c\x28\xff\x9b\x8f\x67\x53\x5f\xea\x4d\x0a\x14\xc8\xa2\xe7\x54\x0b\x94\xf6\x27\xf3\x79\xda\xbd\x9f\x41\x67\x84\x67\xcf\x4b\x51\xcc\x9c\xa2\xe5\x0d\x0a\xa6\x3e\x09\xf4\x03\x5a\x49\x0d\xe0\xdf\x02\xf5\xad\xe9\x10\x93\xc2\x99\x1d\xa1\x90\x22\x0d\xe2\x57\x1d\xba\x94\xac\x78\xfd\x4b\xd0\x70\x00\x57\xda\x17\xab\x3f\x29\x45\x1c\xb8\x90\xff\x05\x63\x9c\xc0\x30\x53\x82\x99\x8f\x81\xc2\x90\x77\x2d\xd2\x18\x0d\x39\x80\xf0\xc4\x7b\xda\xb0\xb4\xc6\x2e\xc4\xaa\xef\xb1\x7c\x8a\xcc\x66\x95\xff\x72\xd1\xb5\x1e\xed\x43\x12\x5e\x2e\x21\x4b\x10\x48\x16\x08\x18\x48\x0e\x34\x77\xc7\x7a\x34\x5a\x82\x42\x23\x28\xe5\x66\x2d\xba\x01\xf5\x4c\x51\x14\x20\xba\xf3\x54\xe3\xbf\x2f\xef\xae\xc8\xd5\xe5\xcb\xc1\x66\x77\x44\xa2\x69\x4c\x71\x24\x94\xb0\xc9\xf0\x3e\xd2\x55\xd1\xc4\x13\x2d\xca\x6a\x29\xf9\x9b\x38\x6d\x6d\xf4\x1f\x85\xb5\x9a\x5a\x57\x4e\xc0\x6e\xd9\x7a\x74\xf7\xfe\xf5\xdf\x82\xaf\xbf\x1e\x5a\x21\x73\xa4\x03\x53\xc8\xd5\xaa\x85\x4a\xe0\xee\x58\x84\xe2\x0c\x3d\xb3\x5b\xd4\xfa\x9c\xe2\xa0\x48\x4b\x9f\x7e\xde\x2b\xf1\x54\x0c\x82\xc2\x70\x7a\x04\x8a\x7f\x73\xa8\xf0\xe9\x51\xc9\x0e\xec\x00\xbe\x56\x5e\x68\x73\xac\xcd\xe4\x4e\xda\x70\x72\x38\x2f\xde\x90\x60\xe4\x60\x8c\x7b\xaf\x7f\x07\x4f\x92\x1f\x5f\xb6\x2e\xfc\x1f\xe5\x16\x9e\xe2\x60\xfa\x1f\xff\x21\xb8\xff\x8f\x7f\x78\xda\xe6\xbe\x96\x48\xe5\xf6\x56\xfb\x0b\xc8\x9c\x5a\xec\x57\x72\x35\x2d\x2d\xf7\xab\x4f\xd6\x5a\xf0\x77\xbf\xa0\xd8\x1a\x2f\xea\x66\x45\x89\x11\xd2\xb6\x68\xf2\xeb\x39\x3f\x64\x68\xb0\x81\x29\xde\x44\x8f\x1d\x7a\xc7\x46\x86\x9c\x21\xe6\x6f\x93\x21\x4a\x42\x32\x63\x9e\xe2\x38\x87\x6b\x1e\x7a\x8b\xe4\xd4\x3a\x71\xcb\x1b\x4b\x86\x68\x4a\x6c\x75\x89\xd3\xe4\xfa\xd5\xb4\xc3\xf6\x60\x53\x95\x76\xf9\x38\xcc\xab\xc7\x86\x1b\x76\x65\x93\xad\xde\x31\x08\x55\x1c\x1c\xc7\xda\x21\xd2\x9c\x8c\xa9\xab\xf4\x94\xad\x9d\xb5\xb9\x67\x68\x9c\x71\x28\x1b\x67\x78\x07\x90\x31\x94\xb0\x03\xbc\x9c\x1f\x64\xa3\x4e\xe7\x14\xae\x9f\xcc\xf1\xcc\xab\xcc\x96\x7f\x89\xa3\x00\xfb\x50\x3b\x9d\xdc\xd1\x20\xc7\xca\x24\xe5\x21\xb3\xf2\x7f\xcc\x09\x9b\x1a\xb9\x64\x9b\xb4\x0b\x1c\xdd\x22\xfa\x4a\x02\x23\x75\xeb\x3c\x5b\x0a\x06\x76\x4a\x4d\x6d\x89\x09\xe6\x70\xe6\xd1\xad\x63\x92\xea\xeb\x88\x21\x9a\x80\x8b\xe2\xb2\xb2\x21\x30\xb8\x20\xab\xec\xa1\x37\xb2\xdd\x71\xc3\x61\xe4\x0e\x9c\x14\x53\x74\x87\xd1\x6a\x3f\x09\x78\x29\x26\xe7\x48\x43\xf9\x34\xf0\x17\x30\x9a\x23\x66\xa5\x63\x3e\x72\x1f\x0a\x1a\xf6\xe2\xa6\x29\x71\xad\x3a\xa3\xb5\xc7\x9f\xbd\x2b\x78\x87\x9c\x88\x50\x8d\xa9\x74\x6a\x24\xbb\x81\x45\xe6\xf9\xc9\xcd\xab\x7c\x2f\xb3\x07\x45\xe0\x08\xf0\x4e\x0e\xbc\xb0\xd9\x35\xc6\xd4\x93\xd3\x2d\xf1\x84\x31\x1c\x81\x96\x01\x7c\x18\xdd\x41\x66\xbb\xda\xa8\xe0\x03\xb8\x5d\x10\xb4\xb6\x60\xcf\xfd\xb6\x0a\xb6\x29\xf3\x21\x0d\x44\x2f\xf6\x69\xc5\x3a\xac\x80\x99\x3e\xb6\x69\x6f\x6c\xd3\x7e\x26\xc8\x08\x4e\xe5\x6e\x1d\xb5\x4f\xbb\xc1\x5e\xa8\x35\xf7\xfe\x81\xa4\x60\x91\xe9\x8b\x25\x0c\x72\xa5\x01\x12\xc2\xe3\x6b\x52\x66\xc1\x94\x77\xfe\xc6\x51\x8a\xd4\x86\x03\x84\x02\x29\x02\xea\x47\x7f\xe9\x60\x58\xb9\xae\x69\x8f\xda\x78\x73\x7c\x50\x9d\x04\x5e\x87\xae\xdd\x9b\xb9\x71\x94\xba\x50\x4c\xef\xac\xcc\x0d\xab\x46\x94\xcf\x6e\xa3\xd5\xb6\xfc\x40\x12\x41\xed\x41\xd5\xe3\x76\x1a\x72\xeb\xcd\xe9\xfe\x82\x2d\xc8\x4a\x58\x3d\xd9\x12\x84\xbd\x24\x0c\xac\x3e\x57\x17\x3c\x9d\xab\x6c\x4b\x59\xaf\x1f\x4a\xef\xb3\x1d\x24\xa3\xc5\x18\xeb\x81\xc0\xb1\xe3\x8b\xbb\xee\x4c\x16\x1d\x91\x77\xd1\x0f\x83\x03\x8b\xcd\x71\xc0\xcf\xa6\xcf\xba\x1e\x20\x3d\x82\x80\x63\x44\x00\x47\x88\x1e\x8c\x1f\x34\x10\xb1\x20\x79\x4b\x5a\x3a\xe0\x93\x07\x18\x34\x68\xcb\x8d\xc8\x36\x6e\x1e\xd5\x6a\xf6\x82\x40\xe5\xff\x7a\x72\xae\x3a\x8c\x1a\x6a\xf4\x18\xde\x27\x12\xb8\x33\xd1\xca\x39\x35\xd0\xfc\xa3\xfa\x27\x7b\x12\xde\xd9\x7d\x6c\xc7\x94\x02\xb4\x91\x94\x29\xcd\xc0\x92\x8f\x71\x67\x4d\xe4\x4a\xd9\x4f\xe4\x36\xb7\xae\xbc\x80\xe3\xf2\x02\xa6\x73\x2e\x80\x2d\xcd\x4f\xb7\x94\x25\x26\xd6\xe7\xb2\x66\x07\x87\xbd\x87\x87\xe7\x7e\x58\xf5\x76\x51\x4d\xfe\xe9\x66\x7c\xd1\x86\xa4\xca\x47\xbf\xf3\x21\xf8\x9d\x8f\x8e\xe6\xa3\xa3\xd9\xd1\xd1\xdc\x90\xcb\x35\x9e\xaf\xb5\x27\xd9\x39\x97\xaf\x6f\x4f\x0e\x9f\xbf\xbd\xee\x97\x9d\x53\x4a\xde\x10\xf8\x94\x30\x81\xe6\xb8\x5f\x55\xf5\xae\xd6\x0c\xaf\xd6\x66\x95\x7a\xa4\x74\xb9\xa4\x9d\xaa\x1d\x2a\x94\xbb\xa2\x65\xe5\x55\x52\x29\x5e\x67\x4e\x4d\x26\x03\x95\x4c\xa8\xe2\x10\x50\x4e\x7f\x7e\xdf\x21\x42\x00\x26\xef\x7d\x73\xf9\x42\x25\x41\x18\x45\xb4\x7c\x12\xec\x53\x72\xee\xdf\xbf\xf9\xfa\xed\xcb\x5b\xfc\xce\x4d\xba\xcc\x59\xac\x79\xba\x93\x43\x30\x48\xdc\x29\x8c\x9e\xd2\x9a\xe9\x5e\x1f\x33\xc4\x9d\x49\x90\x2c\x60\x22\xdd\x92\x1b\xc4\xca\xe9\x85\x0f\x32\xfb\x55\x59\x77\xd9\x4a\xfa\x5f\x44\xb0\x75\x94\xc0\xfb\xa9\xa8\xf4\xb6\x46\x34\x4a\x27\x92\x78\xbe\x06\x0c\x26\x6c\x9b\x62\xdd\xb2\xd8\xfc\xbb\x4c\x1e\x2f\x61\xb2\xc8\x3f\xe1\xf6\xb1\xfc\x44\x8c\x55\x62\xb2\x98\x55\xa9\x5a\x93\x7f\xf2\x2e\xce\x7b\x3a\xdb\xae\x55\xf9\xb3\xc2\x1a\x2a\x1c\xd3\xa5\x48\x70\x55\x49\x47\xe2\x78\x0c\x90\x78\xb8\x09\x35\xcc\x9e\x37\xc0\x92\x75\xb6\xdf\x6a\x19\x5e\x39\xdd\x9e\x9c\x92\x00\xbd\xc1\x99\x03\x0e\xfe\xa3\x72\xca\x2f\x50\x76\x7a\x7f\x01\x60\x9a\x10\xf0\x6f\x78\x99\x6d\x77\x18\x25\x7f\xaa\x3c\x36\x23\x51\x32\x65\xf8\x57\xf4\x05\x38\x7a\x11\xdf\x97\xbe\xfe\x47\xeb\x24\x4b\x31\xa4\xe6\x14\x65\x2d\x37\xb9\xa4\x5b\x5f\xc9\x5c\x4c\x09\xc7\xcf\x85\x4c\x70\xc5\xd3\x5c\x7f\x17\xcf\x65\x1b\x19\xba\x55\x35\x3a\xb2\x6e\xde\x93\xb3\x1f\x3f\x3b\x5f\xa4\x87\x5f\x3f\x77\x3e\xfb\x9b\xa4\xb4\x24\x9c\xa0\x49\x1c\xc1\x12\xd2\x39\x8e\xa6\x02\xe5\xea\x0b\x70\x7c\x18\xdf\xff\x09\xfc\xc3\x70\xc6\xf2\x2d\x51\xc8\x58\xb3\xb5\x61\x32\x34\x26\x9e\x4c\xc1\xff\x28\x7f\x23\x45\x93\x3b\xfb\xd9\x37\xb9\x28\x6a\x81\x8f\x71\xcf\xf5\x3a\xa7\x47\x11\xa0\x59\x48\x56\xfe\x02\xd2\x64\x8f\x4e\xf8\x5f\xce\xc3\x83\xf3\xf3\xb7\x7f\xdf\x7c\xf9\xcd\x19\x85\xab\x27\x98\x78\x13\xef\x4b\x42\xc1\x12\xde\x66\x6e\x60\x4e\x12\x36\x01\x31\x25\x3e\x62\x0c\x04\x18\xce\x29\x5c\xb2\x09\x20\x74\x0e\xd4\xb7\x1f\xde\x5c\x4c\xc0\xf9\x7b\xed\xdb\x08\x25\x2b\x42\x6f\xf3\x4f\x78\xd1\xce\x32\xf5\x17\x60\x49\xa8\x5e\xac\x73\x43\xd2\xe4\x49\x20\x5e\xbf\xe3\x6a\x1d\x1e\x2d\xdc\x48\xd1\x4e\xf6\xd7\x0a\x0a\xcf\xf2\x81\x56\xf1\x28\x3b\x26\x17\x8a\xa9\x64\xad\xc5\x9a\xc1\x33\xca\x8f\xf1\x9a\x8e\x39\x9e\x94\x4e\x29\x2d\xd4\xaa\xe4\x62\xb5\x5a\x29\xa9\x38\xf8\x0b\x2f\x35\xf9\xf3\xd1\xef\x52\xfc\xe7\x6f\x51\x14\xa1\x60\xfd\x3b\x16\xe3\xe8\xcf\x87\xbf\x8b\x29\x49\xc8\x9f\x7f\x66\x24\xfa\x1d\x8b\x43\xc8\x16\x7f\x3e\x54\xa1\x20\xa9\x4f\x3d\x3e\x07\x91\xfe\xf6\xc5\xe1\x9f\x80\xfc\x17\x38\xfc\x13\xe0\x37\x4c\x5f\x80\xa3\xc3\xc3\xff\xe3\x4f\xb9\x62\x3d\x3a\x3c\xcc\x54\x67\xd3\xaa\x76\x5e\xdf\x62\xd4\x53\x9b\xd0\x80\x7b\x72\x8e\xa6\xe9\xf1\xcb\x2b\x78\xe5\xd8\xc0\xa0\x27\xa4\x96\x29\xfa\x7f\x24\x45\xd2\x54\xf5\x62\xec\x16\xbc\x29\x47\xb6\x81\x2f\xe3\xf0\x3c\x93\xd6\x3d\x3a\xf1\xae\x3f\x24\x2f\xbe\xbd\xfd\xee\x7e\xf3\x27\xde\xeb\x2f\x85\x6e\xf2\xce\x79\x1d\x1b\x8c\x80\xfa\xe4\xb1\x60\xf4\x21\x17\x8c\x8a\x33\xc7\x5c\x2e\x2a\x38\xfc\xe0\x8a\x45\x8f\x0e\x8d\xeb\xda\xff\x5a\x51\x31\xe7\xfd\xab\x11\xad\x69\xbd\xb1\x75\xe9\x9e\x9c\x9d\xd7\xef\xfe\xf8\xc7\xef\xd8\x87\xd7\xbf\x81\xea\x50\x03\xf1\x47\x61\xea\x1c\x2d\x71\x84\xf7\xe8\x84\x44\xe7\x5f\x7d\xf3\xed\x65\x68\x06\xda\xf1\xe4\xcd\xcf\x88\xe7\xe4\x57\x9c\x00\xde\x44\xfe\x03\x70\x03\x2a\xa6\x98\x21\x80\x19\x4b\x11\x77\xec\x12\xec\xdf\x22\x7e\x75\xc8\xc8\x2c\x59\x41\xdd\xc3\xcb\x2c\x79\x9f\xa4\xd9\xcf\xb2\x2f\xf7\x00\x95\xe1\xd1\xcf\x73\x4f\xe7\x7b\x3e\x7d\xde\x23\x5c\xad\x65\xf4\x6d\x36\xf9\xce\x62\x08\x88\x9d\x3b\x4d\x69\xa8\x0d\x21\x85\xf8\xc3\xfb\x8b\x86\x9b\x6b\xd7\x12\x5b\x23\x62\x53\xb6\x5f\xb4\xd7\x4e\x4a\x85\x80\xbc\xd1\xc9\xdc\x9b\x78\x7c\x46\x95\x34\xaf\x96\xca\xbb\xa1\x47\x32\x7a\x32\x7f\x02\xb2\x0d\xf9\xc5\xc1\xc1\x02\x85\x71\x80\xd8\x6d\x75\x53\x8e\x7a\xc3\xdf\x9b\x7f\xf2\xd1\x0f\x0c\x51\x4b\x67\xab\x32\x97\x7a\xf1\x47\xbd\xa0\x89\x49\xf9\x04\xb6\xcb\x29\x25\xa0\xf6\xf5\x6f\x99\x29\xb5\x4d\x05\x63\x2c\xb1\x47\x15\x10\xcb\xe5\x6b\xf0\xad\xf8\x64\x23\xec\x92\x2f\xd4\x9a\xfb\x54\x19\x76\x72\xf9\x9a\x4f\x60\x27\xec\xca\xa4\x05\x64\x34\xb8\x45\x6b\xf0\xfb\x19\x25\x4b\xf1\x91\xec\x7b\xff\x87\xee\x6c\xdc\x3d\x66\xda\x49\x9a\x2c\x50\x94\x60\x5f\xa0\x4f\x36\x9f\x3c\x30\x4d\xba\xa3\xa6\x75\x4a\xfb\xf4\x5a\xd2\x3c\xa1\x36\x55\xf7\x46\xf6\x23\xec\x96\x16\x2d\x76\xc5\xaf\x4c\x81\x14\x92\x15\xa1\xb7\x39\xf0\x68\x1b\xb2\x68\x03\x5a\xb0\x8a\xc2\xca\x6d\x91\x0f\xe9\x80\x1e\xac\x3f\xdb\x13\xfc\xb5\x01\x3e\xb8\x69\x52\x5e\xed\x5e\xa9\xfa\xc4\xd4\xcb\x91\x51\x5f\xe7\x79\x2c\x6e\x60\xf7\x45\x27\x99\xbc\xde\x51\x6d\x0f\xb6\x20\xab\x33\x14\xc2\xb5\x08\x05\x1f\x1e\x1a\x6c\xa1\x02\x92\x35\x2f\xc6\x57\x8d\x74\x5a\x01\xa3\x6d\x24\xe2\xd2\x64\x00\x75\xaf\x12\x49\x1a\xea\xfc\x11\x19\xa9\x16\x24\xba\x81\xfe\x6d\x26\x75\x51\x66\x85\x85\x84\x7e\x51\x90\x48\xec\xe0\x6c\x86\x7f\xb2\x35\x91\xf1\x48\xf4\xbd\x22\xb0\xbc\x5d\xaf\x52\xb9\x0a\x4b\x2b\x35\xa7\x1b\x24\x6d\x01\x37\xdf\xaf\xd5\xbb\xe3\x45\x83\x24\x94\x7a\x5b\x4e\x31\x29\x1e\xff\xfd\xff\xfd\xbf\xae\xa1\x83\x89\x55\xae\x3b\xc1\xc5\x36\xff\xb8\xcb\xb0\xdd\x6b\x5d\xb7\x13\x17\xa9\x3b\xbb\xa3\xfb\xd0\x7b\x12\x19\x09\x82\xb3\xe3\xe4\xed\xfd\x99\x7b\x9c\xb9\x29\xb8\xb1\x29\xfa\x8f\x1b\xc5\xc0\xc9\x22\xbd\xd9\xa3\x28\xc6\xdb\xef\x3e\x7c\xff\xe6\xd7\x60\x31\x24\x77\xad\x8b\xaf\xbf\xa1\xdc\xb5\x52\x95\xc9\xc4\xfb\x0a\x27\x5f\xa7\x37\x00\x33\xb0\x20\x2b\x10\x23\x12\x87\x08\xdc\xa4\x38\x0c\xf2\xb8\xc8\x93\x22\x30\x22\x98\x92\xc7\x43\x1e\x5e\xa8\x20\xd7\xd4\x7c\x21\xc6\xe4\xb6\x51\x6c\xb5\x0d\xfb\x9a\xd2\x4a\x7b\x47\xe7\x30\xc2\xbf\x42\x25\x0b\xad\x7e\xcc\x86\x53\xec\x3c\xb2\x8a\x10\x65\xd3\x80\x92\x38\xe0\xed\xef\x04\x01\xc5\xc7\x2d\xb9\x75\xef\xb2\x87\xaa\xa9\x75\x7c\x6a\xe5\xc4\x3a\xe9\x3c\xf1\x31\x2d\xc9\x75\xe3\x38\x4b\x92\xd0\x44\x23\x34\x20\x54\x78\x4a\xab\x05\x61\x08\x50\x14\x13\x96\x49\xd1\x1a\xac\x49\x0a\x56\x30\x4a\x40\xc2\xa1\x7e\x57\xfb\xe1\x09\xab\x95\x64\xfb\x1b\x27\x68\xc9\x00\xc3\x91\xcd\xa2\x6f\xf1\x7b\x95\xc3\x2b\xfd\xdf\xc2\xef\xbd\xa1\x30\xf2\x17\x53\x31\x7a\x95\x5d\xe2\xcb\x2b\xf1\xe6\x8f\x2a\x82\xb1\x4d\xbf\x57\x6a\xfc\x4c\xd5\xbd\x00\x01\x5c\x33\x00\xe7\x64\xaf\x58\x24\x75\xf1\x77\x18\xad\x9a\x4a\x6d\x1c\x7c\x50\xa1\xd9\x24\x6a\x8d\xdd\x09\xb4\x70\x99\x5f\xec\xa1\x3c\xce\xf1\x51\xd6\xc1\x4f\x97\x38\x44\x2c\x21\x51\x9d\xc3\xbc\xf0\x5e\x7d\x2b\x30\xde\xf9\x20\x37\xe4\xbe\x1d\xa4\xab\x55\x72\xf5\x91\xdb\x5d\xd1\x1b\x5a\x1a\xc4\xfa\x78\x0f\x22\xf0\x5b\x04\x66\xa4\xc0\x6b\xf1\xd5\xc8\xab\x57\xa3\xee\x7c\xe5\x3e\x59\x2e\x71\x62\x5e\xfa\xa9\xfc\x6e\xe4\xb5\xe7\xc3\xba\xb9\x2e\x1b\xd0\xfe\xc9\x02\x81\x6c\x3f\xb1\xcd\x6a\x78\xce\x87\x29\x87\xf6\x6c\x53\x1f\x9b\x0f\x00\xbd\xcf\x8f\xb5\x56\xa9\x2b\xd9\x16\x21\x66\x89\x6c\xd0\xa7\x89\x54\x76\xec\xc8\x83\xfc\x4b\x8c\x42\xde\x46\x09\x47\xf3\x10\x89\xb7\x95\xa2\x7f\x42\xa0\xb2\x71\x84\x28\x65\x07\xac\x6b\x6d\x5b\x2b\x2f\x3a\x03\x37\xb6\xc5\x48\xbc\xe6\x98\x86\x08\x32\x6a\x01\xe7\x52\x74\xd2\x19\x91\x70\x27\x5e\x75\xcd\xf9\x1a\xdd\xa7\xdb\x13\xaf\x7a\xf9\xf3\xc1\xbb\xf3\xaf\xd3\x57\xc3\xbd\xea\xcd\x24\x09\x98\x48\x36\x0a\x2f\x7e\xc6\x14\xee\x91\x77\xfd\x2a\xb8\x5d\x7d\xf8\xf5\xef\x78\xf3\x59\x74\xdf\x60\x0a\xc1\x95\xf4\x6d\xbd\x89\xf8\x3b\xa6\xe4\x0e\x07\x88\xc9\x04\x81\x84\x42\x9f\xe7\x93\xc3\x28\x00\x70\x8e\x43\x94\x7b\xc3\x8f\x79\x00\xbb\x70\xee\xcb\x0e\x39\x43\xec\xff\x67\xef\xcb\xd7\xdb\xc6\x91\x07\xff\xf7\x53\xc0\x9c\x5d\x37\x39\xa2\x4e\x3b\x8e\x63\x87\xc9\x38\x76\x92\x76\x4f\x0e\x8f\x8f\x74\xa7\x6d\x4f\x3e\x58\x84\x24\x26\x14\xa0\x10\xa0\x65\x27\xd2\xf7\xed\x43\xec\x13\xee\x93\xec\x87\x83\x14\x4f\x89\xba\x2c\x6d\x6f\xcf\xee\xaf\x63\x91\x20\x8e\xaa\x42\xa1\xaa\x50\x07\x95\x2a\xaa\x43\x0f\xed\xae\x33\x26\x21\x65\x56\x35\x40\x59\xfd\x8f\xd3\x42\xd3\xa7\x8c\xf0\xbd\x52\x71\xe2\xb8\x9b\x78\x26\xcc\x70\xd9\x35\xc5\x15\x97\x76\x24\xce\x41\xdf\x43\x40\x90\xe7\x11\xc1\x58\x45\xd1\xcd\x9e\x97\x70\xda\x0a\x38\x85\xce\xca\x1d\x53\xf3\xb1\x8b\x44\x11\xd8\x79\xad\x25\xe3\xaa\xec\xb4\x39\x7c\xca\xbb\xe9\x3a\x3b\xc7\x8a\xdb\x01\xc8\x09\xc1\xa1\xcc\x83\x8c\x78\x00\x23\x64\x8b\x04\x75\x6a\x67\x4b\x38\x36\x25\x1c\xb9\x16\x6f\x23\x06\x1d\x97\x82\x5b\xd4\x22\x1e\x02\x3e\x85\x6d\x54\x99\xe2\xac\x4d\x1f\xd7\xf3\x19\x8d\xb4\x68\x66\xf7\x00\xc3\xb9\xb7\x25\xd1\x8c\xa7\x2b\x71\x55\xe1\xc7\x47\xf9\xeb\xf7\xa8\xa3\x8a\x80\xb0\xa8\x7a\x09\xde\x41\xdc\xf6\x55\x3c\xf5\xa2\x3d\x56\xd2\x79\x8c\xc2\xb9\xe4\x38\x46\x88\x69\x26\x2f\xd9\x95\x87\x89\xce\xd1\xe1\x53\x60\x01\x0f\x51\xe2\xde\x21\x1b\x1c\x7e\x38\xe6\x54\xc3\x0f\x3d\x60\x81\xf3\x07\xc9\x62\x0c\xf0\xf1\x0c\x40\x4a\x9d\x36\x46\x08\x58\xe0\x96\xdc\xd2\xae\xc3\x3a\xc5\x73\x49\xcd\xcb\x3f\x4c\x2d\x28\x19\x57\xec\xd6\x7c\x54\x7b\x77\xc2\xb5\x79\x84\x98\x54\xcb\xd9\xf3\xe1\x66\x2f\x1c\xcf\xc8\x85\x5e\x64\x25\xe8\x91\xda\xf7\x5b\xcf\xe1\xaa\x5a\x5a\xf4\x5a\x8f\xaa\x60\x6d\x0f\x3e\x24\xca\x82\x45\x39\x10\xe7\x50\x84\x81\x04\x93\x98\xa8\x13\x3c\x86\xec\x9f\x14\x0c\x17\x2c\x6d\xae\x89\xdc\x8f\x6d\xf7\xe4\xe3\x8f\x67\xfe\x7a\xdd\xa6\xa5\xc1\xb4\x10\xe8\x77\xa1\xf7\xcd\x26\x7d\xbc\x46\xf2\xfe\xc3\x9d\xbb\xf3\xa3\x5a\x7d\x78\xac\x4c\x10\xa3\x42\x28\x66\x66\x4a\xf8\x44\xf2\x4e\x33\x91\xf0\x3c\xca\xfb\x96\x77\x29\x17\x29\xd6\x32\x91\x13\xa7\x33\x8d\x4e\xcb\xbc\xd7\x4d\xc6\x4f\x86\xb6\x8d\xcf\x81\x90\x9b\x00\xa1\x48\xf6\x03\x91\xfa\xa0\x05\xbb\x8e\xfb\xb0\x0f\x7e\x45\xee\x1d\xe2\x3c\x38\xdd\x24\x2b\x3b\xc2\x30\x7a\xa2\x45\x67\xd1\xf3\x50\x7c\x26\x3d\x68\x73\x95\x74\x1f\xd4\x92\x5f\x67\x1e\x90\x05\xaf\x2e\x83\xcd\x5c\xf0\xf2\x92\xb7\x2a\x5e\x00\x48\x9b\x98\x5b\x32\x2c\x7a\x2b\x84\xb2\x9b\xe8\x30\x19\x19\x1c\xcc\x54\xc6\x87\x79\x6b\x79\x16\x49\xd5\x15\xa4\x9f\x54\x29\x85\x40\x0a\x74\xbd\x70\x27\x4c\x48\xe4\xa5\xaa\x4d\x8d\x76\x4e\x4c\xde\x98\xc2\xc8\xb8\x52\x73\x5e\x16\xff\x5f\xc2\xc1\xb2\x26\x47\xfb\xa7\xd3\xe3\x9e\xb7\x77\x7a\xb7\xae\x26\xbd\x6c\xa0\x2d\x04\x1f\x3d\xc8\x21\xea\x41\xc7\x5d\xa3\xa3\xde\xfd\xbe\x73\xf8\x84\x5e\xee\x2d\xdf\xb4\x77\x1a\x2e\x5f\x13\x09\xe8\x7a\x2e\x14\xb7\xf2\x1e\x68\xba\xc4\xb7\xcb\x5c\x76\xb0\x81\x4b\xda\x74\xe4\xd2\x32\x02\x19\xec\xf5\xfe\x8e\xf4\x59\x9b\xd3\x7f\x3d\x82\x7d\x0a\x99\x63\x94\x37\xf9\xd5\x95\xa6\xe8\x50\xe9\xe9\x63\x5c\x83\x97\x7f\x8f\x37\xda\x0b\x60\x62\xa4\xc3\xdc\x11\x44\xa3\x4d\x54\x86\x3d\x87\x91\x6f\x08\x4f\x08\x7c\xb8\x10\x6d\xa6\x0c\x7d\x58\xc0\x95\x2e\x87\x85\x18\x5b\xc5\x3c\x08\xee\x30\x21\xe6\x61\xe2\x1d\xf3\x5f\x2c\xf2\xa1\x68\x9e\xcd\xf5\x09\x88\x28\x68\x35\x8d\x70\xcf\xe2\x5b\x75\x61\xbb\x75\xb2\x51\x35\xb2\x8d\x44\xdd\xf8\x98\x2b\xc2\xa8\x9c\xfc\xd8\x8d\x5c\x38\x70\x29\x25\xc8\xa7\x87\xcf\x74\xd3\x02\x29\xe9\x3e\xdc\xd7\x6a\x76\x85\xab\x5e\xce\xb3\x91\x8f\xb9\xc0\xdc\x75\x30\x02\xfd\x8e\xd3\xec\xf0\x53\x1d\x20\xcc\x3c\x07\xc5\xdd\x34\x6c\x25\x06\x08\x6b\xef\x2d\xb9\x05\x1f\xcf\x80\x7e\x7d\xad\x51\xd2\x45\xa0\xd7\xf1\x20\x45\xd7\xd7\x9a\x30\xfa\x52\xe8\xba\x0f\x63\x98\xc0\x58\x3e\xb0\x1a\x32\xe9\xc2\xfb\x48\x67\xef\xe1\xbd\xd3\xf5\xbb\xc0\x43\xd4\x77\xc7\xb9\xcc\x2c\x8c\x4e\xf8\xf8\xa6\x86\x7d\x2e\xff\x15\xa7\x93\xee\xd8\xb4\x88\x8b\xa4\x92\x5f\x49\x1f\x74\x21\x7e\x88\x91\x87\x4d\x42\x0a\xc9\x4b\x12\xbd\x46\xd8\x16\x7d\x8c\x5c\x6a\x23\xee\x82\x41\xe7\x05\x71\x3c\xc6\xf9\xb7\xe7\x91\x6e\x8f\x2d\xca\x0b\x38\x31\x63\x53\x7b\x2e\x9e\xbc\x08\xdd\x81\x55\xae\x4d\xb5\xb6\x49\x8e\xc1\x62\x9d\xb4\xb8\x67\xb0\x02\xfa\xa3\xd0\x97\x4c\x1b\x0a\x5d\x10\x11\xb7\xda\x13\xf1\x52\x54\xce\x58\x4c\xc9\xb9\x47\x32\x32\x64\xeb\x9e\x4b\x51\x6b\xd7\xc4\xd0\xf0\xf5\xdd\xf9\x9f\x27\x5f\xf7\xfa\xeb\x75\x87\x90\x07\xac\xc5\x60\xc2\x6e\xad\x91\x65\xe1\xe3\x57\x48\xef\xab\x6f\x0a\x5a\x16\xd6\x37\x9d\xb4\xf2\xb9\x3c\x3d\x7e\xc3\x25\x16\x89\xb0\xf5\x8c\xaf\xc1\x0b\xa8\x65\x34\xe1\xbc\xc3\xa8\x2f\x6f\x63\xcb\x41\x36\x81\x40\xa3\x3d\x7e\xa3\xa5\x2a\xf3\x24\x0a\x22\x65\x17\xb3\xca\x4e\x77\x15\x26\xc6\x42\xd0\x26\xd8\x15\x62\xf5\x24\x81\x57\x6b\x72\x9d\x0d\xf8\x3d\x97\x40\x1b\x48\x55\x0f\xdc\x22\x97\xf4\x43\x53\xb7\xdd\xfa\xa0\x92\x30\x64\xfb\xac\x26\xc0\x30\xf3\xd1\xf3\xc6\xf1\xa8\xa4\x19\x39\x1b\x64\x83\xbe\xe3\xba\xe0\x16\x01\x9f\x26\x6f\x93\xb3\x8a\x18\xad\x14\x97\xaa\x06\xef\xaf\x28\xa8\x89\xb4\x60\xb4\x72\x5c\x4e\x14\x4b\xa5\x0b\xc8\xd3\x5a\x2d\x82\x3c\x79\xa2\x6b\xa6\xd6\x51\x53\xcb\x90\x23\x16\x85\x42\x2e\x9d\x32\xe8\xba\xc0\xa1\xc2\xc9\x9c\x23\x53\x5d\x4d\xbc\x5c\x6f\xfc\x9d\x33\xe8\x31\x70\x9a\x72\xf1\x79\x6c\xdc\xd5\xb3\x30\x47\xf9\xe4\x4e\xf3\x0a\x38\x2c\x0a\x79\x17\x1d\x04\x5a\x62\x0f\x72\x3e\x1e\x51\x35\xd7\x1c\x73\x8e\x8d\x6e\xa1\x97\x8f\xb6\xa7\x81\x38\x1f\xcb\x2b\x4a\x70\x33\x8c\xcb\xcf\x4f\x8f\x8f\x58\xa4\xfb\xab\x08\x3a\x19\xf4\xda\x88\x55\xd4\x83\x54\xed\x8f\xb8\x0d\x30\xaf\x00\x9e\x9a\x1d\x51\x78\x8e\xac\x39\x60\xe5\x98\xe0\x30\x85\x43\x18\xf3\xaf\xc8\x90\x96\xd1\x77\x1f\xba\xa3\x8a\xe6\x51\x8a\x09\x66\x7d\x13\xf6\x11\x14\x06\xc9\xaf\xc5\xf7\x81\x60\x94\x31\xc3\x34\x54\x8b\xcd\xfd\x96\x90\x6f\x5d\xe8\x7d\xa3\xf3\x2e\x20\xda\xd1\xe4\x55\xbc\x0a\x5a\x2f\x70\x29\xac\xe3\x77\x6f\xe7\x5e\x47\xd8\xcb\xe4\x45\x5c\xf0\xa6\x18\x3a\x6e\xb1\x55\x8c\x27\xfe\x79\x75\x41\xf7\xc1\x04\x14\x31\xa0\xd6\x02\x22\x85\xb9\x26\xb0\x85\x47\x52\xd4\xe2\x32\xfc\x62\xf5\x82\x35\x51\xcd\x7e\xbc\xb5\x2f\xf7\x2e\x2f\xb3\x8b\xc6\x2e\x28\x8d\x64\x84\x66\x92\x59\xc3\x6b\xb1\x1c\xde\x9a\xa9\x85\x29\xbe\x09\x16\x67\x58\xbf\x83\x84\xda\x10\x3c\x16\x79\xbd\x35\x53\xab\xd7\x6a\xff\x33\xd8\x37\x4a\x00\x19\x2b\x9a\xc4\x92\x3e\x3f\x33\xaf\x34\x8e\x89\xaf\xb4\xda\x47\xb7\x55\x2e\x46\x70\xb5\x8f\x75\xdd\x97\x2d\xc7\x45\x96\x4a\x63\xde\xb3\x5b\x97\x22\xc3\x9c\xf6\x8f\x1f\x84\x74\x2d\x51\x39\x41\x4c\x60\x8b\xff\x69\x4d\x3a\x52\x4d\x4d\xb4\xeb\x12\x3b\xa7\x6d\xb8\x87\x6f\xd2\xbb\x36\x69\xe0\x58\x5e\x7a\xcd\x14\x49\x66\x13\xfa\xc6\x94\x84\xee\x42\xcc\xfc\xee\x3a\xdd\xaf\x3f\x7b\xf3\xb1\xda\x42\xbf\xf7\x1e\xe1\x7e\x9d\x2f\xfe\xf2\xfd\x3b\xcd\xd4\x8e\x3c\x04\x19\x02\x97\xef\xdf\x8d\xea\x25\x88\x0b\x35\x08\x7a\x2e\x74\xb0\x60\x91\xc0\x55\x7e\xe0\xf2\xba\x7d\xbf\x1a\x82\xef\xef\x8b\xf6\xb5\xbf\x68\x0f\x9c\xa6\x02\x94\x15\x28\x9e\x30\xb3\x2d\x3c\xf7\x22\xfb\xa9\xa9\xc1\x58\x97\x1d\x0f\xb5\x54\xcd\x85\x04\x39\x55\x03\x5e\x2a\x65\x4d\xcd\xd4\xbe\xdc\xba\x50\x16\x7e\x0f\xb4\x4e\x45\xbf\xe0\x78\xb4\x94\x67\xf9\x3e\xfa\x13\x9d\xc3\x1b\x59\xce\xe1\x59\x97\xe9\xd3\x64\xe5\x1e\x91\x9c\x9c\xe4\x05\xba\x17\x54\xb7\x5d\xcb\x2a\x96\xa4\x1a\x29\xc2\x07\x39\xda\x52\x76\x19\xbb\x84\xa3\x60\xb7\xc7\x1e\x42\xc0\xcc\x9e\x90\x6e\xec\x2d\xea\x44\x90\xd6\x73\x40\x1a\x1b\x2e\x55\x26\x54\x3a\xc3\x02\x0a\xbb\x3d\x17\x85\x0c\x69\xbf\xc8\xfd\x4d\xaa\xaf\x62\xd7\x28\xcb\x2b\x70\xac\x9d\xa3\xef\x3e\x52\x39\x34\x26\xb8\xff\x86\x4d\x27\xdf\xe8\xaf\x64\x29\x97\x14\x81\x23\x48\x8b\x2c\xe5\x92\x22\xd1\x72\x4d\x57\x72\x24\x59\xd9\xc4\x65\x1c\xa9\x3d\xbc\x96\x8b\xe0\x67\xc3\x9d\xc3\x0f\xbb\x89\xeb\x08\x9b\xae\xf9\x52\x80\x8e\x51\x1f\xc8\x1a\x7e\xe3\x72\x52\x25\xd7\xf5\x61\x72\x10\xd3\xca\x48\x2d\x52\xe5\x74\x22\xb9\x85\x6d\xd7\x74\x31\xe7\xfc\xf4\x28\xc2\xc9\x98\xcc\x8a\x50\x6c\x11\x8f\x7c\x81\xba\x74\x98\x65\x86\xea\xc5\x22\x50\x8e\xa0\x54\xaf\xc6\x5f\x95\x17\x08\xcf\xc3\x33\x0b\x37\x79\x32\x63\xb4\x44\x96\x9a\x73\xa4\x46\x56\x91\x5a\x46\xa3\x8e\x73\xca\x19\x35\x42\x41\x27\x19\xf8\x5a\x08\x71\x33\xac\xf5\x91\x4c\x31\x19\xda\xe4\x62\xec\x31\xb1\x8e\xd7\xc4\x28\xf3\xaa\x74\xe8\xec\xec\xd4\x2f\x97\x57\x17\x2b\x6a\x92\x59\xcb\xc2\x58\xd9\x78\x59\x08\xca\x85\x85\x6a\x8d\xcc\x12\xbf\x91\xa7\x7b\x1d\x62\x17\xf4\x8e\x98\xff\x72\xfe\xef\x3a\x54\x7c\x67\x70\x22\x08\x80\xd7\xf7\x60\xaf\x87\x3c\x90\x57\x59\x7d\x52\xbc\xd7\x5f\xab\x86\x6f\x6a\x7f\x2c\x7a\xd7\xad\x09\x97\x7d\x7f\xfc\xe6\xee\xf6\xc9\xab\x82\x35\xd6\x1f\x3f\xfc\x29\x03\x62\x8b\xc2\x84\xef\x42\x6f\x8d\x38\xe0\xf1\xeb\x76\xf5\xfb\x9f\x77\xef\xd7\x36\xc6\x79\x4d\xe3\x98\xd7\x91\xf1\x16\x30\x98\x0a\xa9\xc4\x0b\xfc\x59\xc6\x70\xda\xe5\x2b\x10\xda\xc9\xfb\xd3\x8f\x67\x17\xe0\xe8\xfc\xd3\xf8\x0b\xfb\x0e\xe9\x9f\x88\x08\xe9\xf7\xc4\x86\xee\x58\xfd\x6b\x66\xe1\x3a\x95\x42\xa3\x88\x22\x91\xaa\xb5\x9b\x1f\xdd\xab\xfe\xcd\x8c\x87\x8e\xc3\x5e\x45\xf3\xca\x73\x2b\x15\xca\x9b\xb7\xc0\x71\xd3\xec\x72\xb0\x65\xce\x52\x82\x53\x19\xa4\x6f\x1d\x6c\xa3\x7b\xcd\xd4\x64\xbc\x19\x7f\xe8\x11\x79\xc5\xe2\x40\x97\xe4\x1e\xcd\x63\xa3\x9c\x6d\x28\x6c\xf2\xea\xf3\x68\x9f\xe1\x7e\x9d\x25\x39\x90\xec\x38\x72\x69\x3d\x53\x04\x9b\xec\xa5\x83\xa0\x1d\x93\xd1\x8f\xce\x3f\x81\x0b\x02\x2e\x82\xdb\xd4\x99\x52\xdc\xca\xbe\xe5\x51\x35\x39\x6a\x67\x5c\x96\x96\x07\xb1\x6d\x12\x79\x5a\x3e\x10\x86\xf6\x01\xba\x77\xa8\x28\x0f\x27\xce\x2b\x60\x43\x06\x43\xff\x3a\x0f\x09\xb7\x25\xbb\x88\x7d\x79\xe9\xf1\x01\x4d\x7a\x57\x96\x75\x37\x13\xe5\x2c\x39\xac\x8f\xd5\x8b\x82\x21\x02\x39\x31\xff\xc9\x04\x4c\xe2\xd2\x42\xe4\x4f\x0b\xc6\x56\x9c\x5f\x66\x5b\x38\x0e\xaa\x80\x26\x12\x2e\xd5\x6b\x93\xe3\xfb\x16\xe0\x93\x7f\x44\xba\x5d\x91\xe0\xcb\x75\xba\x0e\x17\x28\x01\xf4\x10\xa0\x7e\x8f\xcf\xad\x00\xd2\x56\x84\xd1\x98\x5b\xe7\x19\xe9\x83\x5f\xc3\xcd\x53\x10\x7b\xf7\x65\x46\xda\x6d\x17\xa5\x25\x78\x2a\x4b\xb6\xb2\x0e\x12\xe5\xc3\x08\xbe\x90\x0d\xc3\x33\x45\x22\x2e\xe2\x60\xc0\x87\x96\xf9\x57\xbb\xc8\x76\xfc\xee\xe8\x60\xca\x3b\x4e\xc4\xf3\xae\xcf\xb4\x89\x7d\x86\x1e\x3d\x53\x59\x2c\xe7\x21\x89\xd7\x58\x6c\x62\xa7\xa5\x3c\xf6\x3c\xd2\x07\x2a\x86\x98\x82\x70\x62\x0b\x88\xd8\x98\x9a\x8b\xb5\x08\xc9\xb1\x88\xcd\x6f\xae\xb5\x1d\xda\x75\xa2\x4a\xdb\x44\x73\x6d\x7e\x80\x69\x20\x4f\xe5\x79\x35\xe7\xcc\xb9\x11\x9f\x73\xb9\xcd\x35\xc2\x62\x9f\xae\x36\xa0\x56\x4a\x45\x13\xcc\xad\x41\xa3\x22\x84\x9c\x43\x27\x59\x8f\x27\x1b\xa4\x1f\x4d\x63\x4e\x6a\x54\x8b\xd7\xd4\xd6\x44\x6b\xfe\xb5\xd6\xfb\x5a\x7a\xfb\xf0\x66\x8d\xb5\xe6\x34\xcc\x16\x83\x0d\x8f\x0b\x41\x6b\xa4\x36\xb7\x1f\x76\xcf\x3f\xbf\xff\xf1\x3a\xbb\x5c\xb0\xeb\x50\xb6\xd8\x72\xc1\x17\x02\x00\x9a\xa9\xfe\x08\x9c\xf1\xef\x1c\xea\x43\x17\xf4\xe1\x03\x60\x04\x74\x21\x86\x6d\x14\xa6\x0b\xe0\x60\xa0\x22\x3b\xb0\x2a\x0d\x82\x00\xc4\x0f\xac\xc3\x05\xc6\x30\xb5\x88\x84\xec\x5f\xde\xd5\x29\xa8\x25\xb4\x96\x6a\x7b\xda\xcf\x45\x62\x25\x4c\xb0\x3b\x26\xd7\xc0\x4c\x09\x0a\xe2\x1f\x61\xf2\x8a\x40\xcf\x2e\x5e\xbf\x30\xcf\x2b\xe5\x33\xf1\x41\x07\xde\x21\x80\x09\x60\x08\x76\xc1\xad\xe8\x57\x16\x22\xe0\xf2\x6d\x19\xf4\x90\x47\x45\x2c\xaa\x7a\xc5\x9f\x62\x74\x87\x3c\x51\xaa\x20\xeb\x5a\x63\x9a\xa4\x5b\x8f\x59\x7c\x40\xc0\x6c\xa2\x3c\xf6\x48\x35\x8d\x24\x34\x53\x35\x8d\x6e\x03\xbc\x8e\x23\x52\xb1\x90\xe2\x91\xcb\xb7\x72\xdd\xb3\x49\x12\xcb\x45\xd0\x48\xdf\x84\x8e\xa7\x6e\x19\xba\xb7\xc8\x2e\x37\x49\x46\xc5\x8c\x77\xb2\x7a\xc3\xec\xba\x54\xe0\x7c\x28\x37\x6b\xf9\x36\x20\x08\x71\x93\x17\xd4\x9e\x6c\x28\x88\x9d\x8b\x07\x93\xea\x70\xce\x30\x62\x59\x1e\x19\x91\xda\x93\x19\xe8\x52\xb8\x1c\x57\x8b\x32\x56\xd4\x34\x55\xe2\x62\xb6\xc2\xa6\x13\xab\x76\xaa\x85\xa8\xf3\x32\x3f\x29\x0a\xc7\xd5\x51\x50\xae\x25\x2c\xaf\xe9\x44\xab\x6e\x66\xb1\x52\xd5\x0c\x37\x5d\xdf\x9e\xbb\xb0\xa6\x13\xb3\xae\x35\x03\x5f\xab\x67\x22\xd7\x7b\x6a\x39\xe5\xa0\xba\x0c\xb0\xf9\x21\x0e\xc6\x1c\xae\xc1\xc2\x8e\x54\x3d\x9b\x88\x4f\xfa\x7c\xbc\x70\x45\xeb\x28\xbe\x80\xa8\x87\x4b\xbe\x42\xdd\x83\x38\xdb\x96\x1d\x99\x65\x6a\x13\x48\xd4\xe7\x53\x7d\xee\x88\x33\xd7\x2d\x9d\xbc\x7d\x9b\x2e\x82\x5e\xcb\x09\xb3\xa1\x2c\x25\xf7\xc2\x2c\x89\x2a\x57\xaf\xca\x2e\x28\x37\xd4\xac\x00\xc9\x2f\xdd\xf0\xd6\x25\xb7\xd0\x5d\x41\x01\x87\xd9\x51\x33\xd5\x25\xcc\xa8\x88\x83\xd2\x2c\xc6\x95\x71\x98\xb2\xde\xc0\x74\xf5\x14\xa6\x29\x98\xd0\x4c\xce\x7a\xca\x0a\x09\x63\x78\xd1\x63\xd9\x2d\x52\x1a\xed\xc2\x15\xe5\x35\xb1\x5a\x9c\x3f\xfb\xcf\x83\x7d\x7b\xf4\x64\x99\x61\x6e\x91\xcd\x32\xd9\xe4\xb1\x3c\xcf\xa9\x2c\xe8\x2f\x04\xad\xea\xfa\x70\x8d\x0c\x20\xbf\xba\x6f\xec\x4f\xf5\x67\x73\x55\x1a\xfe\xdb\x6f\x60\x3d\x0c\x10\xeb\x7f\xd1\xfd\x38\x3c\x39\x63\x97\x2d\x7e\xf7\xae\x09\x57\xf6\xff\x7d\x56\xfa\xfd\xfe\xed\xb7\xc2\x5c\x99\x36\x3d\xa7\xc7\x62\x8c\x59\xb8\xab\x6a\xd5\x9e\xe7\xd0\xae\xfc\x6f\xe5\x2b\x4d\x0b\xb7\xc5\x39\xf3\xd2\x90\xb9\x20\x66\xcc\xfc\x5e\x35\x68\x53\x16\x3f\x57\x8c\xc5\xb3\xdb\xbd\xbd\xef\xb8\xff\xc7\xdc\x67\xab\xc3\x25\x45\xd7\xcd\xb8\xe5\xcb\x72\x55\x1e\xe1\x1e\x52\x8a\x18\xad\x3a\xdd\xb6\x02\x8f\x30\x6b\xf7\x7c\xaf\xe7\xa2\x4a\x0f\x87\x5e\x1f\xd4\x6b\x52\x11\xef\x38\xf6\x8b\x7f\x35\xee\xa3\x1f\x41\x97\x7f\x11\xca\x82\xe7\x02\xe0\x41\x87\xd2\xc0\x22\x83\xd2\xf7\x41\xe3\x49\xad\x77\x7f\x00\x82\xba\x0a\x4f\x77\x7b\xf7\x07\x99\x6a\xd6\x6c\xde\x40\x01\x14\x3a\xf5\x31\x8e\x1a\xe2\xe6\x3a\xe1\xa7\x11\xce\x39\x35\x89\x22\xb5\x79\xf6\x62\x7d\x85\x1c\xf4\x4c\xe6\x25\x62\x1d\x14\x38\x92\xe7\xc6\x9f\xd2\xfd\x2a\xa7\x58\x5a\x09\xc8\x56\x44\xa1\xd2\xea\xa7\x1f\x1f\x9f\xfd\xf9\xfd\xfd\xc7\xa3\xf6\xe1\xab\xb7\x0f\xad\xdf\xab\x8a\x00\x84\x6e\x52\x6e\xfb\x8e\x8d\x68\xd5\xae\x7e\xaa\xef\xbe\xab\xed\xf9\xcd\xfb\xfe\xe1\xab\xce\x9f\x6f\x76\x33\x9a\x69\x13\x23\x5a\xa3\xdf\x00\xfe\xc3\xf3\x9b\x4a\x05\x4a\xab\xb9\x10\xdb\xc0\x43\x4d\xd2\xed\xf2\x2d\x6b\x2f\x7d\x81\x8d\x7f\xfb\xef\xf7\x4e\x8e\x9a\xff\x39\x7c\x05\xdb\xef\x9f\x54\x6d\xc8\xa0\x10\x51\x98\x8f\x9d\x11\x29\xe6\xaf\x2e\xf8\x00\xc8\x0f\x40\x08\x94\xb1\xb7\xa3\xf3\x92\xc0\xa9\x8b\xf8\x98\x48\xfa\x0c\xbc\xf1\x5d\xb7\x7c\x81\xee\x19\x50\x29\x78\xfb\x1d\x84\x81\x4f\xf9\x7c\xde\x3b\x4d\x8f\x50\xd2\x62\xe0\xfc\x3f\xef\xc0\x39\xf2\xee\x90\x07\x1a\xb5\xfa\x6e\xa9\x32\x66\x6a\x73\x39\xcc\x15\xca\x74\x4c\xe1\x9d\xf4\xed\x28\x92\xe5\x78\x5e\xa3\xf1\x58\x7b\xbe\xc3\x10\x08\x12\x10\x8d\xaf\x84\x36\x43\xd6\x71\xc1\xe3\xca\xc1\xb5\x5e\xb4\xf4\x5b\x97\xd8\x42\x26\x55\xa6\x2b\x25\xc7\x45\xcc\x10\x1d\x48\x2f\xf8\xbb\xd7\x9e\x47\xbc\x94\xaf\x12\x70\xf8\x4c\xee\xa0\x2b\xc6\x4f\x24\x27\x2a\x92\x3a\x7b\x1e\x5f\x95\x4b\xea\x43\xd7\x0d\xea\x16\x90\x6e\x0f\xe2\x07\x40\x3c\x79\xeb\x93\x07\xcb\xbc\x67\x0b\x47\xec\xe8\x1e\x40\x42\x5f\xf8\xd3\x24\x52\x4c\xbd\x89\x3e\x1b\x8f\xf5\x19\xf0\x3d\x1a\x31\x1b\xe7\x91\x19\x65\xe2\x3d\x9c\xdd\xa2\x71\xbf\x32\x1c\xb8\x30\x85\x82\x77\x70\x89\x18\x08\xc7\xcb\x46\xc0\x68\x3a\x99\xf0\x0f\xa6\xf6\x97\x01\x3f\xea\x42\x27\x9a\xb5\xec\x75\xf0\x7b\xe1\x80\x97\x23\x99\x9a\xfa\x37\x0e\x76\x35\x8d\x4c\x98\x8b\x29\xfd\x05\x00\x8e\x51\xbf\x1c\x56\x95\x88\xf9\xbb\x86\x8f\x16\x08\xf4\xd8\x68\xe9\x72\x16\x01\xe0\x47\x13\xca\x84\x7d\x30\xb9\x35\x3c\x6a\x4e\x9d\xe6\x37\x40\x49\x17\x49\xc7\x15\xca\x3c\xa2\x6a\x5e\xfb\xd8\xf9\xee\x23\xc0\x3a\x90\x89\x5c\xe9\x36\xc1\xd7\xbf\x30\xe0\x53\xe1\xe7\xd2\xef\x20\x0f\x01\xe4\xd2\x02\x67\x51\xfc\xd6\x70\xcf\xd4\xd0\xf7\x10\x3a\x21\xe9\xda\xce\x28\xb8\x39\x69\x5d\x3f\xf5\x88\xed\x37\xb9\x7c\xf8\x1a\x33\xe4\x71\x5d\x18\xbd\x0e\x3f\x88\xf9\x92\xce\x53\x35\x6c\x01\x35\x71\xb9\x28\x76\x27\x85\xe0\x6f\x28\xea\x9b\x7e\x18\xbe\x18\x5f\x87\x45\x2b\xec\x89\xad\xd2\xc6\x8c\x68\x35\x31\x76\x82\x44\x47\x6f\xc5\xf8\x37\xa6\xf6\x44\xcb\xa2\xd5\x7f\xa3\x87\x25\x90\xe9\x02\x28\xf5\x33\xf1\x41\x13\x62\xd0\x46\x0c\x38\x4c\x66\x9a\x2a\xa2\xbe\xf4\xfb\xfd\xb8\xf6\x62\x93\x3e\x76\x09\xb4\xe9\x64\xed\xa3\x58\x1f\x63\xf2\x07\xcd\x90\x87\x60\xec\x95\x54\x58\xfe\xb7\xc0\xb5\x61\xce\x9d\xe0\xb8\xbb\x43\x39\x9c\xbc\x35\x1c\x77\x4d\xa8\xb4\x8b\xe5\x47\x0a\x2d\xe7\x3a\x21\x6d\x68\x5a\x80\xe5\x4a\x08\x9d\x65\xcf\xc7\x2b\x36\x5a\xfd\xf1\xbe\x05\xdf\xe3\xa3\xd6\xcc\x46\x2b\xb9\xbf\x83\xd5\x94\x63\x71\x4c\x0b\x09\x6e\x2a\x90\xfa\x76\xea\xd0\xa6\x44\x06\xcf\x19\x22\x9b\x32\xf2\x9b\x4e\x19\xd9\xf4\x16\x31\x11\x2e\x24\x32\x23\x67\xa5\xdf\x9e\xaa\xfb\x74\x70\x53\x32\xe5\x69\xde\x1d\xaf\xdd\xe2\xff\x6f\xfc\xf0\x73\x4c\x2c\x2b\x5e\x21\x6b\x6a\xcb\x0b\x58\x48\xde\xb2\xbf\x25\xfc\x48\xd8\xd4\x26\xa4\x5b\x9f\x26\x1b\x6c\x5a\x82\x59\x0e\x1b\x0a\xf7\xd9\x7c\x1c\x88\x73\x53\xf5\x4f\x59\x81\x72\xa5\x4c\x08\x9e\x3d\xfd\xf1\xfd\xe1\xb0\x60\xdc\x73\x70\x7d\x11\x10\x41\xdc\xaf\x68\x21\xc0\x4e\x01\x68\x81\xf0\x76\x28\x5b\x75\x29\xed\xdf\x8e\xdf\x9e\x7c\xb3\x0f\xb3\xfd\xe5\xc5\x34\xd3\x0e\xf3\x63\x36\xfa\x9d\x13\xe4\x0e\xa7\x49\x51\x78\x8e\x28\x68\xa5\x07\x48\x86\xc0\x08\x71\x6f\x61\xd4\x79\x1d\x7a\xdf\x22\x0c\xc1\x83\x0e\x45\xb6\xe0\x0c\x9e\xba\xd4\xf2\x6c\xe4\x49\xb6\x2a\xc8\xc0\xcc\xf9\xef\x04\xcf\x9f\x14\x6b\x52\x33\x29\x8b\x68\x80\x91\xac\x2d\xbd\xee\x02\x3e\xc5\x1b\xc9\xda\x1f\xa3\x5c\xd6\xe3\x7d\xb4\x94\xdb\xde\x2b\x8e\x10\x9a\xad\xd7\x24\x03\xb0\x44\xde\x2f\x17\x85\xd9\xb2\x22\x7a\x12\xc7\xc8\x31\xc2\x54\xe4\x63\xbb\x31\xb5\x7a\x91\xfb\xe9\xf3\xbe\xc3\x9a\x9d\x4f\xb2\x62\x79\xbd\xa0\x36\xf9\x88\xb0\x39\x74\xdd\xe2\x80\x69\x11\x8f\x4d\x86\x4b\x63\x6a\xb8\x34\xe6\x81\x8b\xe2\x58\x01\x60\x02\x06\x56\x14\x32\xda\xff\xf9\x5f\xff\x3b\xcb\xe5\x33\x93\x30\x60\xb3\xc0\xfa\xb7\xa7\x5e\xff\xf6\x74\xfe\x7e\x71\x9d\x65\x66\x39\x7f\x5c\x6a\x31\x3f\x5b\x3f\x0c\xdc\x98\x53\x0c\x25\xe6\x5b\x1d\x70\xad\x31\xf6\x80\x0c\x89\xc7\x75\xb2\xef\x6d\x19\xea\x16\x92\xc1\xf2\x2f\x7e\x5b\x24\x73\xce\x39\x0e\x8d\xa6\xd4\xd7\xa5\x42\x2f\x5d\x65\x2a\x4a\xb6\x96\xf8\xf4\x38\x45\x44\x9c\xaf\x95\xc9\x49\xfe\xa2\xae\xdf\x8e\x18\x44\x32\xf9\x60\x72\x01\x05\x17\x92\x30\x2e\xe7\xf9\x82\x37\xc9\x18\x3f\xce\x31\xa3\x17\x05\xa7\x0a\xd8\xca\xc7\x47\x5e\xa7\xb1\xdd\xcb\xbb\x29\x73\x11\x22\xc1\xd2\x6e\xd2\x2b\x19\x2b\x4c\xe6\x0d\x56\x58\xeb\x2f\x3a\xf3\x6c\x77\xeb\xf1\x13\x2a\x3e\x91\x98\x6d\x0e\x13\x56\x2e\xc2\x5f\xa6\xc7\xf1\x04\xdc\x8a\x98\xbc\x94\x8b\xb9\x7c\x1a\xba\xb2\xcc\xb0\xa0\x22\x87\xe8\xd4\x8e\xc7\xab\xdb\xa7\x05\x20\x29\x28\x7b\xe2\x5e\x15\x67\xd5\xc9\xf8\xb0\x8d\x49\xf4\x09\xe2\xbb\x2b\x4b\x0d\x89\x1d\x8d\x34\xd0\xf4\x4e\xec\x91\x60\xa0\xde\x44\xe0\x13\x99\xda\xb4\x67\xd2\xa4\x99\x16\x74\x7a\x2b\x3e\x40\x71\x53\xf7\x5f\x81\xfa\x26\x50\x1e\xef\x87\x16\x67\xd0\x05\x7a\x9b\x8e\xdb\x4f\x3a\xc4\x64\x45\xa9\x14\x93\x69\x12\x1f\xb3\xa3\xc0\x28\x94\x15\xcf\x32\xe7\xc0\x61\xe4\x40\xe0\xb3\xc3\x50\x97\xe6\x9b\x61\xb2\x7a\x2f\xde\x72\x7d\x20\x0a\x19\x6a\x13\x51\x0e\x7a\xf9\x20\x6d\xca\xc1\x1c\xb4\x70\xb8\x2e\x9c\x6d\x4c\xea\x30\x15\x07\x95\x92\xb2\x97\x62\x8f\x4a\xda\x34\xe6\xb2\x90\xf8\x4e\x55\x54\x13\x28\x53\x95\xfd\x79\x95\xe6\x91\xef\xa7\xd4\x7e\xeb\xbd\x69\xcc\xed\xc7\x19\x5d\x52\x9e\x27\x67\x7e\xfc\xdf\x28\xc4\xaf\x61\x6a\x6d\xf7\xa1\xc7\x3a\x5a\x56\x2c\x5f\x5e\xf8\x8e\x72\xeb\xee\x22\x4a\x65\xd5\xbd\xec\x68\xd3\x45\x13\x46\x1c\x95\xf3\x52\x85\xd8\xb7\x65\xe9\x82\xd7\x73\x9a\xdf\x56\xee\xaa\xfd\x04\x9d\x37\x9e\xdc\xfb\xdd\x6c\xdb\x99\xd4\xe4\xa7\xa1\x91\x8c\x05\x4e\x54\x5a\x45\xeb\x22\x81\xc0\xda\xf8\xc8\x5f\x49\x67\xa2\x37\x10\xbf\xdd\x55\x47\x7f\x60\x85\x10\x97\x78\xe1\x8f\x91\xfe\x2f\x3a\x0b\xa3\xab\xf7\x44\x30\x48\x13\x0a\xf3\xe6\x2d\x6c\x7e\x6b\x7b\xc4\xc7\xb6\x5c\xdc\x3e\xd0\x22\xec\x5e\x46\x6c\x68\x07\x91\x5a\x6d\xb9\xe1\xc6\xe7\x2a\x50\x3f\xf1\x75\x9e\x67\x62\x41\x56\xf9\x6c\x51\xc4\x9e\x46\xe0\xbc\x34\x2f\x5d\x97\xd7\x82\xda\xfb\xf7\xee\xd1\x8f\xed\x3f\x8e\xb3\xa9\x5d\x66\x07\x9b\x2a\x0f\x77\x74\x69\x13\xe9\x5c\xb4\x5e\x18\x9d\x8b\xde\x1e\x95\xce\x7b\x9e\xd3\x85\xde\x43\xd4\xe9\xa4\x38\x99\x2b\xf5\x3d\x27\x49\x41\x11\x55\x7f\x75\x7b\x22\x8a\xe6\x79\x77\x83\xef\x94\xe1\x1d\x64\x70\xd5\x5b\xa1\x61\x5f\xfc\x0e\x9b\x4f\x4e\xe7\x96\x0a\xd4\x6a\x62\x61\x5d\x9c\x3e\xe5\xf3\xb2\x3a\xf0\x3d\xd4\x3a\x49\x67\x54\x48\x18\x97\x29\xf2\xca\x0e\x76\x98\x03\xb9\xae\xac\x76\x4d\xc2\x9d\x55\xea\xcc\xe1\x93\xc0\xde\x9b\xe9\x83\xb1\x63\x6a\x90\x31\xd8\xec\x94\x43\x53\x74\xe8\x4a\xd2\x21\xfd\x63\xa4\x8a\xd5\xd6\x6b\xb5\x5a\x86\x26\xa8\x24\x8e\xa8\x87\x6f\xb8\x1b\xe5\xab\x88\xe3\x69\x78\x5b\x37\xce\x62\xbc\x2c\x09\x25\x24\xaa\x05\x50\x67\x24\x51\xdd\x6a\x29\xf4\x73\x69\xf7\xe3\xc9\xd9\xf1\x6d\x21\x0a\x5d\x1c\x20\x47\xeb\x5f\x18\x30\x57\x0c\x48\xc2\xb6\x2f\xab\x77\xcf\x3e\x67\x9f\x7a\x5b\xaa\xc3\xf4\xc1\xb7\x93\xf4\x8e\x3b\x99\x64\xe0\x9e\x5e\x11\xe0\x7f\xab\x92\x51\x45\x13\x93\xa8\x0d\x55\x44\x3b\xe6\x63\xab\xf0\x08\xb5\x5f\x03\xdf\xae\xbd\xe8\x26\x96\xad\xb3\xf5\x89\xfa\x8e\x59\x5f\xe0\x36\x95\x04\xb1\x00\xca\x6a\x8e\x32\xd6\xac\x92\xb6\xf6\xce\xf6\x68\xf5\x3b\xc2\xd3\xd2\xd6\x44\xf1\x26\xb2\x44\x90\x76\xd5\x8c\x89\x38\x91\xa6\xe5\x4c\x71\x27\x57\x48\x11\x59\x65\xb4\x71\x59\x7e\x12\x83\x15\x94\xdc\x0a\x51\x7f\xe1\x8c\x3d\xa6\x06\x62\x53\x98\x2b\x7b\xcf\x02\x67\x38\x43\x2e\x9e\x02\xbe\x13\xa1\x39\x8d\x6f\xbc\x47\xd0\xee\x23\xd4\xb3\x80\x6d\xa9\x9c\xf6\x56\xec\x10\xd3\x6d\x76\x5f\x7d\xf6\x9e\xce\xba\x29\xb3\xc2\xf4\x95\xd7\xe0\x12\x52\xbd\x67\xd1\x44\x92\x26\xa3\x1e\x91\xc1\xd1\x21\x6f\xd3\xc3\x52\xfa\x05\x72\xbf\xcf\xee\x1e\x59\xd4\x89\x3e\xcb\x37\x52\x1d\x33\x41\x16\xa9\x31\xe9\xa2\x66\xf4\x8c\xcc\xf0\x33\x97\x51\x92\x11\x68\x12\x1c\x38\x4f\x17\xcf\xe8\x30\x26\x9d\x1c\xd0\x46\x3b\x34\x7b\x12\x05\x53\xfd\x2e\x2a\x4d\xf4\xdc\x2e\x97\xb3\x14\xf7\x53\xcd\x44\xc6\x8c\x48\x7d\xba\x49\x99\x3b\xe2\x29\x36\x26\xc7\x0d\xcc\x92\x47\x7a\x66\x78\xa4\xa0\x20\x3f\x94\xeb\x4f\xe5\xda\x6a\x39\x5e\xb7\x58\x65\xbe\x64\xb6\x90\xb1\xde\x46\x53\x26\x84\x5e\xde\xc9\x20\x39\xce\x02\xce\x85\x88\xd3\xc5\x4a\x8f\x86\x4f\xad\x9d\x3f\xfe\xfc\xd5\x3d\x7f\x64\xa5\x2a\x5c\xfe\x02\x40\x29\x72\xf2\xad\x85\x39\xf1\xf0\xc8\x63\x7f\xdc\x7b\x47\xd9\xe7\xac\x72\x9f\x2a\x6e\x49\xe9\x3b\x76\x1b\xb1\xd8\xfa\x72\xce\xca\x1c\x1f\x31\x99\xc9\x55\x46\xf6\xec\xc5\xf3\x84\x8a\xbf\x8f\x28\xcd\x16\x76\x63\x66\x4a\x75\x3d\x3b\x45\x48\x99\xeb\x8c\x11\xe4\xe5\xa4\x66\x34\x54\xe6\x4a\xee\xaa\x7e\x43\x60\x32\xcc\x35\x2c\x16\x93\x39\x65\xcc\x15\xf3\x7c\xdc\x8c\x5c\x6e\x29\xfe\x29\xa2\xa3\xae\xc2\x81\x14\xf3\xc3\xb0\x8b\xde\x38\xc8\xb5\x33\x8c\x50\x79\x1e\x11\xa9\x55\x17\x4e\x19\xba\x00\xa9\xfd\x42\x70\xf5\x69\xb5\xec\x24\xb6\xe7\xb8\xb9\x5d\x1e\x97\x8e\xec\x98\x05\xf0\x17\x25\x66\x89\x63\x8f\xae\x3a\x15\xfc\x07\xef\x33\x62\xf5\x57\xd3\x4a\xf2\x0b\xb6\x5a\xc4\x40\xb2\x28\x10\xaf\x18\xb4\xbd\x93\x37\xdb\x9d\xc6\xc9\xf6\xdf\x4a\xd2\xff\x97\x4a\x52\xb6\xf2\xb2\x34\x15\x65\xad\xa4\x5a\x31\xdf\x05\x6c\xe3\x9e\x47\xda\x1e\xa2\xab\x66\x92\x9f\x3e\x96\x5e\xe3\x76\xa3\x5a\x3c\xdd\xdc\x5d\x3c\xdf\xd8\x7d\xd7\xe5\x9c\x5e\x04\x3c\xab\x78\xe7\xfe\x76\x85\x78\xed\x6a\xa3\x56\xab\x55\x45\xf3\xbc\x97\xe2\xdb\x6a\xb0\x89\x45\xc6\x30\xcd\xd4\xb6\x1b\xc1\x13\x99\x35\x2c\xf6\x48\x14\x35\x27\x7c\xf7\xd7\x40\x0d\x6c\x37\x80\x7c\x95\xb5\xdf\x13\x79\xd1\x98\x47\xbe\xa1\xb2\xeb\x60\xd4\x84\x3d\x11\x05\xef\x63\x5b\x4b\xbf\xfd\x4a\x1c\x9c\xf3\x3a\x98\x61\x38\x9b\x96\xe3\x72\xbd\xef\x1f\x75\xf1\xbf\x78\xeb\xf8\xf3\x1c\x4e\xd1\xce\xf6\x8d\x6b\x96\x5d\x42\x7a\x5f\x6c\xc2\x68\xb9\xf6\xa4\x9c\xb1\xc6\x58\x2f\x4d\xc7\x6b\x72\x62\x88\x74\x65\x43\x06\xcb\x81\x9e\x2a\x3d\x12\x92\xb3\xc6\x04\xa3\xc4\x02\x45\xc9\x33\x51\xf9\x4c\x55\x5c\x53\xf3\xe2\xf0\xae\xef\x86\x3f\x1f\x62\x3f\x3d\x15\x0a\x22\xd9\xb3\x07\x31\x95\x16\x14\xf9\xb7\x20\xb5\x1a\xd8\xae\x6c\xef\xee\xd4\xd4\xff\xea\xdb\xcf\x9e\x1a\x5a\x7e\xb2\xed\xfc\x65\xe5\x4e\x3d\x0f\x0b\x63\x97\xb4\x33\xcf\x8a\x9e\xac\xe3\x8a\x1a\x7b\xf3\x2c\xa9\x5e\x78\x49\x79\x2c\x39\x9d\x8f\x52\x51\xed\x66\xc0\xd9\x80\x6e\x80\x9f\x20\xfc\xc5\x74\xc6\x7f\xb3\x8e\x43\x2b\xc8\x15\x9c\x06\x58\x80\x99\xf2\x09\xdf\x00\xc0\x02\x57\xd1\xd7\x95\x36\x62\xaf\xe5\x9f\xf4\xd5\xc3\x05\x6c\x73\xde\xad\x5f\x5f\x2b\xe0\x5e\x5f\x6b\xc6\x55\xfd\xc6\x04\xd3\x7e\x53\x9b\xe1\x9b\xc6\x4d\xf0\x11\xc4\x4e\x57\xe4\xc8\x38\xb1\xd5\x13\xca\xa0\xc7\xd7\x22\xb4\x14\xf9\xc8\xc1\x0e\xd3\x0d\x30\x04\x4e\x0b\xe8\x9b\x7d\x07\xdb\xa4\x5f\xf1\xd0\x77\x1f\x51\x76\x18\x74\xf0\x86\x6b\x05\x1c\x26\x9c\x7b\x3b\xaa\x83\x03\x30\xae\x35\xb0\x46\x00\xd5\x99\x09\x70\xf0\x39\x7f\xa3\x63\xd4\x07\xc7\x90\x21\x83\xaf\xe8\xc2\xe9\x22\xdd\x38\x00\x0e\x18\x0c\x80\xce\xbb\x47\xc6\x81\x68\x0b\x81\x05\xde\x43\xd6\xa9\x74\xe1\xbd\x5e\x33\x41\x7d\x17\x94\x81\x8e\x40\x19\x38\x86\x61\x02\x02\xac\x60\x0e\x54\x76\x43\x7c\xa6\xc7\xb1\xca\x74\x04\x4a\x00\x1a\x60\x68\x02\x68\x1c\x00\x0f\x31\xdf\xc3\x62\x11\xe2\x05\xef\x65\x08\x86\x80\x55\x7a\x1e\x61\x84\x3d\xf4\x90\x80\x49\x6c\xfe\xc1\xdc\x05\x1d\x74\x1c\x7a\x90\x02\xf0\x68\x26\x99\xd0\xd0\x59\x85\x79\x4e\xbb\x8d\xbc\xf0\x79\x85\xcb\x8c\x3a\x33\xc4\xcc\xa2\xa3\x7b\x88\xa2\x49\xc3\xab\xb1\xa4\xa9\x32\x35\x54\x64\x5e\xa9\xde\x93\xd3\x88\xe3\x29\x8a\xe3\xc8\x42\x25\xdd\x70\xec\xc4\xc8\x88\x29\x34\xf1\x4e\x18\x28\x47\xda\x9a\x02\xcd\x12\x75\x0e\xd6\x31\xa8\x82\x9d\x9a\x09\x1a\xdb\xc6\x01\x78\xb6\x5d\x03\x2f\x00\xce\xe8\x6e\xf4\xa3\xc4\x5b\x19\x07\xa0\x45\x3c\xa0\x07\x94\x70\x75\x23\x51\x5e\x3b\x00\xdb\xe0\x05\x20\x07\x80\x94\x4a\x7c\xc6\xf0\x8a\xdc\x44\x29\x85\x13\x48\x03\xfc\x13\x10\x13\xf0\x4e\x38\x65\x8b\x26\x2f\xc0\x9e\xa1\xfe\xb4\x24\x2d\xf1\xbf\x8d\x83\x54\x07\xfc\x37\xff\x36\xb2\xe5\xaf\xc8\x0d\x27\xb2\x43\xc6\x3c\xe7\xd6\x67\x62\xd7\x85\x3c\xeb\xfa\x5a\x33\x41\xf0\x40\x31\xae\xeb\x6b\x8d\xd3\x17\xef\xb9\xc4\x7f\x18\xfc\xff\x0e\xd4\x46\x0b\x04\xf6\x4a\xf0\x87\xda\xd5\x95\xa0\x88\xa3\x1e\xdd\xf6\x86\x31\x9e\xb8\x9c\x1c\xe2\x72\x38\x71\x8d\x50\x14\x0e\x1a\xe3\x22\xe2\xb6\x3e\xe0\x23\xe9\x53\x9e\xcf\x5a\x62\xf3\xea\x46\x82\x12\x1b\x71\xb4\xd4\x0e\x00\xae\xb8\x08\xb7\x59\x07\xbc\x00\xf0\x00\xc0\x52\xc9\x88\xf0\x56\x87\xa3\x08\x55\x7a\x3e\xed\x88\x7d\xcf\x74\x7c\xe5\xdc\xf0\xa9\xe9\x7c\x43\x86\xb3\x82\xb6\xfd\xfa\x4e\xa4\xea\xa6\x0c\x61\xe4\xf1\xf9\xdc\x39\xd4\xb9\x75\x5c\x87\x3d\x34\x45\xd1\x21\x01\xe8\xf8\xc6\xb8\xbe\xd6\x3a\x8e\x6d\x23\xcc\x01\x6e\x45\x56\x39\xfa\xf6\x9c\x0b\x8c\xe0\x25\x40\x95\x16\xf1\x5e\xc3\x66\x47\x4f\x90\x3c\x93\x9b\x8e\xf3\x41\x03\xec\x8f\x6b\x17\xb0\x4b\xf9\xff\x75\xe3\x60\x65\x42\x7f\x20\xac\x2f\x40\xee\x0f\x6a\x4d\xad\x54\xea\x3f\x39\xfe\xe3\xcf\xdb\xdf\xcf\x9d\x29\x8d\xaf\xc1\xdc\x73\xed\x95\xb1\xac\x4f\x81\x5e\x4f\x69\xd4\x49\xa5\x2e\x1c\xda\xa0\x4d\xb0\xfb\x10\xfa\xb7\xa9\x9f\x63\xac\x96\xcd\xa0\x0e\xd6\x28\x2f\x69\xf0\x68\x92\x0b\x42\xcf\x23\xdd\x1e\x2b\x14\xad\xa6\x44\x18\xa2\xca\xce\x46\xe5\x69\x87\xc2\x5b\x57\x44\x61\x07\xce\x31\xa3\xc0\x6c\x69\x9d\xa5\x65\x4c\x58\xc2\xf1\x21\x91\x67\x6c\x4c\xd2\x98\x20\xf3\xba\x9a\x6c\x4e\xa8\xe6\x24\x33\x62\x2c\x92\x31\x59\x39\x4a\x05\x29\x09\x18\xaa\x1c\x63\xda\xbf\x1c\x1b\x61\xa6\x02\xcb\xa6\x87\x4c\x3d\xcc\x2a\x26\x60\xc0\x31\x59\xee\x89\x42\x68\x29\xa3\x6f\xb2\x78\x5a\x14\x2c\xd9\xe0\x44\xdf\x7d\x61\xe9\x4a\xf6\x34\x0b\x68\x0b\x4d\x6e\x54\xc7\x2d\xcf\x39\x72\x96\x48\x9c\xe5\xb0\x24\x09\x84\x45\x30\xa4\x20\xce\x7e\x95\x0c\x89\x3d\x3d\x86\x67\x6f\x9e\x9c\x3d\xf2\xd5\x9a\x5c\xfb\x02\x80\x18\x64\x75\x58\x0b\x9f\xc5\x6f\xbb\x68\x9b\xe2\xb7\xd9\x29\x74\xfe\xf6\x59\x7c\x54\x9f\xc5\x38\x61\x64\x53\xda\xc6\x2c\x94\x66\x3b\x77\x8e\xbd\xf2\x7d\xfb\xe3\xd7\xd6\x6f\xac\x7a\xe4\x3d\xf2\xbe\x4d\x00\x61\x81\x1b\x38\x52\xa9\x73\xa5\xfe\xdb\xfd\xb3\xed\x4f\x7f\xd4\xa6\x76\x3b\x7e\xa4\x4d\x12\xbd\x96\xad\x99\x57\x1a\xf4\x3c\x91\x55\x6d\x3d\x38\x45\xec\x7a\x62\x91\x67\x6e\x92\x48\x16\x48\x77\x32\x31\xd2\x4a\x69\xee\xe2\xcf\xfa\xa9\xfd\xfd\xf2\x3f\xf3\x1d\x1b\x41\xb4\x48\x01\x62\x28\x1a\x62\xf2\xf4\xc9\x98\x08\x93\x70\xbc\xc2\x51\x24\x13\x08\x67\xf1\xe4\xc2\x71\xbb\x40\x52\x59\x87\x2c\x7d\x7d\x4a\xba\xdf\x4e\x4b\xd9\x77\xeb\x99\x59\xfa\x32\x78\x4a\x9e\xc2\xf6\xff\x2e\x09\x2d\x9e\x76\xe6\xcf\x38\x98\x48\x9a\xb7\x52\xb2\xb9\xac\xdd\x35\x2e\x2f\x3b\x53\x4b\xa6\x09\x8e\xfe\x37\xc1\xe4\x22\x78\x41\xa4\x22\x00\xb3\x5a\x17\x93\xbd\xef\xd0\xf1\x4f\x2f\x0a\xd7\x31\xfc\x9b\x1e\xb2\xb0\x38\x1f\x3d\x50\xe4\x55\x5b\xc4\x6b\x13\x16\xa9\x65\xb0\x52\xb2\xd8\xee\xd5\x7f\xed\x1c\x75\xb2\x2d\x97\x59\xe2\x70\xa1\x9a\x47\x72\x8d\xda\xe4\xaa\x47\x69\xde\x43\xe1\xc3\x45\x07\xe2\x6f\xc5\x12\x07\x6a\x45\xaa\x4b\x21\x84\xcb\x4f\x6b\x35\xd0\x85\x5e\xdb\xc1\xe5\x5b\xc2\x18\xe9\x96\xb7\xa3\xf5\xa6\xe4\x90\x15\x20\xc2\x89\x64\xb5\x1f\x51\xc2\x43\xdc\x16\x44\x4b\x79\x15\xa8\xb9\x5b\x60\xbe\xd3\xd6\x3d\xc8\xc8\xc6\x93\x57\xf7\xa0\x40\x01\x94\x1c\x7b\x5e\x66\xd1\xa7\x44\x3d\x0e\x91\x91\x7c\x54\xe8\x20\x56\xfb\x24\xac\x79\x32\x7a\x9c\x51\xfb\xa4\xc7\x1e\x16\x5c\x00\x25\x93\x86\x82\xee\x8b\x67\x54\x2b\x40\x4a\x1e\xb2\xa3\x84\xc4\x48\xaf\x5c\xaf\x25\x61\x0d\x30\x61\xa0\x15\x78\xbb\x4c\x9d\x80\x30\xcf\x13\x60\x79\xa5\xcb\x13\x39\xbc\xf3\x6b\x97\x9f\x21\x8a\xd8\xd8\xd0\x8a\x70\xdf\x4f\x53\xb6\x3c\x71\xff\x34\x31\x61\xe9\x4e\x66\xd1\xc2\xf1\xa5\xc9\xa1\xcf\x3a\x15\x97\xb4\x45\x71\xf3\x2c\x6a\x10\x70\x02\xa2\x94\x0a\x23\x80\x3a\x6d\x0c\x9c\xc9\xce\xc8\xcb\xb9\x22\xcb\x38\x25\xe6\x3f\x76\x82\x9e\xca\xe2\xb6\x70\xc5\xa7\xce\x6f\xfe\xce\x9b\x6f\xcf\x3e\xcc\x9f\x06\x4a\xa0\xb4\x2c\xce\xa4\xbc\xc2\x06\x85\x0e\x2c\x09\x94\xc9\xe7\xd5\xb2\xf9\xb8\x6a\xfa\x01\xf5\x41\x76\x1d\xa5\x79\x79\x37\xf4\x19\x69\x86\xb9\xad\x23\xac\x3c\x59\x50\x29\x5a\x48\x49\xc3\xa8\x7f\x3a\xaa\xbd\x14\x2f\xc5\xf4\x28\x55\x96\x32\x00\x37\x73\xf9\x9a\xa3\x0e\x21\x14\x01\x18\x94\x58\xea\x8d\x05\x74\xfe\xd3\x25\xe2\xff\x48\x46\xb3\x4d\x47\x03\xcb\xc0\xbe\x9a\x88\x62\x84\xf1\x67\x05\x08\x41\x35\x5d\x4f\x3a\x50\xa5\x45\x39\x9c\xa4\xc4\x87\x51\x3f\x24\x06\x00\xdb\xd0\xc1\x0b\x24\x89\x98\xcc\x90\x10\x45\x1b\x99\xa5\x4f\x97\x7e\xf0\x67\xd5\x1d\x9a\xed\xdc\x0f\xd8\xe7\x14\x58\xeb\x41\x9c\x6b\xb8\x96\x0b\xc6\xae\x74\xe7\x56\xd5\xb3\x7c\xca\xde\x43\xd6\xec\x08\x3a\xb2\xcb\xca\xc1\x53\x9e\xc6\x1a\x18\x09\x68\xbb\x23\x01\xcd\x45\x2d\x26\x80\x7b\x93\x2e\x4f\x47\x01\xef\x11\x74\x65\x97\xeb\x52\x8a\x24\xe3\xa8\x9e\xff\xe8\x17\xb9\x8c\x7a\x1e\x69\x39\xee\xaa\xf3\x3f\x3a\xcf\xea\x7f\x9c\xfd\x5e\xca\x2e\x8f\x31\x75\x5d\x8c\x60\x4d\xd3\xd6\x34\x9a\xc4\x9e\x27\xa8\x58\x53\x94\x59\x2d\x7a\x54\x8f\xaf\x7d\xb8\x86\x55\x56\xf3\x37\xc8\xf2\xe0\x5e\xb8\xb4\xea\xe4\xc3\x71\x3c\xbc\xd7\xad\xa6\xea\x2a\x80\x3d\x85\x1d\x61\x56\x30\xaf\x4b\x05\xd5\x6c\xd6\x1e\x37\x29\x38\xf4\xd0\x67\x9d\x53\x8f\x88\x0b\xf2\xa0\x54\xff\x34\x36\xaa\x25\xda\x7c\x0a\x57\x61\x2d\x26\x39\x8e\xc7\xda\x98\x22\xac\x59\xaf\x1e\xab\x0e\xeb\x6a\xe4\xf5\x11\x0e\x54\x02\x8a\xd3\x34\x2a\x16\x21\xcc\x8f\x47\x49\x72\xec\xb1\x98\x51\x8d\x61\x2c\x4f\x46\xa6\xd8\xfe\x58\x48\x2a\x56\xdc\x66\xf5\x72\xf0\xb9\xa8\xb5\x39\x73\x31\xce\xa5\xc9\x8b\x51\xf9\xae\xa8\xb4\xe8\x33\xc7\xa5\x55\x7b\x6c\x46\xf0\x48\x50\x11\x32\x99\xf1\x53\x85\x9f\x74\x09\xe7\x72\x3a\x32\x2a\x1c\xe9\x90\xe9\xcc\x18\x2e\x46\x78\xc4\xd6\x4f\x46\xce\x3b\xc4\x63\xc7\x90\xa1\xfd\xe8\x5c\xe2\x63\x07\x21\x38\x3a\x32\xc2\x59\x68\x9f\x3f\x7f\xfe\x5c\x7d\xff\xbe\x7a\x7c\xac\x19\x43\x93\x91\x13\x4a\x44\x37\xcc\x94\x2d\x12\x7d\x9a\x38\xd9\x2b\x13\x0f\xf9\xb7\x4e\x17\x1d\xb6\x49\xd1\x09\xb8\xa4\x09\x5d\xdd\xa8\xb4\x3c\xd2\xfd\x40\xfa\xfa\xa8\x87\xcb\x8b\xa3\xfc\x4e\x2a\x3e\x6b\x4e\xea\x68\x18\xc1\x23\xce\xc7\x23\xc2\x4d\x62\x3b\xf8\x11\x72\x7d\xfd\xfc\xf2\x0d\x3d\x9c\x33\x6f\x5f\x3b\x7c\x75\x74\xfc\xfa\xcd\xdb\x5f\x4f\x7e\xfb\xf7\xbb\xf7\x1f\x3e\x9e\xfe\xe7\xec\xfc\xe2\xf2\xd3\xef\x7f\x7c\xfe\x13\xde\x36\x6d\xd4\x6a\x77\x9c\xaf\xdf\xdc\x2e\x26\xbd\xef\x1e\x65\xfe\x5d\xff\xfe\xe1\x47\xad\xde\xd8\xde\x79\xb2\xfb\x74\xef\x59\xa9\x6a\x69\xa6\x98\x76\x1c\xcf\x82\x0c\x4c\x62\x52\xd3\x31\xa1\xe9\x99\xae\xd9\xb4\x34\xcd\xb4\xad\xda\x46\x8b\x78\x3a\xb2\x58\xe5\x8b\xcf\x5a\x7b\x5f\xe4\xb7\x3a\x32\x0e\xec\xe7\x48\x85\x70\x1c\x18\x8e\xa5\x63\x0b\x55\x9a\x1d\xe8\x1d\x11\x1b\x1d\x32\xdd\x2e\x95\x0c\xe3\xc5\x8b\x86\x09\x2d\x7d\x7b\x0b\x1b\xcf\x9f\xef\x0c\x74\x92\xd9\x66\xc7\xf4\x2c\xbd\xfe\x64\x8b\x18\xcf\x9f\x37\x06\x3a\xcd\x6c\xb4\x6b\xba\xd6\xee\xf6\x16\x35\x1d\xfa\x01\x7e\xd0\x89\xf1\xd2\xb3\x5c\x6b\x77\x67\x5f\xfe\xa6\xc6\xd6\x96\xce\x7f\x1b\x66\xd3\x6a\x96\x44\x24\x8c\x02\x99\xe8\xec\x90\xe9\x8e\x91\xf9\x18\x66\x3f\xf6\xb2\x1f\xbb\xc6\x86\x22\xa6\xe6\xd0\xb4\xd1\x64\x38\x72\x28\x36\x43\x28\xa2\x8a\x87\x7a\x2e\x6c\x22\xbd\x7a\xf5\xdf\xc3\xf2\x9f\xb0\xfc\xa3\x56\xe6\x48\xb9\xa9\xb6\x4d\x4d\x33\x0e\x9a\x11\xa0\x62\x2b\x36\x03\x91\x2e\xe0\x63\x4b\x47\xc1\x5c\x9a\x1c\x32\x02\x64\x4e\x91\x96\x02\xd2\x44\x40\xda\x91\xe8\x80\x05\x3f\x6b\x98\x94\x23\x11\x1a\xcf\x9f\xef\x0e\x74\xaf\xd0\x57\xa6\x5b\xb2\xce\x99\xe7\xe0\xb6\xd8\x56\x47\x0a\xa1\x3a\x36\xcc\xdd\x9d\x4d\xcb\x82\x1c\x5f\xd9\x4d\x88\xa1\xda\x78\xf9\x6d\xa8\x11\x22\xc2\x0d\x69\x53\xe2\x43\x77\x8d\xa1\x19\x25\xd6\x18\x82\x62\x38\xb8\xf6\xae\x31\x07\xfc\x35\xd6\x0c\x81\x21\xb9\xd9\x34\xcd\xc4\x56\xed\x00\x8f\x70\x81\x4b\x25\x89\xdb\x04\x05\x63\x63\x83\x3c\xaf\x37\xf6\x5e\xb2\xbc\xa5\xec\x93\x17\xf5\xc6\xd3\xad\x2d\xf2\xbc\x51\xdb\xd9\x7b\xa9\xe7\x35\x7c\xf1\x62\x77\x50\x7f\xd6\x30\xcc\x9c\x06\xbb\xdb\x5b\x64\x50\x6f\xec\x19\xc6\xfe\x98\x3e\xea\x8d\x41\xa3\xb1\x93\xdb\x09\x1f\x65\x6b\x77\x5b\xf4\x33\x79\xa0\xa1\x02\x30\x0b\xc0\x99\x43\xef\x01\xc0\x36\x5c\xc4\x00\xb1\x6a\x26\x55\xf4\x1e\x85\xa0\xe1\xb4\xf4\xe4\xfe\xc7\x86\xc1\x81\x67\xe4\x02\xcf\xc4\xa5\xd2\x06\x72\x29\x02\x4e\x4b\x27\x2f\xea\xcf\xea\x02\x90\x8d\x1d\x23\xc1\x24\x70\xa9\x9e\xbb\x20\x7d\xbb\x2e\x58\xcb\xee\x80\xf3\x0f\xde\xa7\xd5\x10\x9d\xfe\xcc\xe8\x44\xac\xc1\x49\x3e\x6f\x18\x1b\x79\x9d\x2b\xbe\x55\x6f\x0c\x74\xd1\xbd\x1a\xc7\x11\xe3\x6c\x8f\x40\x38\x34\xb1\xf5\xf3\x15\xa4\x68\x77\x67\x9f\x15\x3c\x5e\x84\x64\x5c\xbe\x7d\x58\xca\xf1\x92\x81\x45\x15\x5b\x53\xf9\x17\x82\xcd\x4e\x45\x2b\xa1\x60\x8b\x49\xdb\x12\x97\x7f\x7c\x86\x6c\x9d\x8d\xe6\x10\x7c\x7b\x75\x13\xb4\x15\xcc\xa1\x8d\x98\x1e\x86\xea\x18\xa9\xd0\x38\x1d\x07\xbb\x69\x73\x93\x55\x5a\x0e\xb6\x5f\x3d\xe8\x9a\x54\x04\x4c\x39\x18\xef\x01\x9b\xc8\x30\x36\xc8\x60\xc0\x44\x24\xa0\x5c\xac\x2e\xdf\xab\x95\x37\x3d\x24\x8c\x5c\xe2\xdb\xfd\xf8\xa7\xa6\x9a\x00\x97\x6b\x0d\xc3\x9c\x34\x50\x72\xd2\x91\x21\xb1\x31\x34\x4c\x36\x34\x86\xf9\xb8\xea\x3a\xb4\xf9\x08\x62\x80\x83\x19\xf2\xee\xa0\x1b\x15\xa8\x98\x19\x80\x93\x1f\x3b\x96\x4e\x2c\x66\x52\x0b\x47\x91\xe4\xb4\x74\xd9\x8f\x65\x59\x74\x30\xa0\xe5\x32\x78\x51\x33\x7e\x46\x22\xa0\x1d\x93\x18\x1b\xcc\x7b\xf8\x89\x2a\x4d\xe8\xba\x3a\x17\xa6\x8d\x61\x13\xb2\x66\x47\x67\xc6\x4f\xd6\xf1\x48\x1f\x50\xab\x66\xb2\x0a\x23\x72\x27\x70\x39\x69\x68\x6c\xc4\x3a\x61\xc6\xd0\xec\x7b\xb0\xf7\x46\x8d\x9d\x9a\xa7\xa2\x92\xc8\xdc\x50\x05\xf6\x7a\xee\x83\xce\x5f\x0f\x87\xa6\x83\x29\xf2\xd8\x21\x3b\xf2\x3d\x4a\xbc\xd8\xf7\x62\x1d\x61\xac\x66\x18\x3e\x65\xa0\x8a\x30\xee\xe9\x86\x99\x7e\xa9\x28\xe4\x0c\xe2\x36\xd2\x8d\x0a\x43\xf7\xcc\x62\x21\x4f\x41\xa3\x86\xa2\x66\xf9\x60\xa0\xd5\x34\xcb\xb2\x92\xcf\xd5\xc1\x9e\x7a\x6e\x92\xe8\xa3\xd7\xd8\xde\x40\x15\x81\x45\x4b\xfd\x5b\xa1\xfe\x2d\x95\xd0\xaa\x99\xd8\x28\xb1\x52\xfa\x05\x31\x83\x67\x92\x57\x72\xec\xc7\x87\xb1\x70\x89\xa9\x97\x66\x7c\xbc\xc8\x9b\xa1\x58\x94\xea\xaa\x64\xb1\x21\x17\x95\x50\xff\x13\xf2\x68\x16\x22\xf8\xea\x23\x67\xa1\x76\xa7\x71\x01\xc4\x64\x16\x4b\x3d\xe3\xed\x98\xe7\x74\x39\xfc\xc8\x3b\xd2\x47\xde\x11\xa4\x48\x97\x8d\x33\x5f\x68\x02\x88\x5b\x5b\x9a\xb6\x69\x59\xcc\x90\x48\xdf\x0c\x4e\x08\x54\xa1\x3d\xd7\x61\xba\x56\xd1\x0c\x93\x5a\x2c\xf2\x53\x71\x91\x4d\x9d\xa8\x55\x3d\xdf\x1e\x0c\x68\xe4\xef\x4d\x9d\x5e\xd5\x6e\x5e\x90\xab\xda\xcd\x60\xc0\xff\xb4\x2c\x8b\xff\xd8\xda\xa2\x57\x75\xfe\xbc\x7e\x63\x6c\x6d\x6d\xea\x98\x3f\x48\xbc\x15\x3f\xea\xe2\x47\x83\x37\x6d\xdc\x18\x71\x51\x7f\x8c\xca\x86\xc7\x5d\xde\x47\x35\xb6\x80\xc4\xab\xff\xd5\x1b\x4f\xae\x6a\xe5\x27\x37\x83\xc6\x55\xad\xbc\x73\x73\x55\x2b\x3f\xbb\x19\x5c\xd5\xea\x37\x2f\xc5\x9f\xe2\x3f\x2f\x8d\xeb\xca\x6a\xda\xfd\x8f\x6a\x85\x21\xca\x27\xbc\x38\x2d\xb2\x8d\xd8\xb9\x7f\x6b\x93\x2e\x74\x22\x04\x27\x68\x8d\xe9\x2a\x1c\x9d\x2b\x5b\x62\x63\x76\x08\x65\x86\x22\x0d\x4d\x13\xa4\x81\xa4\x24\x91\xd5\x32\x4d\x23\x61\x04\xf9\x8b\xfa\xd6\x96\x8e\x2c\x7c\x55\xbb\x89\x93\xa1\x61\xa2\xa1\xd9\x46\xec\xb0\xd7\xbb\xf4\xdc\x98\xdc\xc2\x47\x63\x13\x07\xe2\x5b\xa1\x4b\xee\xb8\x10\x50\x93\xa2\x01\xb6\x58\xe5\x2b\x71\x70\x6c\x22\x5f\x2a\x8e\xf4\xb0\xd2\x91\xf1\x92\xaf\x61\x1f\x95\x2c\xad\xa2\x99\xc9\xfe\x45\x4a\x85\x26\x71\x4b\x5a\xb5\xaa\x95\x50\x09\xf3\x3d\x7a\xf8\x15\xde\x1f\x36\x9b\x88\x52\x61\xf0\xc9\x52\x5c\x25\x94\x37\xc5\x96\xd2\x35\xfe\x01\x80\x3e\xeb\x10\xcf\xf9\x21\x13\x32\xb4\xa0\xe3\x22\x5b\x72\x2e\x55\x1d\x6b\x30\x18\x7d\x55\x41\xbc\x67\xba\xb5\x15\xfc\x15\x40\xae\xc6\xfb\xdb\xa9\xd5\xe5\x97\xf2\x1d\x07\x23\x65\x90\xf9\x74\x30\xd0\x76\x6a\xdb\xd9\xef\xb8\xbe\x2e\xe7\xfe\x81\xb0\x37\xc4\xc7\x76\xa1\xd9\x17\x9b\x93\xb6\x53\xdb\xc9\x1e\x96\x0f\x7a\x22\xad\x5f\xef\x9c\x26\xc2\x14\x2d\x76\xd8\xc6\x98\x61\x4f\xef\x8a\x8b\x6e\x92\xb5\x17\xe5\x18\x09\xd5\x63\x4e\x1d\x5f\x33\x89\x55\x3b\x20\xcf\xd1\x01\x29\x95\xb8\x70\x8d\x03\xd5\x4c\x24\xab\x68\xb9\x84\x78\xf2\x4f\x0f\x62\x9b\x74\x75\xe3\x9f\xc1\x56\x1a\x69\x55\x6c\x71\x5c\xa1\x0b\xbf\xa1\x73\xd7\x6f\x67\x6c\x40\xea\xfa\x6d\x1d\x99\x3f\xbb\x5c\xaf\xd0\xbc\x56\x73\xfb\xd9\xde\xae\x66\xba\x7c\x0f\x8b\x4e\x37\x02\xfe\x60\x59\x16\xdb\xda\xd2\x99\x85\xb8\x24\x66\xf2\x3e\x4f\xec\x7d\x66\x22\x6c\xd3\xdf\x1d\xd6\x49\x08\x0a\xf2\xb3\x72\x5d\xa0\x3c\x50\x51\x99\x19\x1c\xb1\xe5\xe0\xd0\x34\x86\x26\xc4\x04\x5f\x52\xe4\x9d\xd8\x51\x96\xa5\xc6\xe5\x2f\xbf\x68\x25\xa6\xd7\xeb\x82\xe0\xc5\x15\x48\x06\xb5\x55\xff\xab\xeb\x57\xff\x7d\xfe\x42\x37\xae\xae\x6f\xae\xaf\x2b\xe6\xc1\xfe\x35\xfd\xd7\xb5\x76\x53\xd2\xaf\x2b\xd9\x2f\x8c\x7f\x1a\x03\xfd\x5a\xab\x94\xae\x35\xc3\xf8\x97\xae\x5f\x5f\x09\xce\xfc\xb3\x6e\x6e\x0f\xaf\x2b\x05\xfe\xbe\x31\x06\xba\x7e\x05\xcb\x3f\x0e\xcb\x7f\x5e\x97\xf9\xf3\xd2\x75\xc5\x28\xa9\x27\x37\x3f\x1b\xe6\xd0\x88\xb2\xf9\x82\xa4\xcb\xc8\x63\x08\xb2\xfc\xa8\x60\x09\xcb\x20\x93\x64\x21\xcc\x91\xcd\x0b\x42\x5c\xba\xff\xd3\xef\x5d\x40\xaf\x8d\xd8\xbe\xa6\x99\x36\xe9\xe3\xd1\x2f\x8e\x55\xcc\x4e\x70\xd3\x13\xd7\x3f\xfb\x35\x13\xba\x2e\xe9\x9f\x88\xc7\xfb\x9b\x75\xf9\xf3\xa3\xcf\xd4\xef\xa1\x29\x6d\xc7\xf0\xd6\x45\xa7\xb0\x8d\x78\x13\xbf\x77\xac\x12\x22\xec\x6f\xd6\x44\xff\xd1\xdf\x72\x84\xe8\x13\x22\x7b\x8b\x3e\xea\xc1\x36\xa7\x44\x4d\x1b\x6e\x38\x2d\x9d\x1f\x05\x97\x58\x82\x47\x64\xea\x09\xce\xaa\x0d\x5c\x91\x2d\x2d\x26\x15\x0d\xc7\xd6\x8c\x0d\xa9\x04\x7d\x11\x9a\x09\x9f\xf8\xbd\x8e\xcc\x0c\x56\x86\xe4\x27\xbc\x83\x0a\xff\x8e\x6f\x86\x51\x2f\x43\x83\x8f\x5c\xae\x73\xf1\x66\x34\x1e\xef\x9a\x5a\xf1\xf9\xa0\x2b\x52\xae\xdf\x18\x2f\xe5\xbf\xfb\xf2\x9f\x51\xdf\x9a\x61\x3a\xe9\x2f\x4a\xea\x8b\x92\xfc\xa2\x14\xff\x22\xbd\x68\x61\x8a\xc3\x95\x00\x85\x95\x00\x83\x16\x17\x25\xe3\x4d\x9d\x44\xd3\x11\x82\x45\xe3\xcd\x64\xc7\x52\x0c\x87\x33\x01\x8c\xa6\x01\xb6\x69\x59\x70\xc4\x7c\x3d\x0b\x1e\x78\x2f\xac\x1a\x97\x1e\x15\x74\x5d\x74\x87\x5c\xcd\x78\x81\xae\xbc\xc8\xa2\x2b\xea\xb1\x71\xe0\x95\xcb\x06\x97\x6d\x62\xad\xf9\x01\x92\xdd\xfe\x67\x16\x54\x12\x6d\x05\x59\xdc\x7a\x08\x7e\x1b\x46\x5a\x47\x28\x3b\x58\x48\x30\x37\x2b\x3e\xba\x19\xf9\x2a\xb1\x43\x12\x5f\x96\x13\x1f\x72\xdd\x30\xff\xe3\x38\xa2\x92\x3d\xd7\x8d\xe1\xd0\x69\xe9\x9b\x49\xf4\x4a\x84\xb9\x33\x21\xcc\xc9\x44\x98\x6b\x04\xf8\x6a\x5a\x6e\xc4\x5c\xca\xb1\x86\xae\x9a\x19\x60\x7f\x1e\x5f\xa7\x71\xd0\x2c\x95\x72\xb0\x96\xf5\x79\x0c\x6b\x11\x02\x4d\xb4\x8e\xe0\x2d\x41\x3c\x4e\xec\xe7\x38\x82\x1f\x86\x82\x6d\x1c\xf1\x8a\x87\x25\x30\xfd\xa2\x6e\xe2\xca\x88\x81\x59\xe2\x8c\xcc\xa0\x30\x13\x57\xa2\x8c\x2d\xd5\x6e\x34\x07\x13\x57\xe2\x2c\xcf\xda\xcc\xa6\x41\x13\x57\x12\x9c\x30\xdd\x52\x4d\xda\xc4\x95\x38\xdb\xb5\x36\x47\xe2\x72\xc6\x6c\x8d\xc1\x20\xbb\xc1\x68\x9a\xc6\x60\x90\x3d\xad\xf4\xf3\x70\x12\x43\x93\xcb\xf1\x97\xbd\x6c\xbb\x89\xa2\xcf\xa8\x61\x6b\x74\xef\xc6\xd2\xa4\x89\xd2\xf3\x1e\x72\x4d\x56\x5c\x8b\x3a\xd6\xd5\x4d\x9a\x2b\x12\x63\x30\xd0\x89\x45\xa2\xbc\x33\xc9\x0e\xb1\x31\x18\x24\xbf\x0a\x18\xba\xb3\x91\x66\x7d\xac\xe0\x4e\x22\xd1\x9d\x74\x20\xf9\xde\xd6\x56\xf2\xac\xba\x82\xfc\x6c\x18\x0c\x74\x6a\xc9\xbf\x63\x53\x95\x67\x95\x17\xf4\x45\xd1\x77\x1f\xe1\x26\x3f\x32\x5c\x71\x64\x7c\xf0\x5d\x57\xa7\xa9\x05\x50\xe3\x65\x6d\x9f\xa6\xbe\x69\xce\xb4\x0e\x9c\xc9\x11\x9a\x12\x89\xb6\xa5\x7b\x25\xd7\xa8\x36\x36\x1c\x99\x37\xec\xa7\x3a\x99\x23\x5f\x99\xc1\x14\xf6\xed\xe1\xc8\xe0\xef\x5b\xcd\x52\xfd\xc0\x7f\xce\x22\xac\x84\x5d\xf9\x59\xac\x24\x98\x42\xc8\x4b\xfc\x52\xc9\xb0\x2d\xdd\x2e\xa5\xe0\x62\x54\x1b\x66\x62\x26\x89\x4e\x53\x33\x0a\xf6\xbf\x23\xa9\xf5\x98\xf4\xd3\x66\x9b\xb4\xc4\x30\x13\xf4\x4c\x3a\x07\xcd\x8f\xb6\xe2\xd0\xd8\x48\xe2\x5b\x10\x10\x8d\xd1\x8e\x20\x1d\x67\xa6\x49\xc7\x4e\x6d\x13\xaa\xad\x25\x65\x9d\xc1\x40\xfc\xeb\x04\x5b\x04\x2a\x12\xad\x99\xae\x55\x13\x24\x66\x7b\xa4\xa7\x33\xd3\x31\x4c\xdb\xfa\x52\xf1\x90\x30\xe6\x36\x27\x0d\xad\x90\xbb\x69\x25\xb0\x3d\x18\x8c\x87\x6a\xe6\xfb\x94\xd8\x61\x87\x0a\xa7\x44\xa6\x6f\xd9\x5c\xcf\x8c\x0a\x61\x5d\x8b\x5d\xcd\x02\x2c\x3f\x3a\x56\xb9\x1e\x72\x21\xb1\x37\xbb\x1c\x33\x5d\xab\x1b\x67\x40\x9b\x91\xf7\x5b\x5b\xdd\xf8\x01\x93\x20\x76\xcf\xd2\xfd\x24\x95\x97\xba\x59\x74\xef\x5a\xa9\x86\xf2\xc6\x85\x2f\xb8\x67\xb1\x2b\x27\x29\x45\x7a\x96\xde\x4b\xf5\x9d\xe2\x1b\xb2\xef\x54\xc3\xa1\x34\x7d\xba\x56\xe3\x9f\xba\x67\x35\xfe\xd9\xbc\x6a\x06\x7a\x5e\x74\x98\x4a\xa4\xa3\x0d\x58\x80\x49\x78\x11\x26\xd1\x09\xd8\x8b\xd9\xb2\x48\xa9\x7e\xd0\x4a\xb0\x8b\x56\x21\x76\xd1\x0a\xee\x11\xdb\x96\xde\x91\xdc\x0a\x26\x79\x44\x2b\x9f\x47\xb4\x47\x3c\x02\x0e\x95\x7a\xb2\x44\x0e\x71\x75\xb3\x41\xf3\xc1\x24\x16\xb5\x1f\x5f\x61\x09\xe5\xca\x88\x11\x58\x3a\x02\x82\x4e\x02\x82\x4e\x21\x08\x3a\xa5\x92\x41\x93\x20\x73\x52\x20\x93\x93\xcb\xee\x74\xfc\x24\x15\x78\xe8\x30\x50\xf6\xd6\x0a\xc0\xe5\xfa\xfa\xc0\x51\xcc\x25\x04\xd7\x44\x3b\xba\x70\x80\x6b\x57\x11\xbe\x73\x3c\x82\x45\xe9\x01\xf3\xea\x26\x7a\x4b\xc5\xbc\x07\x01\x5c\x64\x8d\xff\x8a\x59\xe1\x3d\xcf\x77\x1f\x79\x0f\xb2\xce\x34\xf1\xf4\x5f\xba\x88\xc1\x2b\x0c\xbb\xc8\xd2\x7e\x29\xa1\xd2\x2f\xda\xcd\x2f\xe2\x5e\x6f\x94\x82\x75\x74\xc1\x67\x62\xeb\xa7\x9a\xf0\xfe\x6f\xe7\x1f\x3f\x54\x7a\xd0\xa3\x48\x97\x97\xdc\x97\x67\x27\x47\x81\xbb\x17\x57\xe3\x87\xc1\x42\xb3\x0d\x20\x38\xdf\x00\x82\xd5\x25\x1a\x09\x2e\xd1\x30\xea\x03\x61\xb4\xd4\x7f\x39\x22\xbe\x6b\x8b\xc0\x55\x0f\x41\x1b\xc8\xb5\x82\x96\x47\xba\x80\xaf\x04\x30\xd8\x06\x7d\x87\x75\x00\x5f\x12\x50\x4b\xaa\xfc\x22\xee\x21\x3d\x1f\x63\x07\xb7\x2f\x10\x65\x74\x30\xf0\xd0\x77\xdf\xf1\xa2\xe0\x86\xbd\x9e\x66\x04\x18\x09\xef\x49\xdf\x7d\x7c\xfb\xe5\xec\xf5\xf9\xc7\x77\x9f\x5e\x9f\xed\x6f\xd6\x4d\xfe\xfb\xf0\xe8\xe2\xe4\xd3\xeb\x2f\x6f\x5f\x7f\x78\x7d\x76\x78\x71\xf2\xf1\x43\xf0\xe2\xd3\xc9\xeb\xdf\xbf\xbc\xfb\xf8\xf1\xdf\x97\xa7\xe7\xc1\xb3\x8b\xb3\xc3\x0f\xe7\x27\xbc\x55\xd6\xa3\x2f\x27\x1f\x2e\x5e\x9f\x7d\x38\x7c\xc7\xdf\xe1\x98\x23\x9d\x66\xde\xa9\x9b\x28\x6d\xbb\xb2\x57\xa9\x95\x20\x84\x7b\xcd\xed\xc6\x9e\x36\x34\x36\xfe\x6f\x00\x00\x00\xff\xff\x9d\x12\xc5\x9b\x8e\x8f\x0e\x00") -func bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3JsBytes() ([]byte, error) { +func bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872JsBytes() ([]byte, error) { return bindataRead( - _bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3Js, - "bindata/public/assets/documize-9296c7094ce7ee195933e0cccd1beff3.js", + _bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872Js, + "bindata/public/assets/documize-59e28465e64f60780e745ce5f305c872.js", ) } -func bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3Js() (*asset, error) { - bytes, err := bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3JsBytes() +func bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872Js() (*asset, error) { + bytes, err := bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872JsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/documize-9296c7094ce7ee195933e0cccd1beff3.js", size: 954254, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/documize-59e28465e64f60780e745ce5f305c872.js", size: 954254, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1719,7 +1692,7 @@ func bindataPublicAssetsFontMaterialiconsRegularEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.eot", size: 143258, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.eot", size: 143258, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1739,7 +1712,7 @@ func bindataPublicAssetsFontMaterialiconsRegularTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.ttf", size: 128180, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.ttf", size: 128180, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1759,7 +1732,7 @@ func bindataPublicAssetsFontMaterialiconsRegularWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff", size: 57620, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff", size: 57620, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1779,7 +1752,7 @@ func bindataPublicAssetsFontMaterialiconsRegularWoff2() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff2", size: 44300, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/MaterialIcons-Regular.woff2", size: 44300, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1799,7 +1772,7 @@ func bindataPublicAssetsFontDmzmetaEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.eot", size: 16092, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.eot", size: 16092, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1819,7 +1792,7 @@ func bindataPublicAssetsFontDmzmetaSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.svg", size: 84813, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.svg", size: 84813, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1839,7 +1812,7 @@ func bindataPublicAssetsFontDmzmetaTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.ttf", size: 15928, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.ttf", size: 15928, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1859,7 +1832,7 @@ func bindataPublicAssetsFontDmzmetaWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff", size: 8820, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff", size: 8820, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1879,7 +1852,7 @@ func bindataPublicAssetsFontDmzmetaWoff2() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff2", size: 7208, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzmeta.woff2", size: 7208, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1899,7 +1872,7 @@ func bindataPublicAssetsFontDmzuiEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.eot", size: 17672, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.eot", size: 17672, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1919,7 +1892,7 @@ func bindataPublicAssetsFontDmzuiSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.svg", size: 89710, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.svg", size: 89710, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1939,7 +1912,7 @@ func bindataPublicAssetsFontDmzuiTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.ttf", size: 17516, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.ttf", size: 17516, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1959,7 +1932,7 @@ func bindataPublicAssetsFontDmzuiWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff", size: 9176, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff", size: 9176, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1979,7 +1952,7 @@ func bindataPublicAssetsFontDmzuiWoff2() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff2", size: 7556, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/font/dmzui.woff2", size: 7556, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1999,7 +1972,7 @@ func bindataPublicAssetsImgAttachmentsAviPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/avi.png", size: 1495, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/avi.png", size: 1495, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2019,7 +1992,7 @@ func bindataPublicAssetsImgAttachmentsBinPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/bin.png", size: 1470, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/bin.png", size: 1470, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2039,7 +2012,7 @@ func bindataPublicAssetsImgAttachmentsCodePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/code.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/code.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2059,7 +2032,7 @@ func bindataPublicAssetsImgAttachmentsCssPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/css.png", size: 1542, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/css.png", size: 1542, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2079,7 +2052,7 @@ func bindataPublicAssetsImgAttachmentsDocPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/doc.png", size: 1497, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/doc.png", size: 1497, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2099,7 +2072,7 @@ func bindataPublicAssetsImgAttachmentsGifPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/gif.png", size: 1463, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/gif.png", size: 1463, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2119,7 +2092,7 @@ func bindataPublicAssetsImgAttachmentsHtmlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/html.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/html.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2139,7 +2112,7 @@ func bindataPublicAssetsImgAttachmentsImagePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/image.png", size: 1511, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/image.png", size: 1511, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2159,7 +2132,7 @@ func bindataPublicAssetsImgAttachmentsJpgPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/jpg.png", size: 1502, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/jpg.png", size: 1502, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2179,7 +2152,7 @@ func bindataPublicAssetsImgAttachmentsMp3Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/mp3.png", size: 1509, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/mp3.png", size: 1509, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2199,7 +2172,7 @@ func bindataPublicAssetsImgAttachmentsPdfPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/pdf.png", size: 1443, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/pdf.png", size: 1443, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2219,7 +2192,7 @@ func bindataPublicAssetsImgAttachmentsPngPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/png.png", size: 1514, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/png.png", size: 1514, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2239,7 +2212,7 @@ func bindataPublicAssetsImgAttachmentsPptPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/ppt.png", size: 1445, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/ppt.png", size: 1445, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2259,7 +2232,7 @@ func bindataPublicAssetsImgAttachmentsPsdPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/psd.png", size: 1508, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/psd.png", size: 1508, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2279,7 +2252,7 @@ func bindataPublicAssetsImgAttachmentsSettingsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/settings.png", size: 1589, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/settings.png", size: 1589, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2299,7 +2272,7 @@ func bindataPublicAssetsImgAttachmentsTxtPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/txt.png", size: 1444, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/txt.png", size: 1444, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2319,7 +2292,7 @@ func bindataPublicAssetsImgAttachmentsUnknownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/unknown.png", size: 1391, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/unknown.png", size: 1391, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2339,7 +2312,7 @@ func bindataPublicAssetsImgAttachmentsVectorPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vector.png", size: 1395, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vector.png", size: 1395, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2359,7 +2332,7 @@ func bindataPublicAssetsImgAttachmentsVideoPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/video.png", size: 1336, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/video.png", size: 1336, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2379,7 +2352,7 @@ func bindataPublicAssetsImgAttachmentsVsdPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vsd.png", size: 1545, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/vsd.png", size: 1545, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2399,7 +2372,7 @@ func bindataPublicAssetsImgAttachmentsXlsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/xls.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/xls.png", size: 1520, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2419,7 +2392,7 @@ func bindataPublicAssetsImgAttachmentsZipPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/attachments/zip.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/attachments/zip.png", size: 1459, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2439,7 +2412,7 @@ func bindataPublicAssetsImgBusyBlackGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/busy-black.gif", size: 97340, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/busy-black.gif", size: 97340, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2459,7 +2432,7 @@ func bindataPublicAssetsImgBusyGrayGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/busy-gray.gif", size: 83378, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/busy-gray.gif", size: 83378, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2479,7 +2452,7 @@ func bindataPublicAssetsImgBusyWhiteGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/busy-white.gif", size: 42705, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/busy-white.gif", size: 42705, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2499,7 +2472,7 @@ func bindataPublicAssetsImgGithubIconLastUpdatedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/github/icon-last-updated.png", size: 1293, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/github/icon-last-updated.png", size: 1293, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2519,7 +2492,7 @@ func bindataPublicAssetsImgIconBlack1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-1024x1024.png", size: 17397, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-1024x1024.png", size: 17397, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2539,7 +2512,7 @@ func bindataPublicAssetsImgIconBlack128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-128x128.png", size: 2418, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-128x128.png", size: 2418, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2559,7 +2532,7 @@ func bindataPublicAssetsImgIconBlack256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-256x256.png", size: 4174, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-256x256.png", size: 4174, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2579,7 +2552,7 @@ func bindataPublicAssetsImgIconBlack64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-64x64.png", size: 1724, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-black-64x64.png", size: 1724, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2599,7 +2572,7 @@ func bindataPublicAssetsImgIconBlue1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-1024x1024.png", size: 16700, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-1024x1024.png", size: 16700, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2619,7 +2592,7 @@ func bindataPublicAssetsImgIconBlue128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-128x128.png", size: 2526, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-128x128.png", size: 2526, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2639,7 +2612,7 @@ func bindataPublicAssetsImgIconBlue256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-256x256.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-256x256.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2659,7 +2632,7 @@ func bindataPublicAssetsImgIconBlue64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-64x64.png", size: 1751, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-blue-64x64.png", size: 1751, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2679,7 +2652,7 @@ func bindataPublicAssetsImgIconPurple1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-1024x1024.png", size: 50539, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-1024x1024.png", size: 50539, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2699,7 +2672,7 @@ func bindataPublicAssetsImgIconPurple128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-128x128.png", size: 4181, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-128x128.png", size: 4181, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2719,7 +2692,7 @@ func bindataPublicAssetsImgIconPurple256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-256x256.png", size: 8627, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-256x256.png", size: 8627, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2739,7 +2712,7 @@ func bindataPublicAssetsImgIconPurple64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-64x64.png", size: 2091, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-purple-64x64.png", size: 2091, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2759,7 +2732,7 @@ func bindataPublicAssetsImgIconWhite1024x1024Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-1024x1024.png", size: 17035, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-1024x1024.png", size: 17035, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2779,7 +2752,7 @@ func bindataPublicAssetsImgIconWhite128x128Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-128x128.png", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-128x128.png", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2799,7 +2772,7 @@ func bindataPublicAssetsImgIconWhite256x256Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-256x256.png", size: 4213, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-256x256.png", size: 4213, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2819,7 +2792,7 @@ func bindataPublicAssetsImgIconWhite64x64Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-64x64.png", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/icon-white-64x64.png", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2839,7 +2812,7 @@ func bindataPublicAssetsImgLogoBlackPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/logo-black.png", size: 10031, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/logo-black.png", size: 10031, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2859,7 +2832,7 @@ func bindataPublicAssetsImgLogoColorPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/logo-color.png", size: 5618, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/logo-color.png", size: 5618, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2879,7 +2852,7 @@ func bindataPublicAssetsImgLogoPurplePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/logo-purple.png", size: 7706, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/logo-purple.png", size: 7706, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2899,7 +2872,7 @@ func bindataPublicAssetsImgOnboardLockGreenPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-green.png", size: 3229, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-green.png", size: 3229, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2919,7 +2892,7 @@ func bindataPublicAssetsImgOnboardLockRedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-red.png", size: 3158, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock-red.png", size: 3158, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2939,7 +2912,7 @@ func bindataPublicAssetsImgOnboardLockPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock.png", size: 3004, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/lock.png", size: 3004, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2959,7 +2932,7 @@ func bindataPublicAssetsImgOnboardNavIconsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/nav-icons.png", size: 2527, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/nav-icons.png", size: 2527, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2979,7 +2952,7 @@ func bindataPublicAssetsImgOnboardPatternPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/pattern.png", size: 6084, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/pattern.png", size: 6084, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2999,7 +2972,7 @@ func bindataPublicAssetsImgOnboardPersonGreenPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-green.png", size: 6260, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-green.png", size: 6260, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3019,7 +2992,7 @@ func bindataPublicAssetsImgOnboardPersonRedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-red.png", size: 6057, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person-red.png", size: 6057, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3039,7 +3012,7 @@ func bindataPublicAssetsImgOnboardPersonPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person.png", size: 5580, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/onboard/person.png", size: 5580, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3059,7 +3032,7 @@ func bindataPublicAssetsImgSetupErrorPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/setup/error.png", size: 2660, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/setup/error.png", size: 2660, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3079,7 +3052,7 @@ func bindataPublicAssetsImgSetupLogoPurplePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple.png", size: 7706, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple.png", size: 7706, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3099,7 +3072,7 @@ func bindataPublicAssetsImgSetupLogoPurple2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple@2x.png", size: 16907, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/img/setup/logo-purple@2x.png", size: 16907, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3119,7 +3092,7 @@ func bindataPublicAssetsThemeBrave2a263f0949872a67b6ea67cb90f31aefCss() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-brave-2a263f0949872a67b6ea67cb90f31aef.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-brave-2a263f0949872a67b6ea67cb90f31aef.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3139,7 +3112,7 @@ func bindataPublicAssetsThemeConference6db7d3931dec8278a8aacf030dbbb4f5Css() (*a return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-conference-6db7d3931dec8278a8aacf030dbbb4f5.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-conference-6db7d3931dec8278a8aacf030dbbb4f5.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3159,7 +3132,7 @@ func bindataPublicAssetsThemeForest80ccb2c17d16c96fbc70d94d19c35acfCss() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-forest-80ccb2c17d16c96fbc70d94d19c35acf.css", size: 415416, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-forest-80ccb2c17d16c96fbc70d94d19c35acf.css", size: 415416, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3179,7 +3152,7 @@ func bindataPublicAssetsThemeHarvest76ba5e734e8eff4e4e89dfb76aa1898aCss() (*asse return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-harvest-76ba5e734e8eff4e4e89dfb76aa1898a.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-harvest-76ba5e734e8eff4e4e89dfb76aa1898a.css", size: 415424, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3199,7 +3172,7 @@ func bindataPublicAssetsThemeSilverB3b5ee8389a70a97b012c90b5801abeaCss() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-silver-b3b5ee8389a70a97b012c90b5801abea.css", size: 415124, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-silver-b3b5ee8389a70a97b012c90b5801abea.css", size: 415124, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3219,7 +3192,7 @@ func bindataPublicAssetsThemeSunflower41d93b240ec10c3f8357bcb205c7ab80Css() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/theme-sunflower-41d93b240ec10c3f8357bcb205c7ab80.css", size: 415432, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/theme-sunflower-41d93b240ec10c3f8357bcb205c7ab80.css", size: 415432, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3239,7 +3212,7 @@ func bindataPublicAssetsVendorB2be9a3c3aa09c32b38be5ba5d34b312Js() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/vendor-b2be9a3c3aa09c32b38be5ba5d34b312.js", size: 1841791, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/vendor-b2be9a3c3aa09c32b38be5ba5d34b312.js", size: 1841791, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3259,47 +3232,7 @@ func bindataPublicAssetsVendorEdb876ab3653e1c4ec07d79685459500Css() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/assets/vendor-edb876ab3653e1c4ec07d79685459500.css", size: 13535, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicCodemirrorDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x6d\x6c\x14\xd7\xd5\x3e\xcf\x62\xcc\x5c\x3c\xb6\x2f\xf9\x58\xdb\x9b\x5d\xb3\x60\x1c\x1b\xb2\x79\xb1\x1d\x6c\xe3\x38\x71\x16\xdb\x7c\x38\x10\x70\x30\x60\x83\xf3\x62\x66\x77\x26\x61\x94\xf1\x8c\xd9\x99\xb5\x01\x07\x64\xb5\x55\x53\xb5\x21\x52\xab\x36\x4d\x50\xd5\x86\xa2\x56\x6d\x41\xfd\x85\xdb\xa6\xb4\xe9\x8f\x28\x11\x6a\xab\xb4\x4a\x5c\x11\xa2\xa4\x3f\x22\x35\x91\xfa\x87\xa8\x1f\x6a\xaa\x4a\x69\x35\x33\x77\x97\xdd\xc5\xae\x94\x96\x48\x14\xcf\x23\x59\xe7\xde\x73\xee\x9d\xdd\xeb\x3d\xcf\x3d\xe7\xdc\x3b\x44\x84\xde\xac\xda\x4a\xd4\x4c\x44\x12\xf9\x92\xcb\x44\x65\xcb\x89\xe2\x15\x54\x04\x49\xfc\x5d\x87\x25\xee\x73\x88\xa8\xd2\x6f\x73\xa2\x94\x61\x4f\xf6\xa5\x0c\x2b\x35\xdf\xf0\x00\x01\x02\xdc\x44\x08\x09\xfe\x96\x79\xfc\x35\x48\x2f\xe4\x6f\xe8\x58\x6a\xc2\xd0\x6d\xa7\xa5\xe5\x2d\x84\x96\x94\x2d\x2d\x5f\x26\x31\x56\x11\xde\xb2\x75\xdb\xc0\x18\xe7\x59\x5b\xdb\xad\x19\x8a\xa3\x4f\x6a\xfd\x8a\xa3\xd9\x63\xbc\xda\x3e\x6c\x4d\x0d\xa4\x2d\x73\x30\xa3\x4d\xea\xda\xd4\x70\xda\x32\xb2\xe3\xa6\x3d\xc6\x57\xa4\x15\x23\x9d\x35\x14\x47\xdb\x64\x18\x43\xfa\x71\xcd\x1e\x71\xb4\xa3\x8e\xdb\x3a\x60\x5b\x19\xa7\xcf\x1b\x38\xa2\xa7\x2d\xd3\xd5\x8d\xf1\xdb\xdc\xf9\xbb\x26\x1c\xdd\x32\xed\x7d\x5a\xc6\xd6\x2d\x93\xb1\x73\xf2\x9d\x91\x95\x0d\xcd\xf7\xb6\x75\x3e\xb0\x69\xae\xb2\xaa\x9a\xaf\xb8\x8d\xb1\x03\xba\xaa\x99\x8e\xfe\xb8\xae\x65\xf6\x4e\xe9\xaa\x73\x78\xbf\x62\xa7\x35\x53\xd5\xcd\x27\x86\x27\x75\x5b\x4f\x19\xda\x1e\x53\x19\xd7\x56\x84\x3a\x19\x9b\xe3\x55\xd5\x95\xe1\x9a\x70\x9d\xc4\x1b\xa4\x91\x6c\x4a\x3f\x92\xd5\x9d\x63\x9e\x96\x45\xc3\xf5\x8c\xcf\x4a\x8f\xa9\x8a\xa3\x3d\x62\xa9\xee\x13\x55\x7f\x7c\x34\xbc\x5a\x92\x46\x5d\x7d\x5f\x46\x53\x1c\xa1\x66\x8d\xe1\x26\xc6\x15\x69\x8f\xad\x1f\xd7\x7c\xcd\x3a\x96\x60\xdc\x66\x7b\x9e\xd4\x4d\x31\x75\x3d\x6b\x95\xb8\xca\xf6\x1a\x4a\x4a\x33\x7c\xd5\x06\xd6\x21\xf1\xed\x6c\x78\xd2\x5f\x96\xaf\xec\x62\xdd\xd2\x0a\x24\xd8\x48\xda\x1a\x1f\xd7\x4c\xc7\xf6\xd5\x3d\xe1\xa4\xc4\x2f\x49\x07\xdd\xcf\xde\xa1\xd8\xce\xae\x09\xcd\xbc\xf6\xad\xfa\x25\x69\xbf\x6b\xd9\xa4\xaa\x9a\x2a\x35\x24\x9b\xfd\xdf\xd4\x5b\x6e\x43\xb2\xc5\xef\x71\x90\x44\x75\x94\xa0\x1e\xda\x42\x07\x28\x4d\x26\x4d\xd1\x33\x74\x8a\x9e\xa5\xd3\x74\x96\x7e\x48\x17\xe8\x65\x7a\x8d\x7e\x45\xaf\xd3\x6f\xe8\xb7\x74\x85\xde\xa6\x77\xe8\x5d\x7a\x9f\xae\xd2\x87\xf4\x27\xfa\x33\x08\x0c\xcb\x51\x81\x1a\xc4\xb1\x0a\x0d\x58\x83\xb5\x68\xc3\x7d\x68\x47\x07\xba\xd1\x8f\xcd\xd8\x8a\x6d\xd8\x89\x61\x8c\xe0\x00\x46\x91\x86\x81\x71\x4c\xe0\x08\x8e\xe3\xb3\xf8\x1c\x3e\x8f\xa7\xf1\x1c\xbe\x85\x17\x71\x06\xe7\x70\x1e\xb3\xf8\x29\x5e\x11\xde\x07\xe1\x86\x0f\x17\x7b\x25\x5e\x5d\xb4\x0b\x27\xa2\xa5\xa4\x90\x4a\x2a\x59\x64\x1a\xf6\xe4\x84\xe0\xe2\xc1\xf9\xb8\x18\xdb\xb2\x75\xdb\x9a\xff\x98\x8b\x82\xfb\x6e\x6c\xaf\xb8\xd1\x1b\x4b\x80\x00\x01\xfe\xe7\xe1\xee\x0f\x71\x21\x93\x42\xce\xf8\x12\xc2\x1e\x12\xb2\xac\x60\x0e\x17\x32\x2e\x64\x52\xc8\x19\x5f\x42\x8c\x0b\x09\x59\x26\xa4\x24\x24\x17\x32\x2e\x64\x52\xc8\x19\x5f\x8a\x4d\x0b\x21\x21\xc5\x27\x43\x54\x28\xe0\x42\xc6\x85\x4c\x7e\x3a\xff\x9b\x00\x01\x6e\x05\x94\x17\xe5\xfe\x9f\x62\xbe\xf1\xdf\xe4\xfe\x57\x64\x3f\xe1\xbf\xfd\x8e\x3b\xeb\x1b\x9a\x13\xad\x1d\xdd\xc9\x7c\xae\x5c\x92\x25\x16\x65\xf0\x85\x69\xbb\x97\xa9\xfb\xa9\xb8\x97\xa2\xe7\x52\x70\x2f\x6f\x9c\x0b\xd7\xd4\xd6\x45\xee\x62\xb1\xbd\xba\xa9\x6a\x47\x17\xaa\x25\xf8\x32\x37\x4d\x97\xbc\xd1\x2b\xe3\xb1\x18\x77\xd3\x54\xbf\xbb\xa6\x31\xc6\x38\xf8\xac\xc4\xbc\xee\xda\xc6\x58\x8c\x87\x84\xed\xde\xff\x8b\x31\xbe\x84\x2b\xc2\xd6\x76\x1f\x8b\xf1\xa5\x5c\x15\x0f\xea\xdc\xc8\x18\x2f\xe3\x36\xf3\xad\x0f\x3c\xc8\x62\xbc\x9c\x6f\x67\xd2\x5c\x5d\x4d\x6d\x98\xf5\xb2\x7e\xe6\x96\x2f\x9c\x16\xca\x75\x17\xcc\x74\xcf\xd0\x0f\xe8\x25\x7a\x8d\xde\xa0\xcb\xf4\x2e\xbd\x47\x7f\xa4\xab\xf4\x11\x7d\x8c\x32\x54\x21\x8c\x5a\xdc\x85\x28\x62\xb8\x1b\xcd\x58\x87\x7b\x90\x40\x3b\x3a\xd1\x85\xfb\xbd\xfc\x76\x8b\x97\xdf\x3e\x8a\x21\xec\xc5\x3e\x0c\xe3\x10\x52\x50\xa1\xe1\x71\x58\x38\x02\x1b\x0e\xb2\x38\x89\x19\x7c\xc6\xcb\x76\x4f\xe1\x59\x7c\x19\x5f\xc1\x57\xf1\x35\x7c\x13\x67\xfd\xaf\x95\xcf\x73\x07\x8a\x5d\x0e\xe7\xaf\xf9\xdc\xe4\x50\xc6\x34\x2c\xf3\x89\x7c\x25\x3a\x4e\x16\xa9\xa4\xa5\xa6\x6c\xe1\x8b\x74\x29\xe7\x8b\x97\x73\xbe\xe8\xa2\x52\xfa\xff\xa1\xc3\xd6\xd4\x90\xa3\x38\x59\xbb\x57\xc9\x8c\xba\xbd\x41\xc5\x39\x9c\x12\xed\x3d\x96\x65\xe4\xdb\x4a\x6a\x9f\xae\x4d\x8d\xf1\x3b\xfa\x2c\xd3\x51\x74\x53\xcb\x78\x93\x75\x55\x4b\x29\x99\xc7\x86\x75\x53\xb5\xa6\x7a\xad\xac\xa9\xda\xa3\x05\x06\xe6\x62\x8c\xd7\x4c\x4f\xb7\x75\x25\xe2\x1b\x5b\x4e\x24\xe2\xd3\xad\xad\x1b\xda\x13\xf1\xce\x8d\xed\x27\x4e\x30\xa9\xa6\xb1\xf5\xc1\x81\x43\xe3\xc7\x8e\x4f\x3f\x75\xe2\xe4\xf3\x62\x75\xb9\x55\x57\x97\x30\xed\x85\xc2\xf5\x15\xd4\xd9\x17\x73\xeb\x7b\x3b\xcf\xb5\xe5\x15\x72\x65\x64\xdb\xc0\xc3\xdb\x77\xc8\xf3\x32\xe2\x93\x31\xce\x1d\x9d\xce\x58\x86\x31\x68\xd9\xba\xfb\x98\xfd\x79\x0e\x5e\x67\x1a\x99\x9f\x95\xd7\x71\x9e\x83\x9d\xab\xaa\x89\xae\x6a\x5c\xb7\x7e\x43\x57\x4f\xdf\x9c\xcf\x4e\x59\xfe\x64\x05\xb9\x3b\xab\xb6\x2e\x12\xc9\x17\xe3\xbc\x41\x92\x3c\x6d\xac\x3e\x22\x17\x51\xd9\x63\x96\x6b\x59\x5d\x1f\x89\x14\xf2\x5a\x4c\xb8\xbb\x29\x22\x7b\x14\xf7\x68\xe6\x6a\xee\x49\xc8\xb2\xc7\x74\x8f\x5a\xae\xa6\xa5\x55\x8e\xf8\x3b\x80\x47\x3e\x57\xd5\xde\x21\x47\x72\x3b\x81\xc7\x39\x57\x79\x7f\xb7\x1c\xc9\xef\x2f\x3e\xe3\x5d\xf5\x43\xc9\x48\xa4\x64\xb7\xf1\xe8\xef\xda\xfa\xeb\x23\x91\x82\xaa\x54\x92\x1a\x92\xa7\xdf\xf2\x7e\xf6\x3c\x69\x1b\x72\x8e\x50\xcc\x5e\x46\x12\xc5\xa8\x8d\xfa\x69\x07\x1d\xa2\x0c\x4d\xd3\x29\x7a\x9e\xce\xd0\x05\xfa\x11\xfd\x98\x5e\xa1\x5f\x7b\xe4\xfd\x80\xae\xd2\x5f\xe8\x6f\xf4\x11\xfd\x1d\x21\x54\xa0\x12\x55\xa8\x46\x2d\x1a\xd1\x84\x66\xaf\x34\xed\xc1\x43\x48\x62\x00\x3b\x31\x88\x47\xb1\x1b\xa3\x1e\x65\xd3\x50\x31\x0e\x1b\x59\x4c\x62\x0a\x33\xf8\x02\xbe\x88\x2f\xe1\x19\x8f\xa6\x67\xf0\x6d\x9c\xc5\x79\x5c\xc4\xcf\xf1\x32\x7e\x81\x4b\x78\x03\x6f\x62\x0e\xbf\xc3\xef\xf1\x01\x3e\xc4\x5f\xf1\x71\x09\x91\x77\x96\x10\xf9\x9f\x25\x2e\x9d\x0b\x1f\x2f\xce\xef\xd2\xd1\xad\xae\x4f\xdf\xc4\x2e\x7d\x25\x17\x65\xc2\x35\xf1\xc6\xb5\xde\x51\xd3\x0d\x8e\x33\x6e\x94\x89\xc6\xe4\x95\x39\x32\x94\x92\xc4\x8f\x3f\xde\x69\x10\x5f\xe6\x8f\x5e\x1d\x5d\xe3\x86\x19\x2e\x79\x5d\xb9\x29\x5a\xc1\xf8\xac\xdf\x89\x36\x45\x13\x92\xc4\x43\xbe\x65\x7d\xb4\x95\x71\x45\xe2\x4b\x7c\xdb\x06\xb9\x43\xe2\x2a\xe3\x4b\x7d\x6b\x97\xdc\xcd\xb8\xcd\x78\x99\x6f\xed\x91\x93\x12\xdf\xce\x78\xb9\x6f\xed\x93\x37\x5f\x8b\x32\x37\xc4\x73\x7f\x49\x6f\xd2\x7b\x74\x95\xfe\x01\x42\x39\x2a\x70\x3b\x6a\xb1\x0a\x6b\xb1\x1e\x5d\x9e\xa7\xf6\x79\x41\x66\x17\x06\xb1\xdb\x0b\x32\x07\x31\x06\x05\x29\x3c\xe9\x1d\xa4\x58\x38\x8a\x63\x98\xc6\x53\x38\x89\xa7\x85\xd7\x9e\xc2\x73\xf8\x3a\x5e\xc0\x69\x7c\x03\xdf\xc1\x77\xf1\x3d\x7c\x1f\xe7\x70\x01\xb3\xf8\x09\x5e\xc2\x45\xfc\x0c\xaf\xe2\x75\x5c\xc6\x3b\xf8\x43\x89\xdf\x3e\x52\xe2\xb7\xef\x17\xfa\x6d\x49\x08\x0a\x10\x20\x40\x80\x00\x01\x16\x01\xca\x8b\xef\x1c\x6e\xd1\xba\xab\x60\x85\xaa\x9d\x36\x52\x96\x65\xd0\x75\x97\x2d\xc1\xc5\x67\x70\xf1\xb9\x78\xee\xff\x82\xf3\xb8\xe0\x3c\x4e\xf8\xdd\xf9\x62\xbf\x2b\x29\x88\xc4\x49\xdd\xad\x18\x19\x16\x73\xfd\xef\xfd\xe6\x1e\x9a\x2b\x88\x68\xf3\xc2\xef\xff\x05\x08\x10\xe0\x16\x06\xca\xfa\x87\xfa\x7b\xff\xcd\xf9\x57\x48\xbc\x08\x70\x28\x37\x61\x81\x17\x01\x44\x5b\x12\xb2\xa5\x40\x77\x73\xbc\x04\x10\xc4\x7f\x0a\xe2\x7f\x1e\x8b\x3a\xfe\xff\x2b\x00\x00\xff\xff\x32\x6d\x00\xeb\x04\x30\x00\x00") - -func bindataPublicCodemirrorDs_storeBytes() ([]byte, error) { - return bindataRead( - _bindataPublicCodemirrorDs_store, - "bindata/public/codemirror/.DS_Store", - ) -} - -func bindataPublicCodemirrorDs_store() (*asset, error) { - bytes, err := bindataPublicCodemirrorDs_storeBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/codemirror/.DS_Store", size: 12292, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicCodemirrorAddonDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x98\x41\x4a\xc5\x30\x10\x86\xff\x89\x01\x03\x6e\xb2\x74\x99\x2b\x78\x83\xf0\x78\x9e\xc0\x0b\x88\xaf\x6f\xf7\x6a\x16\xea\xbe\x2b\xcf\xe5\xd1\xa4\xe6\x2f\x2d\x34\x05\x37\x62\x95\xff\x83\xf2\x41\x33\x33\x2d\x5d\x24\x33\x05\x60\x87\xb7\xee\x0e\x88\x00\x02\xaa\xf1\x8e\x26\x81\xd7\x0a\xb7\xb0\x7d\xd5\x38\xe3\x19\xaf\xdd\xcb\xe9\xf2\x54\xda\xb5\x9a\x35\xae\x71\x42\x41\x8f\x7e\x99\x5f\x2e\xe3\xb2\x47\x8f\x82\x0e\xe7\xe9\xa6\x7d\xb3\xae\x10\x42\x08\x21\xda\xf0\x2c\x0d\x37\xbf\xfd\x22\x42\x88\xdd\x31\xee\x0f\x89\xce\xf4\x50\x6d\x5c\x77\xb4\x5f\xe4\x44\x3a\xd1\x99\x1e\xaa\x8d\x71\x8e\xf6\x74\xa0\x23\x9d\xe8\x4c\x0f\xd5\xdc\xb4\x8c\xc3\x87\xf1\xc9\xc6\x09\xc5\x22\x9d\xe8\xfc\x33\xdf\x46\x88\xbf\xce\x55\x55\x1c\xcf\xff\xfb\xed\xf9\x5f\x08\xf1\x8f\x31\x7f\x7c\x38\x1e\xe6\x81\x60\x85\x63\x23\xf0\xc8\x98\x8f\x29\x71\xa3\x11\x70\xf5\x87\xe1\x2d\xe6\x38\x35\x03\x42\xec\x88\xcf\x00\x00\x00\xff\xff\xa0\x77\xe0\x5b\x04\x18\x00\x00") - -func bindataPublicCodemirrorAddonDs_storeBytes() ([]byte, error) { - return bindataRead( - _bindataPublicCodemirrorAddonDs_store, - "bindata/public/codemirror/addon/.DS_Store", - ) -} - -func bindataPublicCodemirrorAddonDs_store() (*asset, error) { - bytes, err := bindataPublicCodemirrorAddonDs_storeBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/codemirror/addon/.DS_Store", size: 6148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/assets/vendor-edb876ab3653e1c4ec07d79685459500.css", size: 13535, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3319,7 +3252,7 @@ func bindataPublicCodemirrorAddonCommentCommentJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/comment.js", size: 3982, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/comment.js", size: 3982, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3339,7 +3272,7 @@ func bindataPublicCodemirrorAddonCommentContinuecommentJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/continuecomment.js", size: 1556, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/comment/continuecomment.js", size: 1556, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3359,7 +3292,7 @@ func bindataPublicCodemirrorAddonDialogDialogCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.css", size: 507, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.css", size: 507, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3379,7 +3312,7 @@ func bindataPublicCodemirrorAddonDialogDialogJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.js", size: 2306, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/dialog/dialog.js", size: 2306, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3399,7 +3332,7 @@ func bindataPublicCodemirrorAddonDisplayAutorefreshJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/autorefresh.js", size: 852, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/autorefresh.js", size: 852, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3419,7 +3352,7 @@ func bindataPublicCodemirrorAddonDisplayFullscreenCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.css", size: 116, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.css", size: 116, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3439,7 +3372,7 @@ func bindataPublicCodemirrorAddonDisplayFullscreenJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.js", size: 888, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/fullscreen.js", size: 888, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3459,7 +3392,7 @@ func bindataPublicCodemirrorAddonDisplayPanelJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/panel.js", size: 2427, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/panel.js", size: 2427, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3479,7 +3412,7 @@ func bindataPublicCodemirrorAddonDisplayPlaceholderJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/placeholder.js", size: 1237, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/placeholder.js", size: 1237, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3499,7 +3432,7 @@ func bindataPublicCodemirrorAddonDisplayRulersJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/rulers.js", size: 1177, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/display/rulers.js", size: 1177, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3519,7 +3452,7 @@ func bindataPublicCodemirrorAddonEditClosebracketsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closebrackets.js", size: 3364, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closebrackets.js", size: 3364, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3539,7 +3472,7 @@ func bindataPublicCodemirrorAddonEditClosetagJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closetag.js", size: 3403, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/closetag.js", size: 3403, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3559,7 +3492,7 @@ func bindataPublicCodemirrorAddonEditContinuelistJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/continuelist.js", size: 1371, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/continuelist.js", size: 1371, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3579,7 +3512,7 @@ func bindataPublicCodemirrorAddonEditMatchbracketsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchbrackets.js", size: 2972, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchbrackets.js", size: 2972, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3599,7 +3532,7 @@ func bindataPublicCodemirrorAddonEditMatchtagsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchtags.js", size: 1342, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/matchtags.js", size: 1342, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3619,7 +3552,7 @@ func bindataPublicCodemirrorAddonEditTrailingspaceJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/trailingspace.js", size: 503, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/edit/trailingspace.js", size: 503, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3639,7 +3572,7 @@ func bindataPublicCodemirrorAddonFoldBraceFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/brace-fold.js", size: 1905, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/brace-fold.js", size: 1905, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3659,7 +3592,7 @@ func bindataPublicCodemirrorAddonFoldCommentFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/comment-fold.js", size: 1018, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/comment-fold.js", size: 1018, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3679,7 +3612,7 @@ func bindataPublicCodemirrorAddonFoldFoldcodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldcode.js", size: 2507, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldcode.js", size: 2507, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3699,7 +3632,7 @@ func bindataPublicCodemirrorAddonFoldFoldgutterCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.css", size: 435, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.css", size: 435, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3719,7 +3652,7 @@ func bindataPublicCodemirrorAddonFoldFoldgutterJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.js", size: 2430, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/foldgutter.js", size: 2430, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3739,7 +3672,7 @@ func bindataPublicCodemirrorAddonFoldIndentFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/indent-fold.js", size: 651, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/indent-fold.js", size: 651, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3759,7 +3692,7 @@ func bindataPublicCodemirrorAddonFoldMarkdownFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/markdown-fold.js", size: 716, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/markdown-fold.js", size: 716, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3779,7 +3712,7 @@ func bindataPublicCodemirrorAddonFoldXmlFoldJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/xml-fold.js", size: 3407, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/fold/xml-fold.js", size: 3407, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3799,7 +3732,7 @@ func bindataPublicCodemirrorAddonHintAnywordHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/anyword-hint.js", size: 788, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/anyword-hint.js", size: 788, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3819,7 +3752,7 @@ func bindataPublicCodemirrorAddonHintCssHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/css-hint.js", size: 1173, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/css-hint.js", size: 1173, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3839,7 +3772,7 @@ func bindataPublicCodemirrorAddonHintHtmlHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/html-hint.js", size: 7630, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/html-hint.js", size: 7630, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3859,7 +3792,7 @@ func bindataPublicCodemirrorAddonHintJavascriptHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/javascript-hint.js", size: 3138, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/javascript-hint.js", size: 3138, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3879,7 +3812,7 @@ func bindataPublicCodemirrorAddonHintShowHintCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.css", size: 623, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.css", size: 623, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3899,7 +3832,7 @@ func bindataPublicCodemirrorAddonHintShowHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.js", size: 8814, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/show-hint.js", size: 8814, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3919,7 +3852,7 @@ func bindataPublicCodemirrorAddonHintSqlHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/sql-hint.js", size: 3727, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/sql-hint.js", size: 3727, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3939,7 +3872,7 @@ func bindataPublicCodemirrorAddonHintXmlHintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/xml-hint.js", size: 2150, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/hint/xml-hint.js", size: 2150, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3959,7 +3892,7 @@ func bindataPublicCodemirrorAddonLintCoffeescriptLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/coffeescript-lint.js", size: 750, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/coffeescript-lint.js", size: 750, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3979,7 +3912,7 @@ func bindataPublicCodemirrorAddonLintCssLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/css-lint.js", size: 607, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/css-lint.js", size: 607, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3999,7 +3932,7 @@ func bindataPublicCodemirrorAddonLintHtmlLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/html-lint.js", size: 938, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/html-lint.js", size: 938, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4019,7 +3952,7 @@ func bindataPublicCodemirrorAddonLintJavascriptLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/javascript-lint.js", size: 920, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/javascript-lint.js", size: 920, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4039,7 +3972,7 @@ func bindataPublicCodemirrorAddonLintJsonLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/json-lint.js", size: 629, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/json-lint.js", size: 629, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4059,7 +3992,7 @@ func bindataPublicCodemirrorAddonLintLintCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.css", size: 2999, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.css", size: 2999, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4079,7 +4012,7 @@ func bindataPublicCodemirrorAddonLintLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.js", size: 4217, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/lint.js", size: 4217, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4099,7 +4032,7 @@ func bindataPublicCodemirrorAddonLintYamlLintJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/yaml-lint.js", size: 540, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/lint/yaml-lint.js", size: 540, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4119,7 +4052,7 @@ func bindataPublicCodemirrorAddonMergeMergeCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.css", size: 3423, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.css", size: 3423, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4139,7 +4072,7 @@ func bindataPublicCodemirrorAddonMergeMergeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.js", size: 18425, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/merge/merge.js", size: 18425, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4159,7 +4092,7 @@ func bindataPublicCodemirrorAddonModeLoadmodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/loadmode.js", size: 1162, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/loadmode.js", size: 1162, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4179,7 +4112,7 @@ func bindataPublicCodemirrorAddonModeMultiplexJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex.js", size: 2209, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex.js", size: 2209, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4199,7 +4132,7 @@ func bindataPublicCodemirrorAddonModeMultiplex_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex_test.js", size: 492, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/multiplex_test.js", size: 492, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4219,7 +4152,7 @@ func bindataPublicCodemirrorAddonModeOverlayJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/overlay.js", size: 1321, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/overlay.js", size: 1321, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4239,7 +4172,7 @@ func bindataPublicCodemirrorAddonModeSimpleJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/simple.js", size: 4053, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/mode/simple.js", size: 4053, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4259,7 +4192,7 @@ func bindataPublicCodemirrorAddonRunmodeColorizeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/colorize.js", size: 673, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/colorize.js", size: 673, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4279,7 +4212,7 @@ func bindataPublicCodemirrorAddonRunmodeRunmodeStandaloneJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode-standalone.js", size: 3144, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode-standalone.js", size: 3144, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4299,7 +4232,7 @@ func bindataPublicCodemirrorAddonRunmodeRunmodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.js", size: 1131, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.js", size: 1131, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4319,7 +4252,7 @@ func bindataPublicCodemirrorAddonRunmodeRunmodeNodeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.node.js", size: 4336, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/runmode/runmode.node.js", size: 4336, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4339,7 +4272,7 @@ func bindataPublicCodemirrorAddonScrollAnnotatescrollbarJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/annotatescrollbar.js", size: 2653, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/annotatescrollbar.js", size: 2653, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4359,7 +4292,7 @@ func bindataPublicCodemirrorAddonScrollScrollpastendJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/scrollpastend.js", size: 797, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/scrollpastend.js", size: 797, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4379,7 +4312,7 @@ func bindataPublicCodemirrorAddonScrollSimplescrollbarsCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.css", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.css", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4399,7 +4332,7 @@ func bindataPublicCodemirrorAddonScrollSimplescrollbarsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.js", size: 3101, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/scroll/simplescrollbars.js", size: 3101, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4419,7 +4352,7 @@ func bindataPublicCodemirrorAddonSearchJumpToLineJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/jump-to-line.js", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/jump-to-line.js", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4439,7 +4372,7 @@ func bindataPublicCodemirrorAddonSearchMatchHighlighterJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/match-highlighter.js", size: 2710, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/match-highlighter.js", size: 2710, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4459,7 +4392,7 @@ func bindataPublicCodemirrorAddonSearchMatchesonscrollbarCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.css", size: 188, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.css", size: 188, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4479,7 +4412,7 @@ func bindataPublicCodemirrorAddonSearchMatchesonscrollbarJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/matchesonscrollbar.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4499,7 +4432,7 @@ func bindataPublicCodemirrorAddonSearchSearchJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/search.js", size: 5389, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/search.js", size: 5389, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4519,7 +4452,7 @@ func bindataPublicCodemirrorAddonSearchSearchcursorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/searchcursor.js", size: 5185, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/search/searchcursor.js", size: 5185, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4539,7 +4472,7 @@ func bindataPublicCodemirrorAddonSelectionActiveLineJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/active-line.js", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/active-line.js", size: 1347, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4559,7 +4492,7 @@ func bindataPublicCodemirrorAddonSelectionMarkSelectionJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/mark-selection.js", size: 1779, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/mark-selection.js", size: 1779, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4579,7 +4512,7 @@ func bindataPublicCodemirrorAddonSelectionSelectionPointerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/selection-pointer.js", size: 1915, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/selection/selection-pointer.js", size: 1915, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4599,7 +4532,7 @@ func bindataPublicCodemirrorAddonTernTernCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.css", size: 1872, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.css", size: 1872, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4619,7 +4552,7 @@ func bindataPublicCodemirrorAddonTernTernJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.js", size: 11800, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/tern.js", size: 11800, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4639,7 +4572,7 @@ func bindataPublicCodemirrorAddonTernWorkerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/worker.js", size: 760, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/tern/worker.js", size: 760, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4659,7 +4592,7 @@ func bindataPublicCodemirrorAddonWrapHardwrapJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/addon/wrap/hardwrap.js", size: 2445, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/addon/wrap/hardwrap.js", size: 2445, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4679,7 +4612,7 @@ func bindataPublicCodemirrorLibCodemirrorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/lib/codemirror.js", size: 168436, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/lib/codemirror.js", size: 168436, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4699,7 +4632,7 @@ func bindataPublicCodemirrorModeAplAplJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/apl.js", size: 2657, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/apl.js", size: 2657, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4719,7 +4652,7 @@ func bindataPublicCodemirrorModeAplIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/index.html", size: 2663, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/apl/index.html", size: 2663, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4739,7 +4672,7 @@ func bindataPublicCodemirrorModeAsciiarmorAsciiarmorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/asciiarmor.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/asciiarmor.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4759,7 +4692,7 @@ func bindataPublicCodemirrorModeAsciiarmorIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/index.html", size: 1652, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asciiarmor/index.html", size: 1652, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4779,7 +4712,7 @@ func bindataPublicCodemirrorModeAsn1Asn1Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/asn.1.js", size: 4199, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/asn.1.js", size: 4199, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4799,7 +4732,7 @@ func bindataPublicCodemirrorModeAsn1IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/index.html", size: 2748, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asn.1/index.html", size: 2748, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4819,7 +4752,7 @@ func bindataPublicCodemirrorModeAsteriskAsteriskJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/asterisk.js", size: 4330, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/asterisk.js", size: 4330, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4839,7 +4772,7 @@ func bindataPublicCodemirrorModeAsteriskIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/index.html", size: 5134, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/asterisk/index.html", size: 5134, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4859,7 +4792,7 @@ func bindataPublicCodemirrorModeBrainfuckBrainfuckJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/brainfuck.js", size: 815, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/brainfuck.js", size: 815, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4879,7 +4812,7 @@ func bindataPublicCodemirrorModeBrainfuckIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/index.html", size: 3822, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/brainfuck/index.html", size: 3822, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4899,7 +4832,7 @@ func bindataPublicCodemirrorModeClikeClikeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/clike.js", size: 20062, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/clike.js", size: 20062, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4919,7 +4852,7 @@ func bindataPublicCodemirrorModeClikeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/index.html", size: 11355, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/index.html", size: 11355, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4939,7 +4872,7 @@ func bindataPublicCodemirrorModeClikeScalaHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/scala.html", size: 29002, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/scala.html", size: 29002, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4959,7 +4892,7 @@ func bindataPublicCodemirrorModeClikeTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/test.js", size: 3565, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clike/test.js", size: 3565, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4979,7 +4912,7 @@ func bindataPublicCodemirrorModeClojureClojureJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/clojure.js", size: 11116, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/clojure.js", size: 11116, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4999,7 +4932,7 @@ func bindataPublicCodemirrorModeClojureIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/index.html", size: 3372, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/index.html", size: 3372, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5019,7 +4952,7 @@ func bindataPublicCodemirrorModeClojureTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/test.js", size: 14681, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/clojure/test.js", size: 14681, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5039,7 +4972,7 @@ func bindataPublicCodemirrorModeCmakeCmakeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/cmake.js", size: 1010, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/cmake.js", size: 1010, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5059,7 +4992,7 @@ func bindataPublicCodemirrorModeCmakeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/index.html", size: 4636, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cmake/index.html", size: 4636, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5079,7 +5012,7 @@ func bindataPublicCodemirrorModeCobolCobolJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/cobol.js", size: 6418, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/cobol.js", size: 6418, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5099,7 +5032,7 @@ func bindataPublicCodemirrorModeCobolIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/index.html", size: 9373, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cobol/index.html", size: 9373, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5119,7 +5052,7 @@ func bindataPublicCodemirrorModeCoffeescriptCoffeescriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/coffeescript.js", size: 4209, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/coffeescript.js", size: 4209, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5139,7 +5072,7 @@ func bindataPublicCodemirrorModeCoffeescriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/index.html", size: 22800, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/coffeescript/index.html", size: 22800, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5159,7 +5092,7 @@ func bindataPublicCodemirrorModeCommonlispCommonlispJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/commonlisp.js", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/commonlisp.js", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5179,7 +5112,7 @@ func bindataPublicCodemirrorModeCommonlispIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/index.html", size: 7014, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/commonlisp/index.html", size: 7014, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5199,7 +5132,7 @@ func bindataPublicCodemirrorModeCrystalCrystalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/crystal.js", size: 5301, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/crystal.js", size: 5301, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5219,7 +5152,7 @@ func bindataPublicCodemirrorModeCrystalIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/index.html", size: 3089, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/crystal/index.html", size: 3089, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5239,7 +5172,7 @@ func bindataPublicCodemirrorModeCssCssJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/css.js", size: 24817, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/css.js", size: 24817, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5259,7 +5192,7 @@ func bindataPublicCodemirrorModeCssGssHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss.html", size: 3796, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss.html", size: 3796, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5279,7 +5212,7 @@ func bindataPublicCodemirrorModeCssGss_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss_test.js", size: 256, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/gss_test.js", size: 256, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5299,7 +5232,7 @@ func bindataPublicCodemirrorModeCssIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/index.html", size: 2717, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/index.html", size: 2717, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5319,7 +5252,7 @@ func bindataPublicCodemirrorModeCssLessHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less.html", size: 4548, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less.html", size: 4548, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5339,7 +5272,7 @@ func bindataPublicCodemirrorModeCssLess_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less_test.js", size: 1473, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/less_test.js", size: 1473, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5359,7 +5292,7 @@ func bindataPublicCodemirrorModeCssScssHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss.html", size: 3284, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss.html", size: 3284, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5379,7 +5312,7 @@ func bindataPublicCodemirrorModeCssScss_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss_test.js", size: 2562, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/scss_test.js", size: 2562, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5399,7 +5332,7 @@ func bindataPublicCodemirrorModeCssTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/test.js", size: 5883, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/css/test.js", size: 5883, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5419,7 +5352,7 @@ func bindataPublicCodemirrorModeCypherCypherJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/cypher.js", size: 3462, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/cypher.js", size: 3462, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5439,7 +5372,7 @@ func bindataPublicCodemirrorModeCypherIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/index.html", size: 2449, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/index.html", size: 2449, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5459,7 +5392,7 @@ func bindataPublicCodemirrorModeCypherTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/test.js", size: 1047, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/cypher/test.js", size: 1047, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5479,7 +5412,7 @@ func bindataPublicCodemirrorModeDDJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/d.js", size: 3996, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/d.js", size: 3996, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5499,7 +5432,7 @@ func bindataPublicCodemirrorModeDIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/index.html", size: 6816, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/index.html", size: 6816, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5519,7 +5452,7 @@ func bindataPublicCodemirrorModeDTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/test.js", size: 238, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/d/test.js", size: 238, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5539,7 +5472,7 @@ func bindataPublicCodemirrorModeDartDartJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/dart.js", size: 2315, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/dart.js", size: 2315, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5559,7 +5492,7 @@ func bindataPublicCodemirrorModeDartIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/index.html", size: 2111, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dart/index.html", size: 2111, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5579,7 +5512,7 @@ func bindataPublicCodemirrorModeDiffDiffJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/diff.js", size: 558, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/diff.js", size: 558, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5599,7 +5532,7 @@ func bindataPublicCodemirrorModeDiffIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/index.html", size: 4732, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/diff/index.html", size: 4732, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5619,7 +5552,7 @@ func bindataPublicCodemirrorModeDjangoDjangoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/django.js", size: 4820, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/django.js", size: 4820, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5639,7 +5572,7 @@ func bindataPublicCodemirrorModeDjangoIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/index.html", size: 2867, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/django/index.html", size: 2867, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5659,7 +5592,7 @@ func bindataPublicCodemirrorModeDockerfileDockerfileJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/dockerfile.js", size: 2197, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/dockerfile.js", size: 2197, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5679,7 +5612,7 @@ func bindataPublicCodemirrorModeDockerfileIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/index.html", size: 2735, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/index.html", size: 2735, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5699,7 +5632,7 @@ func bindataPublicCodemirrorModeDockerfileTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/test.js", size: 4210, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dockerfile/test.js", size: 4210, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5719,7 +5652,7 @@ func bindataPublicCodemirrorModeDtdDtdJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/dtd.js", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/dtd.js", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5739,7 +5672,7 @@ func bindataPublicCodemirrorModeDtdIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/index.html", size: 3644, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dtd/index.html", size: 3644, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5759,7 +5692,7 @@ func bindataPublicCodemirrorModeDylanDylanJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/dylan.js", size: 4232, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/dylan.js", size: 4232, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5779,7 +5712,7 @@ func bindataPublicCodemirrorModeDylanIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/index.html", size: 13822, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/index.html", size: 13822, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5799,7 +5732,7 @@ func bindataPublicCodemirrorModeDylanTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/test.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/dylan/test.js", size: 2144, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5819,7 +5752,7 @@ func bindataPublicCodemirrorModeEbnfEbnfJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/ebnf.js", size: 2438, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/ebnf.js", size: 2438, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5839,7 +5772,7 @@ func bindataPublicCodemirrorModeEbnfIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/index.html", size: 2918, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ebnf/index.html", size: 2918, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5859,7 +5792,7 @@ func bindataPublicCodemirrorModeEclEclJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/ecl.js", size: 5349, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/ecl.js", size: 5349, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5879,7 +5812,7 @@ func bindataPublicCodemirrorModeEclIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/index.html", size: 1732, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ecl/index.html", size: 1732, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5899,7 +5832,7 @@ func bindataPublicCodemirrorModeEiffelEiffelJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/eiffel.js", size: 2042, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/eiffel.js", size: 2042, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5919,7 +5852,7 @@ func bindataPublicCodemirrorModeEiffelIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/index.html", size: 13521, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/eiffel/index.html", size: 13521, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5939,7 +5872,7 @@ func bindataPublicCodemirrorModeElmElmJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/elm.js", size: 2167, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/elm.js", size: 2167, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5959,7 +5892,7 @@ func bindataPublicCodemirrorModeElmIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/index.html", size: 1947, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/elm/index.html", size: 1947, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5979,7 +5912,7 @@ func bindataPublicCodemirrorModeErlangErlangJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/erlang.js", size: 8282, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/erlang.js", size: 8282, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5999,7 +5932,7 @@ func bindataPublicCodemirrorModeErlangIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/index.html", size: 2636, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/erlang/index.html", size: 2636, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6019,7 +5952,7 @@ func bindataPublicCodemirrorModeFactorFactorJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/factor.js", size: 1913, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/factor.js", size: 1913, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6039,7 +5972,7 @@ func bindataPublicCodemirrorModeFactorIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/index.html", size: 2508, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/factor/index.html", size: 2508, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6059,7 +5992,7 @@ func bindataPublicCodemirrorModeFclFclJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/fcl.js", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/fcl.js", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6079,7 +6012,7 @@ func bindataPublicCodemirrorModeFclIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/index.html", size: 3575, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fcl/index.html", size: 3575, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6099,7 +6032,7 @@ func bindataPublicCodemirrorModeForthForthJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/forth.js", size: 2920, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/forth.js", size: 2920, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6119,7 +6052,7 @@ func bindataPublicCodemirrorModeForthIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/index.html", size: 2106, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/forth/index.html", size: 2106, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6139,7 +6072,7 @@ func bindataPublicCodemirrorModeFortranFortranJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/fortran.js", size: 4889, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/fortran.js", size: 4889, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6159,7 +6092,7 @@ func bindataPublicCodemirrorModeFortranIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/index.html", size: 2799, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/fortran/index.html", size: 2799, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6179,7 +6112,7 @@ func bindataPublicCodemirrorModeGasGasJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/gas.js", size: 4413, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/gas.js", size: 4413, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6199,7 +6132,7 @@ func bindataPublicCodemirrorModeGasIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/index.html", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gas/index.html", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6219,7 +6152,7 @@ func bindataPublicCodemirrorModeGfmGfmJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/gfm.js", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/gfm.js", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6239,7 +6172,7 @@ func bindataPublicCodemirrorModeGfmIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/index.html", size: 5255, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/index.html", size: 5255, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6259,7 +6192,7 @@ func bindataPublicCodemirrorModeGfmTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gfm/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6279,7 +6212,7 @@ func bindataPublicCodemirrorModeGherkinGherkinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/gherkin.js", size: 10411, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/gherkin.js", size: 10411, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6299,7 +6232,7 @@ func bindataPublicCodemirrorModeGherkinIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/index.html", size: 1889, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/gherkin/index.html", size: 1889, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6319,7 +6252,7 @@ func bindataPublicCodemirrorModeGoGoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/go.js", size: 3042, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/go.js", size: 3042, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6339,7 +6272,7 @@ func bindataPublicCodemirrorModeGoIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/go/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6359,7 +6292,7 @@ func bindataPublicCodemirrorModeGroovyGroovyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/groovy.js", size: 4077, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/groovy.js", size: 4077, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6379,7 +6312,7 @@ func bindataPublicCodemirrorModeGroovyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/index.html", size: 2661, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/groovy/index.html", size: 2661, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6399,7 +6332,7 @@ func bindataPublicCodemirrorModeHamlHamlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/haml.js", size: 2263, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/haml.js", size: 2263, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6419,7 +6352,7 @@ func bindataPublicCodemirrorModeHamlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/index.html", size: 3038, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/index.html", size: 3038, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6439,7 +6372,7 @@ func bindataPublicCodemirrorModeHamlTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/test.js", size: 2285, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haml/test.js", size: 2285, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6459,7 +6392,7 @@ func bindataPublicCodemirrorModeHandlebarsHandlebarsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/handlebars.js", size: 1350, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/handlebars.js", size: 1350, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6479,7 +6412,7 @@ func bindataPublicCodemirrorModeHandlebarsIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/index.html", size: 3221, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/handlebars/index.html", size: 3221, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6499,7 +6432,7 @@ func bindataPublicCodemirrorModeHaskellHaskellJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/haskell.js", size: 4562, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/haskell.js", size: 4562, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6519,7 +6452,7 @@ func bindataPublicCodemirrorModeHaskellIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/index.html", size: 2662, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell/index.html", size: 2662, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6539,7 +6472,7 @@ func bindataPublicCodemirrorModeHaskellLiterateHaskellLiterateJs() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/haskell-literate.js", size: 692, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/haskell-literate.js", size: 692, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6559,7 +6492,7 @@ func bindataPublicCodemirrorModeHaskellLiterateIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/index.html", size: 9865, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haskell-literate/index.html", size: 9865, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6579,7 +6512,7 @@ func bindataPublicCodemirrorModeHaxeHaxeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/haxe.js", size: 8113, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/haxe.js", size: 8113, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6599,7 +6532,7 @@ func bindataPublicCodemirrorModeHaxeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/index.html", size: 2884, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/haxe/index.html", size: 2884, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6619,7 +6552,7 @@ func bindataPublicCodemirrorModeHtmlembeddedHtmlembeddedJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/htmlembedded.js", size: 1068, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/htmlembedded.js", size: 1068, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6639,7 +6572,7 @@ func bindataPublicCodemirrorModeHtmlembeddedIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/index.html", size: 3198, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlembedded/index.html", size: 3198, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6659,7 +6592,7 @@ func bindataPublicCodemirrorModeHtmlmixedHtmlmixedJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/htmlmixed.js", size: 2888, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/htmlmixed.js", size: 2888, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6679,7 +6612,7 @@ func bindataPublicCodemirrorModeHtmlmixedIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/index.html", size: 4547, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/htmlmixed/index.html", size: 4547, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6699,7 +6632,7 @@ func bindataPublicCodemirrorModeHttpHttpJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/http.js", size: 1253, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/http.js", size: 1253, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6719,7 +6652,7 @@ func bindataPublicCodemirrorModeHttpIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/index.html", size: 1700, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/http/index.html", size: 1700, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6739,7 +6672,7 @@ func bindataPublicCodemirrorModeIdlIdlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/idl.js", size: 11960, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/idl.js", size: 11960, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6759,7 +6692,7 @@ func bindataPublicCodemirrorModeIdlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/index.html", size: 2159, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/idl/index.html", size: 2159, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6779,7 +6712,7 @@ func bindataPublicCodemirrorModeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/index.html", size: 8295, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/index.html", size: 8295, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6799,7 +6732,7 @@ func bindataPublicCodemirrorModeJadeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/index.html", size: 3437, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/index.html", size: 3437, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6819,7 +6752,7 @@ func bindataPublicCodemirrorModeJadeJadeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/jade.js", size: 7952, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jade/jade.js", size: 7952, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6839,7 +6772,7 @@ func bindataPublicCodemirrorModeJavascriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/index.html", size: 4983, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/index.html", size: 4983, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6859,7 +6792,7 @@ func bindataPublicCodemirrorModeJavascriptJavascriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/javascript.js", size: 16157, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/javascript.js", size: 16157, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6879,7 +6812,7 @@ func bindataPublicCodemirrorModeJavascriptJsonLdHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/json-ld.html", size: 2940, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/json-ld.html", size: 2940, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6899,7 +6832,7 @@ func bindataPublicCodemirrorModeJavascriptTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/test.js", size: 16698, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/test.js", size: 16698, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6919,7 +6852,7 @@ func bindataPublicCodemirrorModeJavascriptTypescriptHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/typescript.html", size: 2083, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/javascript/typescript.html", size: 2083, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6939,7 +6872,7 @@ func bindataPublicCodemirrorModeJinja2IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/index.html", size: 2062, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/index.html", size: 2062, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6959,7 +6892,7 @@ func bindataPublicCodemirrorModeJinja2Jinja2Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/jinja2.js", size: 2135, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jinja2/jinja2.js", size: 2135, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6979,7 +6912,7 @@ func bindataPublicCodemirrorModeJsxIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/index.html", size: 3039, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/index.html", size: 3039, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6999,7 +6932,7 @@ func bindataPublicCodemirrorModeJsxJsxJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/jsx.js", size: 2344, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/jsx.js", size: 2344, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7019,7 +6952,7 @@ func bindataPublicCodemirrorModeJsxTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/test.js", size: 3577, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/jsx/test.js", size: 3577, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7039,7 +6972,7 @@ func bindataPublicCodemirrorModeJuliaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/index.html", size: 2901, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/index.html", size: 2901, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7059,7 +6992,7 @@ func bindataPublicCodemirrorModeJuliaJuliaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/julia.js", size: 6138, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/julia/julia.js", size: 6138, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7079,7 +7012,7 @@ func bindataPublicCodemirrorModeLivescriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/index.html", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/index.html", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7099,7 +7032,7 @@ func bindataPublicCodemirrorModeLivescriptLivescriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/livescript.js", size: 4418, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/livescript/livescript.js", size: 4418, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7119,7 +7052,7 @@ func bindataPublicCodemirrorModeLuaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/index.html", size: 2558, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/index.html", size: 2558, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7139,7 +7072,7 @@ func bindataPublicCodemirrorModeLuaLuaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/lua.js", size: 3597, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/lua/lua.js", size: 3597, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7159,7 +7092,7 @@ func bindataPublicCodemirrorModeMarkdownIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/index.html", size: 13112, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/index.html", size: 13112, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7179,7 +7112,7 @@ func bindataPublicCodemirrorModeMarkdownMarkdownJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/markdown.js", size: 14821, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/markdown.js", size: 14821, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7199,7 +7132,7 @@ func bindataPublicCodemirrorModeMarkdownTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/test.js", size: 25879, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/markdown/test.js", size: 25879, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7219,7 +7152,7 @@ func bindataPublicCodemirrorModeMathematicaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/index.html", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/index.html", size: 2255, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7239,7 +7172,7 @@ func bindataPublicCodemirrorModeMathematicaMathematicaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/mathematica.js", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mathematica/mathematica.js", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7259,7 +7192,7 @@ func bindataPublicCodemirrorModeMboxIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/index.html", size: 1616, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/index.html", size: 1616, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7279,7 +7212,7 @@ func bindataPublicCodemirrorModeMboxMboxJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/mbox.js", size: 1666, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mbox/mbox.js", size: 1666, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7299,7 +7232,7 @@ func bindataPublicCodemirrorModeMetaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/meta.js", size: 12533, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/meta.js", size: 12533, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7319,7 +7252,7 @@ func bindataPublicCodemirrorModeMircIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/index.html", size: 6340, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/index.html", size: 6340, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7339,7 +7272,7 @@ func bindataPublicCodemirrorModeMircMircJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/mirc.js", size: 6166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mirc/mirc.js", size: 6166, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7359,7 +7292,7 @@ func bindataPublicCodemirrorModeMllikeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/index.html", size: 4669, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/index.html", size: 4669, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7379,7 +7312,7 @@ func bindataPublicCodemirrorModeMllikeMllikeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/mllike.js", size: 5087, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mllike/mllike.js", size: 5087, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7399,7 +7332,7 @@ func bindataPublicCodemirrorModeModelicaIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/index.html", size: 2813, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/index.html", size: 2813, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7419,7 +7352,7 @@ func bindataPublicCodemirrorModeModelicaModelicaJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/modelica.js", size: 3299, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/modelica/modelica.js", size: 3299, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7439,7 +7372,7 @@ func bindataPublicCodemirrorModeMscgenIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/index.html", size: 4633, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/index.html", size: 4633, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7459,7 +7392,7 @@ func bindataPublicCodemirrorModeMscgenMscgenJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen.js", size: 3917, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen.js", size: 3917, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7479,7 +7412,7 @@ func bindataPublicCodemirrorModeMscgenMscgen_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen_test.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/mscgen_test.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7499,7 +7432,7 @@ func bindataPublicCodemirrorModeMscgenMsgenny_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/msgenny_test.js", size: 2800, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/msgenny_test.js", size: 2800, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7519,7 +7452,7 @@ func bindataPublicCodemirrorModeMscgenXu_testJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/xu_test.js", size: 3662, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mscgen/xu_test.js", size: 3662, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7539,7 +7472,7 @@ func bindataPublicCodemirrorModeMumpsIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/index.html", size: 2915, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/index.html", size: 2915, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7559,7 +7492,7 @@ func bindataPublicCodemirrorModeMumpsMumpsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/mumps.js", size: 2283, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/mumps/mumps.js", size: 2283, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7579,7 +7512,7 @@ func bindataPublicCodemirrorModeNginxIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/index.html", size: 5566, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/index.html", size: 5566, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7599,7 +7532,7 @@ func bindataPublicCodemirrorModeNginxNginxJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/nginx.js", size: 7526, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nginx/nginx.js", size: 7526, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7619,7 +7552,7 @@ func bindataPublicCodemirrorModeNsisIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/index.html", size: 2087, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/index.html", size: 2087, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7639,7 +7572,7 @@ func bindataPublicCodemirrorModeNsisNsisJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/nsis.js", size: 6805, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/nsis/nsis.js", size: 6805, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7659,7 +7592,7 @@ func bindataPublicCodemirrorModeNtriplesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/index.html", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/index.html", size: 2754, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7679,7 +7612,7 @@ func bindataPublicCodemirrorModeNtriplesNtriplesJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/ntriples.js", size: 2467, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ntriples/ntriples.js", size: 2467, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7699,7 +7632,7 @@ func bindataPublicCodemirrorModeOctaveIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/index.html", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/index.html", size: 2331, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7719,7 +7652,7 @@ func bindataPublicCodemirrorModeOctaveOctaveJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/octave.js", size: 2566, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/octave/octave.js", size: 2566, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7739,7 +7672,7 @@ func bindataPublicCodemirrorModeOzIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/index.html", size: 1827, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/index.html", size: 1827, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7759,7 +7692,7 @@ func bindataPublicCodemirrorModeOzOzJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/oz.js", size: 3119, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/oz/oz.js", size: 3119, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7779,7 +7712,7 @@ func bindataPublicCodemirrorModePascalIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/index.html", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/index.html", size: 1747, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7799,7 +7732,7 @@ func bindataPublicCodemirrorModePascalPascalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/pascal.js", size: 2299, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pascal/pascal.js", size: 2299, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7819,7 +7752,7 @@ func bindataPublicCodemirrorModePegjsIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/index.html", size: 2358, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/index.html", size: 2358, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7839,7 +7772,7 @@ func bindataPublicCodemirrorModePegjsPegjsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/pegjs.js", size: 1644, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pegjs/pegjs.js", size: 1644, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7859,7 +7792,7 @@ func bindataPublicCodemirrorModePerlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/index.html", size: 1849, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/index.html", size: 1849, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7879,7 +7812,7 @@ func bindataPublicCodemirrorModePerlPerlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/perl.js", size: 9822, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/perl/perl.js", size: 9822, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7899,7 +7832,7 @@ func bindataPublicCodemirrorModePhpIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/index.html", size: 3273, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/index.html", size: 3273, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7919,7 +7852,7 @@ func bindataPublicCodemirrorModePhpPhpJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/php.js", size: 13919, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/php.js", size: 13919, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7939,7 +7872,7 @@ func bindataPublicCodemirrorModePhpTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/test.js", size: 5327, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/php/test.js", size: 5327, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7959,7 +7892,7 @@ func bindataPublicCodemirrorModePigIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/index.html", size: 1798, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/index.html", size: 1798, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7979,7 +7912,7 @@ func bindataPublicCodemirrorModePigPigJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/pig.js", size: 2869, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pig/pig.js", size: 2869, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7999,7 +7932,7 @@ func bindataPublicCodemirrorModePowershellIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/index.html", size: 7918, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/index.html", size: 7918, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8019,7 +7952,7 @@ func bindataPublicCodemirrorModePowershellPowershellJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/powershell.js", size: 8043, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/powershell.js", size: 8043, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8039,7 +7972,7 @@ func bindataPublicCodemirrorModePowershellTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/test.js", size: 2393, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/powershell/test.js", size: 2393, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8059,7 +7992,7 @@ func bindataPublicCodemirrorModePropertiesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/index.html", size: 1878, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/index.html", size: 1878, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8079,7 +8012,7 @@ func bindataPublicCodemirrorModePropertiesPropertiesJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/properties.js", size: 960, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/properties/properties.js", size: 960, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8099,7 +8032,7 @@ func bindataPublicCodemirrorModeProtobufIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/index.html", size: 2949, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/index.html", size: 2949, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8119,7 +8052,7 @@ func bindataPublicCodemirrorModeProtobufProtobufJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/protobuf.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/protobuf/protobuf.js", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8139,7 +8072,7 @@ func bindataPublicCodemirrorModePugIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/index.html", size: 3440, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/index.html", size: 3440, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8159,7 +8092,7 @@ func bindataPublicCodemirrorModePugPugJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/pug.js", size: 8020, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/pug/pug.js", size: 8020, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8179,7 +8112,7 @@ func bindataPublicCodemirrorModePuppetIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/index.html", size: 3744, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/index.html", size: 3744, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8199,7 +8132,7 @@ func bindataPublicCodemirrorModePuppetPuppetJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/puppet.js", size: 2768, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/puppet/puppet.js", size: 2768, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8219,7 +8152,7 @@ func bindataPublicCodemirrorModePythonIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/index.html", size: 6744, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/index.html", size: 6744, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8239,7 +8172,7 @@ func bindataPublicCodemirrorModePythonPythonJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/python.js", size: 6413, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/python.js", size: 6413, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8259,7 +8192,7 @@ func bindataPublicCodemirrorModePythonTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/test.js", size: 1442, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/python/test.js", size: 1442, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8279,7 +8212,7 @@ func bindataPublicCodemirrorModeQIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/index.html", size: 9429, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/index.html", size: 9429, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8299,7 +8232,7 @@ func bindataPublicCodemirrorModeQQJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/q.js", size: 4223, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/q/q.js", size: 4223, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8319,7 +8252,7 @@ func bindataPublicCodemirrorModeRIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/index.html", size: 2841, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/index.html", size: 2841, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8339,7 +8272,7 @@ func bindataPublicCodemirrorModeRRJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/r.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/r/r.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8359,7 +8292,7 @@ func bindataPublicCodemirrorModeRpmChangesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/changes/index.html", size: 2326, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/changes/index.html", size: 2326, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8379,7 +8312,7 @@ func bindataPublicCodemirrorModeRpmIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/index.html", size: 4930, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/index.html", size: 4930, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8399,7 +8332,7 @@ func bindataPublicCodemirrorModeRpmRpmJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/rpm.js", size: 1964, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rpm/rpm.js", size: 1964, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8419,7 +8352,7 @@ func bindataPublicCodemirrorModeRstIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/index.html", size: 18237, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/index.html", size: 18237, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8439,7 +8372,7 @@ func bindataPublicCodemirrorModeRstRstJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/rst.js", size: 6620, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rst/rst.js", size: 6620, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8459,7 +8392,7 @@ func bindataPublicCodemirrorModeRubyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/index.html", size: 6233, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/index.html", size: 6233, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8479,7 +8412,7 @@ func bindataPublicCodemirrorModeRubyRubyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/ruby.js", size: 5280, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/ruby.js", size: 5280, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8499,7 +8432,7 @@ func bindataPublicCodemirrorModeRubyTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/test.js", size: 480, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ruby/test.js", size: 480, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8519,7 +8452,7 @@ func bindataPublicCodemirrorModeRustIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/index.html", size: 2000, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/index.html", size: 2000, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8539,7 +8472,7 @@ func bindataPublicCodemirrorModeRustRustJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/rust.js", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/rust.js", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8559,7 +8492,7 @@ func bindataPublicCodemirrorModeRustTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/test.js", size: 676, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/rust/test.js", size: 676, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8579,7 +8512,7 @@ func bindataPublicCodemirrorModeSasIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/index.html", size: 2322, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/index.html", size: 2322, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8599,7 +8532,7 @@ func bindataPublicCodemirrorModeSasSasJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/sas.js", size: 9537, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sas/sas.js", size: 9537, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8619,7 +8552,7 @@ func bindataPublicCodemirrorModeSassIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/index.html", size: 2276, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/index.html", size: 2276, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8639,7 +8572,7 @@ func bindataPublicCodemirrorModeSassSassJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/sass.js", size: 4624, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/sass.js", size: 4624, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8659,7 +8592,7 @@ func bindataPublicCodemirrorModeSassTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/test.js", size: 3627, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sass/test.js", size: 3627, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8679,7 +8612,7 @@ func bindataPublicCodemirrorModeSchemeIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/index.html", size: 2877, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/index.html", size: 2877, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8699,7 +8632,7 @@ func bindataPublicCodemirrorModeSchemeSchemeJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/scheme.js", size: 6312, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/scheme/scheme.js", size: 6312, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8719,7 +8652,7 @@ func bindataPublicCodemirrorModeShellIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/index.html", size: 1938, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/index.html", size: 1938, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8739,7 +8672,7 @@ func bindataPublicCodemirrorModeShellShellJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/shell.js", size: 2563, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/shell.js", size: 2563, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8759,7 +8692,7 @@ func bindataPublicCodemirrorModeShellTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/test.js", size: 1763, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/shell/test.js", size: 1763, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8779,7 +8712,7 @@ func bindataPublicCodemirrorModeSieveIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/index.html", size: 2658, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8799,7 +8732,7 @@ func bindataPublicCodemirrorModeSieveSieveJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/sieve.js", size: 1868, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sieve/sieve.js", size: 1868, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8819,7 +8752,7 @@ func bindataPublicCodemirrorModeSlimIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/index.html", size: 4370, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/index.html", size: 4370, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8839,7 +8772,7 @@ func bindataPublicCodemirrorModeSlimSlimJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/slim.js", size: 7489, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/slim.js", size: 7489, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8859,7 +8792,7 @@ func bindataPublicCodemirrorModeSlimTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/test.js", size: 2451, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/slim/test.js", size: 2451, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8879,7 +8812,7 @@ func bindataPublicCodemirrorModeSmalltalkIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/index.html", size: 2388, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/index.html", size: 2388, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8899,7 +8832,7 @@ func bindataPublicCodemirrorModeSmalltalkSmalltalkJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/smalltalk.js", size: 2216, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smalltalk/smalltalk.js", size: 2216, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8919,7 +8852,7 @@ func bindataPublicCodemirrorModeSmartyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/index.html", size: 4441, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/index.html", size: 4441, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8939,7 +8872,7 @@ func bindataPublicCodemirrorModeSmartySmartyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/smarty.js", size: 2971, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/smarty/smarty.js", size: 2971, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8959,7 +8892,7 @@ func bindataPublicCodemirrorModeSolrIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/index.html", size: 1672, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/index.html", size: 1672, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8979,7 +8912,7 @@ func bindataPublicCodemirrorModeSolrSolrJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/solr.js", size: 1139, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/solr/solr.js", size: 1139, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8999,7 +8932,7 @@ func bindataPublicCodemirrorModeSoyIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/index.html", size: 3051, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/index.html", size: 3051, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9019,7 +8952,7 @@ func bindataPublicCodemirrorModeSoySoyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/soy.js", size: 6452, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/soy.js", size: 6452, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9039,7 +8972,7 @@ func bindataPublicCodemirrorModeSoyTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/soy/test.js", size: 5271, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9059,7 +8992,7 @@ func bindataPublicCodemirrorModeSparqlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/index.html", size: 2257, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/index.html", size: 2257, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9079,7 +9012,7 @@ func bindataPublicCodemirrorModeSparqlSparqlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/sparql.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sparql/sparql.js", size: 3308, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9099,7 +9032,7 @@ func bindataPublicCodemirrorModeSpreadsheetIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/index.html", size: 1860, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/index.html", size: 1860, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9119,7 +9052,7 @@ func bindataPublicCodemirrorModeSpreadsheetSpreadsheetJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/spreadsheet.js", size: 1390, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/spreadsheet/spreadsheet.js", size: 1390, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9139,7 +9072,7 @@ func bindataPublicCodemirrorModeSqlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/index.html", size: 4134, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/index.html", size: 4134, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9159,7 +9092,7 @@ func bindataPublicCodemirrorModeSqlSqlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/sql.js", size: 36628, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/sql/sql.js", size: 36628, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9179,7 +9112,7 @@ func bindataPublicCodemirrorModeStexIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/index.html", size: 4650, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/index.html", size: 4650, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9199,7 +9132,7 @@ func bindataPublicCodemirrorModeStexStexJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/stex.js", size: 3277, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/stex.js", size: 3277, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9219,7 +9152,7 @@ func bindataPublicCodemirrorModeStexTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/test.js", size: 3070, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stex/test.js", size: 3070, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9239,7 +9172,7 @@ func bindataPublicCodemirrorModeStylusIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/index.html", size: 3278, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/index.html", size: 3278, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9259,7 +9192,7 @@ func bindataPublicCodemirrorModeStylusStylusJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/stylus.js", size: 26222, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/stylus/stylus.js", size: 26222, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9279,7 +9212,7 @@ func bindataPublicCodemirrorModeSwiftIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/index.html", size: 2797, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/index.html", size: 2797, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9299,7 +9232,7 @@ func bindataPublicCodemirrorModeSwiftSwiftJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/swift.js", size: 4150, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/swift.js", size: 4150, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9319,7 +9252,7 @@ func bindataPublicCodemirrorModeSwiftTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/test.js", size: 7835, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/swift/test.js", size: 7835, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9339,7 +9272,7 @@ func bindataPublicCodemirrorModeTclIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/index.html", size: 6781, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/index.html", size: 6781, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9359,7 +9292,7 @@ func bindataPublicCodemirrorModeTclTclJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/tcl.js", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tcl/tcl.js", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9379,7 +9312,7 @@ func bindataPublicCodemirrorModeTextileIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/index.html", size: 4670, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/index.html", size: 4670, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9399,7 +9332,7 @@ func bindataPublicCodemirrorModeTextileTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/test.js", size: 7129, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/test.js", size: 7129, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9419,7 +9352,7 @@ func bindataPublicCodemirrorModeTextileTextileJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/textile.js", size: 7062, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/textile/textile.js", size: 7062, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9439,7 +9372,7 @@ func bindataPublicCodemirrorModeTiddlywikiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/index.html", size: 5208, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/index.html", size: 5208, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9459,7 +9392,7 @@ func bindataPublicCodemirrorModeTiddlywikiTiddlywikiCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.css", size: 220, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.css", size: 220, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9479,7 +9412,7 @@ func bindataPublicCodemirrorModeTiddlywikiTiddlywikiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.js", size: 3071, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiddlywiki/tiddlywiki.js", size: 3071, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9499,7 +9432,7 @@ func bindataPublicCodemirrorModeTikiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/index.html", size: 2190, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/index.html", size: 2190, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9519,7 +9452,7 @@ func bindataPublicCodemirrorModeTikiTikiCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.css", size: 439, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.css", size: 439, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9539,7 +9472,7 @@ func bindataPublicCodemirrorModeTikiTikiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.js", size: 3523, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tiki/tiki.js", size: 3523, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9559,7 +9492,7 @@ func bindataPublicCodemirrorModeTomlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/index.html", size: 2147, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/index.html", size: 2147, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9579,7 +9512,7 @@ func bindataPublicCodemirrorModeTomlTomlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/toml.js", size: 1246, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/toml/toml.js", size: 1246, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9599,7 +9532,7 @@ func bindataPublicCodemirrorModeTornadoIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/index.html", size: 2593, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/index.html", size: 2593, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9619,7 +9552,7 @@ func bindataPublicCodemirrorModeTornadoTornadoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/tornado.js", size: 1421, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/tornado/tornado.js", size: 1421, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9639,7 +9572,7 @@ func bindataPublicCodemirrorModeTroffIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/index.html", size: 4627, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/index.html", size: 4627, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9659,7 +9592,7 @@ func bindataPublicCodemirrorModeTroffTroffJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/troff.js", size: 1292, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/troff/troff.js", size: 1292, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9679,7 +9612,7 @@ func bindataPublicCodemirrorModeTtcnIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/index.html", size: 4016, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/index.html", size: 4016, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9699,7 +9632,7 @@ func bindataPublicCodemirrorModeTtcnTtcnJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/ttcn.js", size: 5449, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn/ttcn.js", size: 5449, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9719,7 +9652,7 @@ func bindataPublicCodemirrorModeTtcnCfgIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/index.html", size: 4131, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/index.html", size: 4131, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9739,7 +9672,7 @@ func bindataPublicCodemirrorModeTtcnCfgTtcnCfgJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/ttcn-cfg.js", size: 4407, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/ttcn-cfg/ttcn-cfg.js", size: 4407, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9759,7 +9692,7 @@ func bindataPublicCodemirrorModeTurtleIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/index.html", size: 2012, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/index.html", size: 2012, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9779,7 +9712,7 @@ func bindataPublicCodemirrorModeTurtleTurtleJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/turtle.js", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/turtle/turtle.js", size: 2163, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9799,7 +9732,7 @@ func bindataPublicCodemirrorModeTwigIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/index.html", size: 1677, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/index.html", size: 1677, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9819,7 +9752,7 @@ func bindataPublicCodemirrorModeTwigTwigJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/twig.js", size: 2203, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/twig/twig.js", size: 2203, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9839,7 +9772,7 @@ func bindataPublicCodemirrorModeVbIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/index.html", size: 1945, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/index.html", size: 1945, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9859,7 +9792,7 @@ func bindataPublicCodemirrorModeVbVbJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/vb.js", size: 3179, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vb/vb.js", size: 3179, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9879,7 +9812,7 @@ func bindataPublicCodemirrorModeVbscriptIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/index.html", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/index.html", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9899,7 +9832,7 @@ func bindataPublicCodemirrorModeVbscriptVbscriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/vbscript.js", size: 6062, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vbscript/vbscript.js", size: 6062, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9919,7 +9852,7 @@ func bindataPublicCodemirrorModeVelocityIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/index.html", size: 3623, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/index.html", size: 3623, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9939,7 +9872,7 @@ func bindataPublicCodemirrorModeVelocityVelocityJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/velocity.js", size: 2908, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/velocity/velocity.js", size: 2908, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9959,7 +9892,7 @@ func bindataPublicCodemirrorModeVerilogIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/index.html", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/index.html", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9979,7 +9912,7 @@ func bindataPublicCodemirrorModeVerilogTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/test.js", size: 5150, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/test.js", size: 5150, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9999,7 +9932,7 @@ func bindataPublicCodemirrorModeVerilogVerilogJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/verilog.js", size: 8980, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/verilog/verilog.js", size: 8980, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10019,7 +9952,7 @@ func bindataPublicCodemirrorModeVhdlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/index.html", size: 2954, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/index.html", size: 2954, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10039,7 +9972,7 @@ func bindataPublicCodemirrorModeVhdlVhdlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/vhdl.js", size: 3561, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vhdl/vhdl.js", size: 3561, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10059,7 +9992,7 @@ func bindataPublicCodemirrorModeVueIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/index.html", size: 4158, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/index.html", size: 4158, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10079,7 +10012,7 @@ func bindataPublicCodemirrorModeVueVueJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/vue.js", size: 1898, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/vue/vue.js", size: 1898, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10099,7 +10032,7 @@ func bindataPublicCodemirrorModeWebidlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/index.html", size: 2639, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/index.html", size: 2639, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10119,7 +10052,7 @@ func bindataPublicCodemirrorModeWebidlWebidlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/webidl.js", size: 2777, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/webidl/webidl.js", size: 2777, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10139,7 +10072,7 @@ func bindataPublicCodemirrorModeXmlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/index.html", size: 2478, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/index.html", size: 2478, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10159,7 +10092,7 @@ func bindataPublicCodemirrorModeXmlTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/test.js", size: 1370, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/test.js", size: 1370, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10179,7 +10112,7 @@ func bindataPublicCodemirrorModeXmlXmlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/xml.js", size: 5776, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xml/xml.js", size: 5776, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10199,7 +10132,7 @@ func bindataPublicCodemirrorModeXqueryIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/index.html", size: 9135, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/index.html", size: 9135, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10219,7 +10152,7 @@ func bindataPublicCodemirrorModeXqueryTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/test.js", size: 4416, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/test.js", size: 4416, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10239,7 +10172,7 @@ func bindataPublicCodemirrorModeXqueryXqueryJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/xquery.js", size: 6883, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/xquery/xquery.js", size: 6883, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10259,7 +10192,7 @@ func bindataPublicCodemirrorModeYacasIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/index.html", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/index.html", size: 2177, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10279,7 +10212,7 @@ func bindataPublicCodemirrorModeYacasYacasJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/yacas.js", size: 2374, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yacas/yacas.js", size: 2374, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10299,7 +10232,7 @@ func bindataPublicCodemirrorModeYamlIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/index.html", size: 2421, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/index.html", size: 2421, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10319,7 +10252,7 @@ func bindataPublicCodemirrorModeYamlYamlJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/yaml.js", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml/yaml.js", size: 1824, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10339,7 +10272,7 @@ func bindataPublicCodemirrorModeYamlFrontmatterIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/index.html", size: 4039, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/index.html", size: 4039, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10359,7 +10292,7 @@ func bindataPublicCodemirrorModeYamlFrontmatterYamlFrontmatterJs() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js", size: 957, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js", size: 957, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10379,7 +10312,7 @@ func bindataPublicCodemirrorModeZ80IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/index.html", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/index.html", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10399,7 +10332,7 @@ func bindataPublicCodemirrorModeZ80Z80Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/z80.js", size: 1987, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/codemirror/mode/z80/z80.js", size: 1987, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10419,7 +10352,7 @@ func bindataPublicFaviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/favicon.ico", size: 4414, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10439,27 +10372,7 @@ func bindataPublicManifestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicPdfjsDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x99\x4f\x6c\x14\x55\x1c\xc7\x7f\xdf\x6d\x0b\x33\xc3\x9f\xbe\x22\xb4\xc3\x52\x71\xb5\x56\x4a\x29\xd0\x85\xc2\x02\x02\x6e\xff\xf1\x47\x44\xd0\x2d\xb4\xfc\x91\x65\x66\xe7\x49\x5f\x9c\x9d\x29\x3b\xb3\xbb\xb4\xb5\xa4\x46\x8f\x04\xa3\xf8\x27\x6a\x4c\x0c\xf1\x64\xf1\x62\x82\x07\xf5\xa8\x01\xa3\x17\x23\x89\xe8\xc1\x0b\x51\x0f\x5e\xb8\x7a\x30\x9a\xd9\x79\x0b\x6d\x05\x8d\x07\x83\x81\xf9\x24\x9b\xef\xbc\xf7\x7b\x6f\x66\x7e\x33\xdf\x79\x2f\xef\x2d\x11\xa1\xa7\x68\x25\x89\x74\x22\x52\x28\x54\x36\x8f\x6e\x89\x22\x7f\x7f\x21\x26\xb5\x2e\x38\x1f\x11\x23\xb2\x2c\x2f\x67\x9b\xae\x6b\xdf\xfa\x4c\x11\x11\x11\x11\x11\x11\x11\x77\x1c\x84\xa2\xdc\x66\xde\x8f\x88\x88\xb8\x87\x09\xc6\x87\x84\xd4\xb4\xd4\xc9\x50\x21\xe3\x31\xa9\xb5\xd3\xfa\x30\xa9\x09\xa9\x69\xa9\x93\xa1\x42\xb6\x8b\x49\xad\x95\xaa\x48\x65\x52\x13\x52\xd3\x52\x27\x43\x95\x83\x16\xe4\xe2\x03\xf2\xca\x90\x2b\x14\x30\xa9\x09\xa9\xe9\xff\xe6\xd9\x44\x44\xdc\x0d\xd4\x55\x7e\x26\x15\x49\x90\x3d\x73\xfd\x5e\x43\x65\xe2\x64\x9a\x65\x6f\xc4\xb4\x5d\x93\x88\xbe\x34\x47\x6c\xe1\xf9\x9d\x9d\xdf\x21\x56\x53\x5b\x37\x67\xae\x12\xb0\x40\x79\x26\x33\xec\x96\x33\xbe\xe1\x17\xbd\x1e\xa3\x70\x24\x28\xed\x37\xfc\x61\x53\x1e\x0f\xb8\xae\x7d\xe3\xd8\x30\x0f\x0a\x5e\xce\xb2\xc5\xbd\xae\xe3\x1b\xc2\xe1\x85\x4a\x67\x61\x71\xd3\x28\x1c\x1d\x14\x8e\xe5\x96\x7b\xdc\xa2\x63\x79\x47\xa6\x05\xd4\x80\x2c\xd3\xc7\xc7\x93\xa9\x8e\x44\xb2\x6b\xe3\x44\x47\x62\x3c\x99\xec\xda\xd0\x91\x48\x6d\xda\x30\x31\xa1\x2a\x4d\xad\xc9\x6d\xbb\x8f\xe7\x47\xc7\xc6\x9f\x9f\x38\xfd\x56\x98\x5c\x75\xb0\xa0\xfa\x59\x59\xbf\x7d\x33\x3d\xdb\x2b\xf5\x86\xe9\xc5\x46\xab\xe9\x5d\xad\xa6\xa7\x6a\xf3\xf4\x1d\x3b\x77\x69\x59\xb6\xa8\x24\x78\x79\xdf\x88\x2f\x5c\xc7\x3b\xc8\x0b\x9e\x70\x9d\x2c\xab\xf7\x86\xdd\xf2\xee\x9c\xeb\xec\x2f\xf0\x20\x3e\x98\x73\xed\x62\xde\xf1\xb2\xac\x21\x67\xd8\xb9\xa2\x6d\xf8\xbc\xdb\xb6\x33\x62\x8c\x7b\x43\x3e\x3f\xe5\x07\x47\x87\x3d\xb7\xe0\xf7\x56\x1a\x0e\x89\x9c\xeb\x04\x75\x59\xc6\x8a\x1e\x7f\x9a\xdb\x86\x2f\x4a\xbc\xcf\xf0\xb9\xc7\xa0\x4e\xcd\x5f\x12\x7f\xa0\xa5\x6d\xf5\xba\xd4\xd6\xee\x2b\x0b\x16\xd6\x33\x6d\x91\xb6\x78\xb0\x24\x3c\x61\xda\xfc\x40\x59\x58\xfe\xf0\x21\xc3\xcb\x71\xc7\x12\xce\x89\xc3\xc2\xe2\x8e\x2f\x9e\x15\xbc\xa0\x36\xc4\x52\xea\x80\x63\xe4\xf9\x15\xb6\xb0\x7e\x41\x63\x93\xae\x0f\x15\x4d\x71\xb2\x28\xfc\x51\xd6\xa2\x28\x95\xda\x65\xcd\xba\x76\xd4\x32\x7c\xbe\xd7\xb5\x82\x5e\x16\xbb\xa8\xa8\x95\x48\xa2\x59\xd7\x8f\x04\x91\xde\x02\x37\x7c\x6e\xc9\x0e\x0f\xb7\xea\xda\x80\x27\xc6\x38\x33\x64\xc3\x95\xed\x9a\x36\xf0\x9c\x70\x2c\xe6\xa9\x61\xcd\x9a\xb5\x9a\x7e\xc0\x36\x4c\x6e\x33\x4b\x0d\xbb\xad\xef\xd2\xf4\xc1\x52\xf8\xc4\xd8\x1e\x59\xb9\x69\xb3\xa6\x0f\xe5\xdc\x7c\x9e\x3b\xbe\xd7\x80\x0e\x59\xbd\x6d\xbb\xae\x1f\x0b\xae\xfc\x84\xe1\xf9\xfb\x46\xb8\xc3\x2d\x76\x59\x5e\xbe\xa7\x59\xd7\x0f\x05\xb1\x6e\xcb\x0a\xee\x49\x69\x49\xb7\x85\x2f\xb3\x92\x69\x4b\xba\x33\x2c\xa9\xa4\xd0\x52\x5a\x43\x69\xda\x45\x47\x89\xd3\x08\x8d\xd2\x19\x3a\x4b\x2f\xd3\x3b\xf4\x3e\x5d\xa0\x8f\xe8\x33\xba\x44\x97\xe9\x2b\xfa\x9a\xbe\xa1\x1f\xe8\x1a\xfd\x44\x3f\xd3\x2f\x74\x9d\x7e\xa7\x3f\x40\x00\x34\x34\xa2\x09\x3a\x1e\xc4\x23\x68\xc3\x4a\xb4\x63\x3d\x36\x61\x0b\x1e\xc5\x56\xf4\x63\x0f\xf6\xe2\x49\xec\xc3\x10\x8e\xc3\x44\x0e\x16\xf2\x28\x61\x14\x63\x18\xc7\x4b\x38\x87\xd7\xf1\x06\xde\xc4\x7b\xf8\x00\x53\xb8\x80\x0f\xf1\x31\x3e\xc5\xe7\xe1\xad\xc5\xaa\x76\x7c\x7c\xa6\x1b\xf1\xc5\x0c\x3b\xca\xaf\x2d\x76\xec\x56\x76\x8c\xf7\xef\xd8\x79\x87\xec\xf8\xfd\xfc\xc0\x83\x0d\x8b\xee\x5b\xbc\x64\x79\xcb\x8a\x55\x9d\x1b\xb6\x3c\x76\xe3\x1d\xce\x7a\x6b\x33\x8c\x35\xdd\x4b\x15\x03\x85\x0e\xa9\x38\xa7\xea\x8c\xd0\xad\x8d\x4d\xfa\xd2\xf8\x32\xed\xfe\xdb\x79\xfc\x80\x70\x2c\x7e\x4a\x09\x0c\xc3\xe6\x86\xad\x13\xf1\x87\x14\x76\x59\x61\x4a\xa5\xa8\xb5\xc6\x55\x95\x5d\x0c\x0b\xf1\xd6\x78\xbb\xa2\xb0\x58\x18\x59\x1d\x5f\xab\x32\x43\x61\x35\x61\x6c\x9d\xd6\xa5\x30\x4b\x65\x75\x61\x34\xa5\x6d\x56\x99\xa7\xb2\xda\x30\xba\x55\xdb\xae\xb0\x3d\x2a\x9b\x73\x65\x69\x93\xde\x98\xee\xd6\x34\x46\xc1\x47\xa5\xfe\x7b\xd7\x9d\xa7\x29\xfa\x84\x2e\xd1\xb7\x74\x95\x7e\xa4\x6b\xf4\x2b\x5d\xa7\xdf\x00\xcc\x45\x43\xc5\x65\xcb\xd0\x8c\xe5\x58\x81\x36\xb4\x63\x15\x56\x63\x23\x52\xd8\x8c\x2d\xe8\x45\x1f\xfa\xb1\x13\xfb\xf1\x14\x32\x18\xc0\x41\x64\xa5\xe3\x38\x1c\xb8\x38\x89\x02\x7c\x4c\xe0\x34\x26\xf1\x02\x5e\xc4\x19\x9c\xc5\x2b\x78\x15\xe7\xf0\x1a\xde\xc5\x79\x4c\xcd\xf2\xdc\xee\x59\x9e\xbb\x70\xd3\x73\xa5\x4c\xc1\xb1\x5d\xe7\xc4\xcd\x25\x61\xc4\xbd\x40\x4d\x28\x7a\xb0\xfe\xef\xbf\xfd\xfe\x7f\x44\x44\xc4\x5d\x0c\x6a\xfb\x32\x7d\x3d\x7f\x33\xfa\xc7\xe4\x46\xc0\xf1\x6a\x87\x7f\xd8\x08\xc0\xb4\x3f\x0c\xff\x77\x1b\x01\xd1\xfc\x4f\xd1\xfc\x1f\xf1\x67\x00\x00\x00\xff\xff\x69\x5a\xf7\xd0\x04\x20\x00\x00") - -func bindataPublicPdfjsDs_storeBytes() ([]byte, error) { - return bindataRead( - _bindataPublicPdfjsDs_store, - "bindata/public/pdfjs/.DS_Store", - ) -} - -func bindataPublicPdfjsDs_store() (*asset, error) { - bytes, err := bindataPublicPdfjsDs_storeBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/pdfjs/.DS_Store", size: 8196, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/manifest.json", size: 616, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10479,7 +10392,7 @@ func bindataPublicPdfjsLicense() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/LICENSE", size: 10174, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/LICENSE", size: 10174, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10499,7 +10412,7 @@ func bindataPublicPdfjsBuildPdfJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.js", size: 312742, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.js", size: 312742, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10519,7 +10432,7 @@ func bindataPublicPdfjsBuildPdfWorkerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.worker.js", size: 748148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/build/pdf.worker.js", size: 748148, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10539,7 +10452,7 @@ func bindataPublicPdfjsWebCmaps78EucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-H.bcmap", size: 2404, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-H.bcmap", size: 2404, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10559,7 +10472,7 @@ func bindataPublicPdfjsWebCmaps78EucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-EUC-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10579,7 +10492,7 @@ func bindataPublicPdfjsWebCmaps78HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-H.bcmap", size: 2379, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-H.bcmap", size: 2379, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10599,7 +10512,7 @@ func bindataPublicPdfjsWebCmaps78RksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-H.bcmap", size: 2398, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-H.bcmap", size: 2398, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10619,7 +10532,7 @@ func bindataPublicPdfjsWebCmaps78RksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-RKSJ-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10639,7 +10552,7 @@ func bindataPublicPdfjsWebCmaps78VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10659,7 +10572,7 @@ func bindataPublicPdfjsWebCmaps78msRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap", size: 2651, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap", size: 2651, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10679,7 +10592,7 @@ func bindataPublicPdfjsWebCmaps78msRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10699,7 +10612,7 @@ func bindataPublicPdfjsWebCmaps83pvRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap", size: 905, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap", size: 905, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10719,7 +10632,7 @@ func bindataPublicPdfjsWebCmaps90msRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap", size: 721, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap", size: 721, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10739,7 +10652,7 @@ func bindataPublicPdfjsWebCmaps90msRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10759,7 +10672,7 @@ func bindataPublicPdfjsWebCmaps90mspRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap", size: 715, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap", size: 715, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10779,7 +10692,7 @@ func bindataPublicPdfjsWebCmaps90mspRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap", size: 291, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap", size: 291, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10799,7 +10712,7 @@ func bindataPublicPdfjsWebCmaps90pvRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap", size: 982, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap", size: 982, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10819,7 +10732,7 @@ func bindataPublicPdfjsWebCmaps90pvRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap", size: 260, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap", size: 260, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10839,7 +10752,7 @@ func bindataPublicPdfjsWebCmapsAddHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-H.bcmap", size: 2419, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-H.bcmap", size: 2419, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10859,7 +10772,7 @@ func bindataPublicPdfjsWebCmapsAddRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-H.bcmap", size: 2413, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-H.bcmap", size: 2413, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10879,7 +10792,7 @@ func bindataPublicPdfjsWebCmapsAddRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-V.bcmap", size: 287, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-RKSJ-V.bcmap", size: 287, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10899,7 +10812,7 @@ func bindataPublicPdfjsWebCmapsAddVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-V.bcmap", size: 282, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Add-V.bcmap", size: 282, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10919,7 +10832,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap", size: 317, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap", size: 317, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10939,7 +10852,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap", size: 371, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap", size: 371, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10959,7 +10872,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap", size: 376, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap", size: 376, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10979,7 +10892,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap", size: 401, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap", size: 401, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -10999,7 +10912,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap", size: 405, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap", size: 405, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11019,7 +10932,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11039,7 +10952,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns16Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11059,7 +10972,7 @@ func bindataPublicPdfjsWebCmapsAdobeCns1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap", size: 41193, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap", size: 41193, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11079,7 +10992,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-0.bcmap", size: 217, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-0.bcmap", size: 217, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11099,7 +11012,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-1.bcmap", size: 250, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-1.bcmap", size: 250, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11119,7 +11032,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-2.bcmap", size: 465, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-2.bcmap", size: 465, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11139,7 +11052,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-3.bcmap", size: 470, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-3.bcmap", size: 470, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11159,7 +11072,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-4.bcmap", size: 601, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-4.bcmap", size: 601, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11179,7 +11092,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-5.bcmap", size: 625, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-5.bcmap", size: 625, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11199,7 +11112,7 @@ func bindataPublicPdfjsWebCmapsAdobeGb1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap", size: 33974, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap", size: 33974, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11219,7 +11132,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap", size: 225, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap", size: 225, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11239,7 +11152,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap", size: 226, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap", size: 226, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11259,7 +11172,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap", size: 233, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap", size: 233, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11279,7 +11192,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap", size: 242, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap", size: 242, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11299,7 +11212,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap", size: 337, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap", size: 337, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11319,7 +11232,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap", size: 430, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap", size: 430, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11339,7 +11252,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan16Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap", size: 485, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap", size: 485, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11359,7 +11272,7 @@ func bindataPublicPdfjsWebCmapsAdobeJapan1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap", size: 40951, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap", size: 40951, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11379,7 +11292,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap", size: 241, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap", size: 241, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11399,7 +11312,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap", size: 386, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap", size: 386, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11419,7 +11332,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap", size: 391, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap", size: 391, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11439,7 +11352,7 @@ func bindataPublicPdfjsWebCmapsAdobeKorea1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap", size: 23293, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap", size: 23293, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11459,7 +11372,7 @@ func bindataPublicPdfjsWebCmapsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-H.bcmap", size: 1086, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-H.bcmap", size: 1086, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11479,7 +11392,7 @@ func bindataPublicPdfjsWebCmapsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-V.bcmap", size: 142, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5-V.bcmap", size: 142, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11499,7 +11412,7 @@ func bindataPublicPdfjsWebCmapsB5pcHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-H.bcmap", size: 1099, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-H.bcmap", size: 1099, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11519,7 +11432,7 @@ func bindataPublicPdfjsWebCmapsB5pcVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-V.bcmap", size: 144, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/B5pc-V.bcmap", size: 144, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11539,7 +11452,7 @@ func bindataPublicPdfjsWebCmapsCnsEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-H.bcmap", size: 1780, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-H.bcmap", size: 1780, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11559,7 +11472,7 @@ func bindataPublicPdfjsWebCmapsCnsEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-V.bcmap", size: 1920, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS-EUC-V.bcmap", size: 1920, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11579,7 +11492,7 @@ func bindataPublicPdfjsWebCmapsCns1HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-H.bcmap", size: 706, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-H.bcmap", size: 706, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11599,7 +11512,7 @@ func bindataPublicPdfjsWebCmapsCns1VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-V.bcmap", size: 143, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS1-V.bcmap", size: 143, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11619,7 +11532,7 @@ func bindataPublicPdfjsWebCmapsCns2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-H.bcmap", size: 504, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-H.bcmap", size: 504, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11639,7 +11552,7 @@ func bindataPublicPdfjsWebCmapsCns2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-V.bcmap", size: 93, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/CNS2-V.bcmap", size: 93, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11659,7 +11572,7 @@ func bindataPublicPdfjsWebCmapsEthkB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-H.bcmap", size: 4426, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-H.bcmap", size: 4426, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11679,7 +11592,7 @@ func bindataPublicPdfjsWebCmapsEthkB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETHK-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11699,7 +11612,7 @@ func bindataPublicPdfjsWebCmapsEtenB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-H.bcmap", size: 1125, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-H.bcmap", size: 1125, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11719,7 +11632,7 @@ func bindataPublicPdfjsWebCmapsEtenB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETen-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11739,7 +11652,7 @@ func bindataPublicPdfjsWebCmapsEtenmsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-H.bcmap", size: 101, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-H.bcmap", size: 101, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11759,7 +11672,7 @@ func bindataPublicPdfjsWebCmapsEtenmsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-V.bcmap", size: 172, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/ETenms-B5-V.bcmap", size: 172, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11779,7 +11692,7 @@ func bindataPublicPdfjsWebCmapsEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-H.bcmap", size: 578, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-H.bcmap", size: 578, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11799,7 +11712,7 @@ func bindataPublicPdfjsWebCmapsEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/EUC-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11819,7 +11732,7 @@ func bindataPublicPdfjsWebCmapsExtHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-H.bcmap", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-H.bcmap", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11839,7 +11752,7 @@ func bindataPublicPdfjsWebCmapsExtRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11859,7 +11772,7 @@ func bindataPublicPdfjsWebCmapsExtRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap", size: 218, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap", size: 218, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11879,7 +11792,7 @@ func bindataPublicPdfjsWebCmapsExtVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-V.bcmap", size: 215, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Ext-V.bcmap", size: 215, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11899,7 +11812,7 @@ func bindataPublicPdfjsWebCmapsGbEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-H.bcmap", size: 549, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-H.bcmap", size: 549, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11919,7 +11832,7 @@ func bindataPublicPdfjsWebCmapsGbEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-V.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-EUC-V.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11939,7 +11852,7 @@ func bindataPublicPdfjsWebCmapsGbHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-H.bcmap", size: 528, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-H.bcmap", size: 528, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11959,7 +11872,7 @@ func bindataPublicPdfjsWebCmapsGbVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-V.bcmap", size: 175, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GB-V.bcmap", size: 175, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11979,7 +11892,7 @@ func bindataPublicPdfjsWebCmapsGbkEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-H.bcmap", size: 14692, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-H.bcmap", size: 14692, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -11999,7 +11912,7 @@ func bindataPublicPdfjsWebCmapsGbkEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12019,7 +11932,7 @@ func bindataPublicPdfjsWebCmapsGbk2kHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-H.bcmap", size: 19662, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-H.bcmap", size: 19662, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12039,7 +11952,7 @@ func bindataPublicPdfjsWebCmapsGbk2kVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-V.bcmap", size: 219, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBK2K-V.bcmap", size: 219, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12059,7 +11972,7 @@ func bindataPublicPdfjsWebCmapsGbkpEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-H.bcmap", size: 14686, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-H.bcmap", size: 14686, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12079,7 +11992,7 @@ func bindataPublicPdfjsWebCmapsGbkpEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBKp-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12099,7 +12012,7 @@ func bindataPublicPdfjsWebCmapsGbtEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-H.bcmap", size: 7290, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-H.bcmap", size: 7290, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12119,7 +12032,7 @@ func bindataPublicPdfjsWebCmapsGbtEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12139,7 +12052,7 @@ func bindataPublicPdfjsWebCmapsGbtHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-H.bcmap", size: 7269, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-H.bcmap", size: 7269, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12159,7 +12072,7 @@ func bindataPublicPdfjsWebCmapsGbtVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-V.bcmap", size: 176, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBT-V.bcmap", size: 176, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12179,7 +12092,7 @@ func bindataPublicPdfjsWebCmapsGbtpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap", size: 7298, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap", size: 7298, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12199,7 +12112,7 @@ func bindataPublicPdfjsWebCmapsGbtpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12219,7 +12132,7 @@ func bindataPublicPdfjsWebCmapsGbpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-H.bcmap", size: 557, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-H.bcmap", size: 557, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12239,7 +12152,7 @@ func bindataPublicPdfjsWebCmapsGbpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/GBpc-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12259,7 +12172,7 @@ func bindataPublicPdfjsWebCmapsHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/H.bcmap", size: 553, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/H.bcmap", size: 553, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12279,7 +12192,7 @@ func bindataPublicPdfjsWebCmapsHkdlaB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-H.bcmap", size: 2654, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-H.bcmap", size: 2654, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12299,7 +12212,7 @@ func bindataPublicPdfjsWebCmapsHkdlaB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdla-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12319,7 +12232,7 @@ func bindataPublicPdfjsWebCmapsHkdlbB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-H.bcmap", size: 2414, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-H.bcmap", size: 2414, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12339,7 +12252,7 @@ func bindataPublicPdfjsWebCmapsHkdlbB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKdlb-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12359,7 +12272,7 @@ func bindataPublicPdfjsWebCmapsHkgccsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-H.bcmap", size: 2292, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-H.bcmap", size: 2292, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12379,7 +12292,7 @@ func bindataPublicPdfjsWebCmapsHkgccsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKgccs-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12399,7 +12312,7 @@ func bindataPublicPdfjsWebCmapsHkm314B5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-H.bcmap", size: 1772, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-H.bcmap", size: 1772, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12419,7 +12332,7 @@ func bindataPublicPdfjsWebCmapsHkm314B5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm314-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12439,7 +12352,7 @@ func bindataPublicPdfjsWebCmapsHkm471B5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-H.bcmap", size: 2171, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-H.bcmap", size: 2171, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12459,7 +12372,7 @@ func bindataPublicPdfjsWebCmapsHkm471B5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKm471-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12479,7 +12392,7 @@ func bindataPublicPdfjsWebCmapsHkscsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-H.bcmap", size: 4437, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-H.bcmap", size: 4437, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12499,7 +12412,7 @@ func bindataPublicPdfjsWebCmapsHkscsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-V.bcmap", size: 159, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/HKscs-B5-V.bcmap", size: 159, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12519,7 +12432,7 @@ func bindataPublicPdfjsWebCmapsHankakuBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hankaku.bcmap", size: 132, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hankaku.bcmap", size: 132, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12539,7 +12452,7 @@ func bindataPublicPdfjsWebCmapsHiraganaBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hiragana.bcmap", size: 124, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Hiragana.bcmap", size: 124, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12559,7 +12472,7 @@ func bindataPublicPdfjsWebCmapsKscEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-H.bcmap", size: 1848, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-H.bcmap", size: 1848, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12579,7 +12492,7 @@ func bindataPublicPdfjsWebCmapsKscEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-EUC-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12599,7 +12512,7 @@ func bindataPublicPdfjsWebCmapsKscHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-H.bcmap", size: 1831, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-H.bcmap", size: 1831, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12619,7 +12532,7 @@ func bindataPublicPdfjsWebCmapsKscJohabHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-H.bcmap", size: 16791, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-H.bcmap", size: 16791, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12639,7 +12552,7 @@ func bindataPublicPdfjsWebCmapsKscJohabVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-Johab-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12659,7 +12572,7 @@ func bindataPublicPdfjsWebCmapsKscVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSC-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12679,7 +12592,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-H.bcmap", size: 2787, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-H.bcmap", size: 2787, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12699,7 +12612,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcHwHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap", size: 2789, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap", size: 2789, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12719,7 +12632,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcHwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12739,7 +12652,7 @@ func bindataPublicPdfjsWebCmapsKscmsUhcVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCms-UHC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12759,7 +12672,7 @@ func bindataPublicPdfjsWebCmapsKscpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap", size: 2024, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap", size: 2024, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12779,7 +12692,7 @@ func bindataPublicPdfjsWebCmapsKscpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12799,7 +12712,7 @@ func bindataPublicPdfjsWebCmapsKatakanaBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Katakana.bcmap", size: 100, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Katakana.bcmap", size: 100, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12819,7 +12732,7 @@ func bindataPublicPdfjsWebCmapsLicense() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/LICENSE", size: 2080, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/LICENSE", size: 2080, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12839,7 +12752,7 @@ func bindataPublicPdfjsWebCmapsNwpHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-H.bcmap", size: 2765, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-H.bcmap", size: 2765, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12859,7 +12772,7 @@ func bindataPublicPdfjsWebCmapsNwpVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-V.bcmap", size: 252, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/NWP-V.bcmap", size: 252, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12879,7 +12792,7 @@ func bindataPublicPdfjsWebCmapsRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-H.bcmap", size: 534, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-H.bcmap", size: 534, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12899,7 +12812,7 @@ func bindataPublicPdfjsWebCmapsRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/RKSJ-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12919,7 +12832,7 @@ func bindataPublicPdfjsWebCmapsRomanBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Roman.bcmap", size: 96, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/Roman.bcmap", size: 96, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12939,7 +12852,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap", size: 48280, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap", size: 48280, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12959,7 +12872,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12979,7 +12892,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap", size: 50419, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap", size: 50419, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -12999,7 +12912,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13019,7 +12932,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap", size: 52679, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap", size: 52679, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13039,7 +12952,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13059,7 +12972,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap", size: 53629, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap", size: 53629, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13079,7 +12992,7 @@ func bindataPublicPdfjsWebCmapsUnicnsUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap", size: 157, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap", size: 157, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13099,7 +13012,7 @@ func bindataPublicPdfjsWebCmapsUnigbUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap", size: 43366, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap", size: 43366, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13119,7 +13032,7 @@ func bindataPublicPdfjsWebCmapsUnigbUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap", size: 193, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap", size: 193, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13139,7 +13052,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap", size: 44086, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap", size: 44086, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13159,7 +13072,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13179,7 +13092,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap", size: 45738, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap", size: 45738, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13199,7 +13112,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13219,7 +13132,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap", size: 46837, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap", size: 46837, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13239,7 +13152,7 @@ func bindataPublicPdfjsWebCmapsUnigbUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13259,7 +13172,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap", size: 25439, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap", size: 25439, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13279,7 +13192,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2HwHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap", size: 119, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap", size: 119, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13299,7 +13212,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2HwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap", size: 680, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap", size: 680, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13319,7 +13232,7 @@ func bindataPublicPdfjsWebCmapsUnijisUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap", size: 664, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap", size: 664, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13339,7 +13252,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap", size: 39443, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap", size: 39443, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13359,7 +13272,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap", size: 643, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap", size: 643, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13379,7 +13292,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap", size: 40539, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap", size: 40539, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13399,7 +13312,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap", size: 677, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap", size: 677, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13419,7 +13332,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap", size: 41695, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap", size: 41695, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13439,7 +13352,7 @@ func bindataPublicPdfjsWebCmapsUnijisUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap", size: 678, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap", size: 678, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13459,7 +13372,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap", size: 39534, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap", size: 39534, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13479,7 +13392,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap", size: 647, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap", size: 647, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13499,7 +13412,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap", size: 40630, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap", size: 40630, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13519,7 +13432,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap", size: 681, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap", size: 681, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13539,7 +13452,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap", size: 41779, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap", size: 41779, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13559,7 +13472,7 @@ func bindataPublicPdfjsWebCmapsUnijis2004Utf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap", size: 682, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap", size: 682, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13579,7 +13492,7 @@ func bindataPublicPdfjsWebCmapsUnijisproUcs2HwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap", size: 705, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap", size: 705, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13599,7 +13512,7 @@ func bindataPublicPdfjsWebCmapsUnijisproUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap", size: 689, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap", size: 689, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13619,7 +13532,7 @@ func bindataPublicPdfjsWebCmapsUnijisproUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap", size: 726, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap", size: 726, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13639,7 +13552,7 @@ func bindataPublicPdfjsWebCmapsUnijisx0213Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap", size: 40517, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap", size: 40517, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13659,7 +13572,7 @@ func bindataPublicPdfjsWebCmapsUnijisx0213Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap", size: 684, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap", size: 684, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13679,7 +13592,7 @@ func bindataPublicPdfjsWebCmapsUnijisx02132004Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap", size: 40608, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap", size: 40608, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13699,7 +13612,7 @@ func bindataPublicPdfjsWebCmapsUnijisx02132004Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap", size: 688, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap", size: 688, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13719,7 +13632,7 @@ func bindataPublicPdfjsWebCmapsUniksUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap", size: 25783, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap", size: 25783, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13739,7 +13652,7 @@ func bindataPublicPdfjsWebCmapsUniksUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13759,7 +13672,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap", size: 26327, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap", size: 26327, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13779,7 +13692,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13799,7 +13712,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap", size: 26451, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap", size: 26451, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13819,7 +13732,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap", size: 168, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap", size: 168, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13839,7 +13752,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap", size: 27790, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap", size: 27790, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13859,7 +13772,7 @@ func bindataPublicPdfjsWebCmapsUniksUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13879,7 +13792,7 @@ func bindataPublicPdfjsWebCmapsVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13899,7 +13812,7 @@ func bindataPublicPdfjsWebCmapsWpSymbolBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/WP-Symbol.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/cmaps/WP-Symbol.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13919,7 +13832,7 @@ func bindataPublicPdfjsWebCompressedTracemonkeyPldi09Pdf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/compressed.tracemonkey-pldi-09.pdf", size: 1016315, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/compressed.tracemonkey-pldi-09.pdf", size: 1016315, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13939,7 +13852,7 @@ func bindataPublicPdfjsWebDebuggerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/debugger.js", size: 8938, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/debugger.js", size: 8938, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13959,7 +13872,7 @@ func bindataPublicPdfjsWebImagesAnnotationCheckSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-check.svg", size: 415, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-check.svg", size: 415, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13979,7 +13892,7 @@ func bindataPublicPdfjsWebImagesAnnotationCommentSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-comment.svg", size: 883, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-comment.svg", size: 883, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -13999,7 +13912,7 @@ func bindataPublicPdfjsWebImagesAnnotationHelpSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-help.svg", size: 2168, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-help.svg", size: 2168, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14019,7 +13932,7 @@ func bindataPublicPdfjsWebImagesAnnotationInsertSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-insert.svg", size: 408, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-insert.svg", size: 408, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14039,7 +13952,7 @@ func bindataPublicPdfjsWebImagesAnnotationKeySvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-key.svg", size: 1452, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-key.svg", size: 1452, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14059,7 +13972,7 @@ func bindataPublicPdfjsWebImagesAnnotationNewparagraphSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-newparagraph.svg", size: 426, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-newparagraph.svg", size: 426, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14079,7 +13992,7 @@ func bindataPublicPdfjsWebImagesAnnotationNoiconSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-noicon.svg", size: 158, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-noicon.svg", size: 158, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14099,7 +14012,7 @@ func bindataPublicPdfjsWebImagesAnnotationNoteSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-note.svg", size: 1041, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-note.svg", size: 1041, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14119,7 +14032,7 @@ func bindataPublicPdfjsWebImagesAnnotationParagraphSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-paragraph.svg", size: 1143, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/annotation-paragraph.svg", size: 1143, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14139,7 +14052,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNextRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14159,7 +14072,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNextRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next-rtl@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14179,7 +14092,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNextPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14199,7 +14112,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonNext2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-next@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14219,7 +14132,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPreviousRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14239,7 +14152,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPreviousRtl2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous-rtl@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14259,7 +14172,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPreviousPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14279,7 +14192,7 @@ func bindataPublicPdfjsWebImagesFindbarbuttonPrevious2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/findbarButton-previous@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14299,7 +14212,7 @@ func bindataPublicPdfjsWebImagesGrabCur() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grab.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grab.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14319,7 +14232,7 @@ func bindataPublicPdfjsWebImagesGrabbingCur() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grabbing.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/grabbing.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14339,7 +14252,7 @@ func bindataPublicPdfjsWebImagesLoadingIconGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-icon.gif", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-icon.gif", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14359,7 +14272,7 @@ func bindataPublicPdfjsWebImagesLoadingSmallPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small.png", size: 7402, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small.png", size: 7402, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14379,7 +14292,7 @@ func bindataPublicPdfjsWebImagesLoadingSmall2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small@2x.png", size: 16131, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/loading-small@2x.png", size: 16131, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14399,7 +14312,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonDocumentpropertiesPng() (* return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14419,7 +14332,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonDocumentproperties2xPng() return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties@2x.png", size: 933, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-documentProperties@2x.png", size: 933, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14439,7 +14352,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonFirstpagePng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14459,7 +14372,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonFirstpage2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage@2x.png", size: 266, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-firstPage@2x.png", size: 266, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14479,7 +14392,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonHandtoolPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool.png", size: 301, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool.png", size: 301, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14499,7 +14412,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonHandtool2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool@2x.png", size: 583, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-handTool@2x.png", size: 583, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14519,7 +14432,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonLastpagePng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage.png", size: 175, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage.png", size: 175, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14539,7 +14452,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonLastpage2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage@2x.png", size: 276, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-lastPage@2x.png", size: 276, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14559,7 +14472,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotateccwPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png", size: 360, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png", size: 360, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14579,7 +14492,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotateccw2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw@2x.png", size: 731, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw@2x.png", size: 731, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14599,7 +14512,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotatecwPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14619,7 +14532,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonRotatecw2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw@2x.png", size: 714, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-rotateCw@2x.png", size: 714, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14639,7 +14552,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollhorizontalPng() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.png", size: 218, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.png", size: 218, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14659,7 +14572,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollhorizontal2xPng() (* return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal@2x.png", size: 332, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal@2x.png", size: 332, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14679,7 +14592,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollverticalPng() (*asse return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.png", size: 228, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.png", size: 228, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14699,7 +14612,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollvertical2xPng() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical@2x.png", size: 349, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical@2x.png", size: 349, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14719,7 +14632,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollwrappedPng() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.png", size: 297, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.png", size: 297, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14739,7 +14652,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonScrollwrapped2xPng() (*ass return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped@2x.png", size: 490, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped@2x.png", size: 490, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14759,7 +14672,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSelecttoolPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool.png", size: 461, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool.png", size: 461, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14779,7 +14692,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSelecttool2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool@2x.png", size: 1067, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-selectTool@2x.png", size: 1067, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14799,7 +14712,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadevenPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.png", size: 347, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.png", size: 347, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14819,7 +14732,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadeven2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven@2x.png", size: 694, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadEven@2x.png", size: 694, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14839,7 +14752,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadnonePng() (*asset, e return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14859,7 +14772,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadnone2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone@2x.png", size: 261, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadNone@2x.png", size: 261, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14879,7 +14792,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadoddPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14899,7 +14812,7 @@ func bindataPublicPdfjsWebImagesSecondarytoolbarbuttonSpreadodd2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd@2x.png", size: 621, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd@2x.png", size: 621, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14919,7 +14832,7 @@ func bindataPublicPdfjsWebImagesShadowPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/shadow.png", size: 290, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/shadow.png", size: 290, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14939,7 +14852,7 @@ func bindataPublicPdfjsWebImagesTexturePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/texture.png", size: 2417, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/texture.png", size: 2417, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14959,7 +14872,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonBookmarkPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark.png", size: 174, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark.png", size: 174, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14979,7 +14892,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonBookmark2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark@2x.png", size: 260, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-bookmark@2x.png", size: 260, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -14999,7 +14912,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonDownloadPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download.png", size: 259, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download.png", size: 259, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15019,7 +14932,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonDownload2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download@2x.png", size: 425, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-download@2x.png", size: 425, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15039,7 +14952,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonMenuarrowsPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows.png", size: 107, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows.png", size: 107, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15059,7 +14972,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonMenuarrows2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows@2x.png", size: 152, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-menuArrows@2x.png", size: 152, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15079,7 +14992,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonOpenfilePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile.png", size: 295, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile.png", size: 295, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15099,7 +15012,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonOpenfile2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile@2x.png", size: 550, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-openFile@2x.png", size: 550, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15119,7 +15032,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedownRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl.png", size: 242, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl.png", size: 242, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15139,7 +15052,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedownRtl2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl@2x.png", size: 398, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown-rtl@2x.png", size: 398, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15159,7 +15072,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown.png", size: 238, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown.png", size: 238, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15179,7 +15092,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPagedown2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown@2x.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageDown@2x.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15199,7 +15112,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageupRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl.png", size: 245, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl.png", size: 245, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15219,7 +15132,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageupRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl@2x.png", size: 405, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp-rtl@2x.png", size: 405, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15239,7 +15152,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageupPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15259,7 +15172,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPageup2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp@2x.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-pageUp@2x.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15279,7 +15192,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPresentationmodePng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode.png", size: 321, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode.png", size: 321, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15299,7 +15212,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPresentationmode2xPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode@2x.png", size: 586, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-presentationMode@2x.png", size: 586, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15319,7 +15232,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPrintPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print.png", size: 257, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print.png", size: 257, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15339,7 +15252,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonPrint2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print@2x.png", size: 464, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-print@2x.png", size: 464, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15359,7 +15272,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSearchPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search.png", size: 309, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search.png", size: 309, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15379,7 +15292,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSearch2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search@2x.png", size: 653, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-search@2x.png", size: 653, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15399,7 +15312,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartoggleRtlPng() (*as return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15419,7 +15332,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartoggleRtl2xPng() (* return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png", size: 456, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png", size: 456, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15439,7 +15352,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartogglePng() (*asset return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png", size: 243, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png", size: 243, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15459,7 +15372,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSecondarytoolbartoggle2xPng() (*ass return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle@2x.png", size: 458, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle@2x.png", size: 458, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15479,7 +15392,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartoggleRtlPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15499,7 +15412,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartoggleRtl2xPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl@2x.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle-rtl@2x.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15519,7 +15432,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartogglePng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15539,7 +15452,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonSidebartoggle2xPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-sidebarToggle@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15559,7 +15472,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewattachmentsPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments.png", size: 384, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments.png", size: 384, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15579,7 +15492,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewattachments2xPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments@2x.png", size: 859, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewAttachments@2x.png", size: 859, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15599,7 +15512,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutlineRtlPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl.png", size: 177, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl.png", size: 177, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15619,7 +15532,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutlineRtl2xPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl@2x.png", size: 394, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline-rtl@2x.png", size: 394, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15639,7 +15552,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutlinePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline.png", size: 178, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline.png", size: 178, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15659,7 +15572,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewoutline2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewOutline@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15679,7 +15592,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewthumbnailPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail.png", size: 185, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail.png", size: 185, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15699,7 +15612,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonViewthumbnail2xPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail@2x.png", size: 219, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-viewThumbnail@2x.png", size: 219, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15719,7 +15632,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoominPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn.png", size: 136, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn.png", size: 136, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15739,7 +15652,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoomin2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn@2x.png", size: 160, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomIn@2x.png", size: 160, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15759,7 +15672,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoomoutPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut.png", size: 88, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut.png", size: 88, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15779,7 +15692,7 @@ func bindataPublicPdfjsWebImagesToolbarbuttonZoomout2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut@2x.png", size: 109, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/toolbarButton-zoomOut@2x.png", size: 109, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15799,7 +15712,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsedRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl.png", size: 143, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl.png", size: 143, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15819,7 +15732,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsedRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl@2x.png", size: 167, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed-rtl@2x.png", size: 167, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15839,7 +15752,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed.png", size: 128, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed.png", size: 128, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15859,7 +15772,7 @@ func bindataPublicPdfjsWebImagesTreeitemCollapsed2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed@2x.png", size: 149, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-collapsed@2x.png", size: 149, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15879,7 +15792,7 @@ func bindataPublicPdfjsWebImagesTreeitemExpandedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded.png", size: 125, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded.png", size: 125, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15899,7 +15812,7 @@ func bindataPublicPdfjsWebImagesTreeitemExpanded2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded@2x.png", size: 172, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/images/treeitem-expanded@2x.png", size: 172, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15919,7 +15832,7 @@ func bindataPublicPdfjsWebLocaleAchViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ach/viewer.properties", size: 8848, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ach/viewer.properties", size: 8848, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15939,7 +15852,7 @@ func bindataPublicPdfjsWebLocaleAfViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/af/viewer.properties", size: 7727, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/af/viewer.properties", size: 7727, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15959,7 +15872,7 @@ func bindataPublicPdfjsWebLocaleAkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ak/viewer.properties", size: 5504, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ak/viewer.properties", size: 5504, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15979,7 +15892,7 @@ func bindataPublicPdfjsWebLocaleAnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/an/viewer.properties", size: 8085, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/an/viewer.properties", size: 8085, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -15999,7 +15912,7 @@ func bindataPublicPdfjsWebLocaleArViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ar/viewer.properties", size: 12619, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ar/viewer.properties", size: 12619, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16019,7 +15932,7 @@ func bindataPublicPdfjsWebLocaleAsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/as/viewer.properties", size: 9976, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/as/viewer.properties", size: 9976, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16039,7 +15952,7 @@ func bindataPublicPdfjsWebLocaleAstViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ast/viewer.properties", size: 8736, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ast/viewer.properties", size: 8736, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16059,7 +15972,7 @@ func bindataPublicPdfjsWebLocaleAzViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/az/viewer.properties", size: 11506, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/az/viewer.properties", size: 11506, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16079,7 +15992,7 @@ func bindataPublicPdfjsWebLocaleBeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/be/viewer.properties", size: 13783, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/be/viewer.properties", size: 13783, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16099,7 +16012,7 @@ func bindataPublicPdfjsWebLocaleBgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bg/viewer.properties", size: 14159, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bg/viewer.properties", size: 14159, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16119,7 +16032,7 @@ func bindataPublicPdfjsWebLocaleBnBdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-BD/viewer.properties", size: 13216, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-BD/viewer.properties", size: 13216, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16139,7 +16052,7 @@ func bindataPublicPdfjsWebLocaleBnInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-IN/viewer.properties", size: 11075, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bn-IN/viewer.properties", size: 11075, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16159,7 +16072,7 @@ func bindataPublicPdfjsWebLocaleBrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/br/viewer.properties", size: 11609, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/br/viewer.properties", size: 11609, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16179,7 +16092,7 @@ func bindataPublicPdfjsWebLocaleBrxViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/brx/viewer.properties", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/brx/viewer.properties", size: 10166, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16199,7 +16112,7 @@ func bindataPublicPdfjsWebLocaleBsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bs/viewer.properties", size: 9099, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/bs/viewer.properties", size: 9099, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16219,7 +16132,7 @@ func bindataPublicPdfjsWebLocaleCaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ca/viewer.properties", size: 9460, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ca/viewer.properties", size: 9460, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16239,7 +16152,7 @@ func bindataPublicPdfjsWebLocaleCakViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cak/viewer.properties", size: 11685, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cak/viewer.properties", size: 11685, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16259,7 +16172,7 @@ func bindataPublicPdfjsWebLocaleCrhViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/crh/viewer.properties", size: 9840, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/crh/viewer.properties", size: 9840, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16279,7 +16192,7 @@ func bindataPublicPdfjsWebLocaleCsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cs/viewer.properties", size: 11389, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cs/viewer.properties", size: 11389, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16299,7 +16212,7 @@ func bindataPublicPdfjsWebLocaleCsbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/csb/viewer.properties", size: 4832, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/csb/viewer.properties", size: 4832, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16319,7 +16232,7 @@ func bindataPublicPdfjsWebLocaleCyViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cy/viewer.properties", size: 11040, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/cy/viewer.properties", size: 11040, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16339,7 +16252,7 @@ func bindataPublicPdfjsWebLocaleDaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/da/viewer.properties", size: 10991, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/da/viewer.properties", size: 10991, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16359,7 +16272,7 @@ func bindataPublicPdfjsWebLocaleDeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/de/viewer.properties", size: 10791, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/de/viewer.properties", size: 10791, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16379,7 +16292,7 @@ func bindataPublicPdfjsWebLocaleElViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/el/viewer.properties", size: 14297, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/el/viewer.properties", size: 14297, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16399,7 +16312,7 @@ func bindataPublicPdfjsWebLocaleEnCaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-CA/viewer.properties", size: 10773, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-CA/viewer.properties", size: 10773, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16419,7 +16332,7 @@ func bindataPublicPdfjsWebLocaleEnGbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-GB/viewer.properties", size: 7535, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-GB/viewer.properties", size: 7535, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16439,7 +16352,7 @@ func bindataPublicPdfjsWebLocaleEnUsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-US/viewer.properties", size: 10777, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-US/viewer.properties", size: 10777, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16459,7 +16372,7 @@ func bindataPublicPdfjsWebLocaleEnZaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-ZA/viewer.properties", size: 6977, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/en-ZA/viewer.properties", size: 6977, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16479,7 +16392,7 @@ func bindataPublicPdfjsWebLocaleEoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eo/viewer.properties", size: 11162, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eo/viewer.properties", size: 11162, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16499,7 +16412,7 @@ func bindataPublicPdfjsWebLocaleEsArViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-AR/viewer.properties", size: 11289, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-AR/viewer.properties", size: 11289, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16519,7 +16432,7 @@ func bindataPublicPdfjsWebLocaleEsClViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-CL/viewer.properties", size: 11494, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-CL/viewer.properties", size: 11494, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16539,7 +16452,7 @@ func bindataPublicPdfjsWebLocaleEsEsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-ES/viewer.properties", size: 11522, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-ES/viewer.properties", size: 11522, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16559,7 +16472,7 @@ func bindataPublicPdfjsWebLocaleEsMxViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-MX/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/es-MX/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16579,7 +16492,7 @@ func bindataPublicPdfjsWebLocaleEtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/et/viewer.properties", size: 11084, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/et/viewer.properties", size: 11084, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16599,7 +16512,7 @@ func bindataPublicPdfjsWebLocaleEuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eu/viewer.properties", size: 11378, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/eu/viewer.properties", size: 11378, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16619,7 +16532,7 @@ func bindataPublicPdfjsWebLocaleFaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fa/viewer.properties", size: 10268, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fa/viewer.properties", size: 10268, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16639,7 +16552,7 @@ func bindataPublicPdfjsWebLocaleFfViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ff/viewer.properties", size: 8855, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ff/viewer.properties", size: 8855, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16659,7 +16572,7 @@ func bindataPublicPdfjsWebLocaleFiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fi/viewer.properties", size: 11237, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fi/viewer.properties", size: 11237, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16679,7 +16592,7 @@ func bindataPublicPdfjsWebLocaleFrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fr/viewer.properties", size: 11723, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fr/viewer.properties", size: 11723, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16699,7 +16612,7 @@ func bindataPublicPdfjsWebLocaleFyNlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fy-NL/viewer.properties", size: 11089, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/fy-NL/viewer.properties", size: 11089, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16719,7 +16632,7 @@ func bindataPublicPdfjsWebLocaleGaIeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ga-IE/viewer.properties", size: 8216, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ga-IE/viewer.properties", size: 8216, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16739,7 +16652,7 @@ func bindataPublicPdfjsWebLocaleGdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gd/viewer.properties", size: 10211, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gd/viewer.properties", size: 10211, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16759,7 +16672,7 @@ func bindataPublicPdfjsWebLocaleGlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gl/viewer.properties", size: 7203, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gl/viewer.properties", size: 7203, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16779,7 +16692,7 @@ func bindataPublicPdfjsWebLocaleGnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gn/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gn/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16799,7 +16712,7 @@ func bindataPublicPdfjsWebLocaleGuInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gu-IN/viewer.properties", size: 15394, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/gu-IN/viewer.properties", size: 15394, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16819,7 +16732,7 @@ func bindataPublicPdfjsWebLocaleHeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/he/viewer.properties", size: 12079, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/he/viewer.properties", size: 12079, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16839,7 +16752,7 @@ func bindataPublicPdfjsWebLocaleHiInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hi-IN/viewer.properties", size: 13188, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hi-IN/viewer.properties", size: 13188, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16859,7 +16772,7 @@ func bindataPublicPdfjsWebLocaleHrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hr/viewer.properties", size: 8002, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hr/viewer.properties", size: 8002, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16879,7 +16792,7 @@ func bindataPublicPdfjsWebLocaleHsbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hsb/viewer.properties", size: 11486, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hsb/viewer.properties", size: 11486, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16899,7 +16812,7 @@ func bindataPublicPdfjsWebLocaleHtoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hto/viewer.properties", size: 5182, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hto/viewer.properties", size: 5182, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16919,7 +16832,7 @@ func bindataPublicPdfjsWebLocaleHuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hu/viewer.properties", size: 11667, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hu/viewer.properties", size: 11667, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16939,7 +16852,7 @@ func bindataPublicPdfjsWebLocaleHyAmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hy-AM/viewer.properties", size: 10955, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/hy-AM/viewer.properties", size: 10955, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16959,7 +16872,7 @@ func bindataPublicPdfjsWebLocaleIaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ia/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ia/viewer.properties", size: 11434, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16979,7 +16892,7 @@ func bindataPublicPdfjsWebLocaleIdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/id/viewer.properties", size: 11138, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/id/viewer.properties", size: 11138, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -16999,7 +16912,7 @@ func bindataPublicPdfjsWebLocaleIsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/is/viewer.properties", size: 9612, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/is/viewer.properties", size: 9612, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17019,7 +16932,7 @@ func bindataPublicPdfjsWebLocaleItViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/it/viewer.properties", size: 7866, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/it/viewer.properties", size: 7866, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17039,7 +16952,7 @@ func bindataPublicPdfjsWebLocaleJaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ja/viewer.properties", size: 10852, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ja/viewer.properties", size: 10852, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17059,7 +16972,7 @@ func bindataPublicPdfjsWebLocaleKaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ka/viewer.properties", size: 16006, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ka/viewer.properties", size: 16006, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17079,7 +16992,7 @@ func bindataPublicPdfjsWebLocaleKabViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kab/viewer.properties", size: 11201, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kab/viewer.properties", size: 11201, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17099,7 +17012,7 @@ func bindataPublicPdfjsWebLocaleKkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kk/viewer.properties", size: 13618, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kk/viewer.properties", size: 13618, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17119,7 +17032,7 @@ func bindataPublicPdfjsWebLocaleKmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/km/viewer.properties", size: 11829, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/km/viewer.properties", size: 11829, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17139,7 +17052,7 @@ func bindataPublicPdfjsWebLocaleKnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kn/viewer.properties", size: 12111, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kn/viewer.properties", size: 12111, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17159,7 +17072,7 @@ func bindataPublicPdfjsWebLocaleKoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ko/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ko/viewer.properties", size: 11400, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17179,7 +17092,7 @@ func bindataPublicPdfjsWebLocaleKokViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kok/viewer.properties", size: 9573, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/kok/viewer.properties", size: 9573, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17199,7 +17112,7 @@ func bindataPublicPdfjsWebLocaleKsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ks/viewer.properties", size: 8546, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ks/viewer.properties", size: 8546, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17219,7 +17132,7 @@ func bindataPublicPdfjsWebLocaleKuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ku/viewer.properties", size: 6325, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ku/viewer.properties", size: 6325, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17239,7 +17152,7 @@ func bindataPublicPdfjsWebLocaleLgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lg/viewer.properties", size: 4510, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lg/viewer.properties", size: 4510, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17259,7 +17172,7 @@ func bindataPublicPdfjsWebLocaleLijViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lij/viewer.properties", size: 11376, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lij/viewer.properties", size: 11376, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17279,7 +17192,7 @@ func bindataPublicPdfjsWebLocaleLoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lo/viewer.properties", size: 7878, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lo/viewer.properties", size: 7878, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17299,7 +17212,7 @@ func bindataPublicPdfjsWebLocaleLocaleProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/locale.properties", size: 5110, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/locale.properties", size: 5110, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17319,7 +17232,7 @@ func bindataPublicPdfjsWebLocaleLtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lt/viewer.properties", size: 11542, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lt/viewer.properties", size: 11542, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17339,7 +17252,7 @@ func bindataPublicPdfjsWebLocaleLtgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ltg/viewer.properties", size: 9919, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ltg/viewer.properties", size: 9919, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17359,7 +17272,7 @@ func bindataPublicPdfjsWebLocaleLvViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lv/viewer.properties", size: 11285, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/lv/viewer.properties", size: 11285, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17379,7 +17292,7 @@ func bindataPublicPdfjsWebLocaleMaiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mai/viewer.properties", size: 9447, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mai/viewer.properties", size: 9447, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17399,7 +17312,7 @@ func bindataPublicPdfjsWebLocaleMehViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/meh/viewer.properties", size: 3140, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/meh/viewer.properties", size: 3140, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17419,7 +17332,7 @@ func bindataPublicPdfjsWebLocaleMkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mk/viewer.properties", size: 7701, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mk/viewer.properties", size: 7701, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17439,7 +17352,7 @@ func bindataPublicPdfjsWebLocaleMlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ml/viewer.properties", size: 13497, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ml/viewer.properties", size: 13497, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17459,7 +17372,7 @@ func bindataPublicPdfjsWebLocaleMnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mn/viewer.properties", size: 3557, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mn/viewer.properties", size: 3557, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17479,7 +17392,7 @@ func bindataPublicPdfjsWebLocaleMrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mr/viewer.properties", size: 12528, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/mr/viewer.properties", size: 12528, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17499,7 +17412,7 @@ func bindataPublicPdfjsWebLocaleMsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ms/viewer.properties", size: 11071, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ms/viewer.properties", size: 11071, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17519,7 +17432,7 @@ func bindataPublicPdfjsWebLocaleMyViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/my/viewer.properties", size: 11533, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/my/viewer.properties", size: 11533, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17539,7 +17452,7 @@ func bindataPublicPdfjsWebLocaleNbNoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nb-NO/viewer.properties", size: 10863, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nb-NO/viewer.properties", size: 10863, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17559,7 +17472,7 @@ func bindataPublicPdfjsWebLocaleNeNpViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ne-NP/viewer.properties", size: 11691, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ne-NP/viewer.properties", size: 11691, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17579,7 +17492,7 @@ func bindataPublicPdfjsWebLocaleNlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nl/viewer.properties", size: 11336, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nl/viewer.properties", size: 11336, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17599,7 +17512,7 @@ func bindataPublicPdfjsWebLocaleNnNoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nn-NO/viewer.properties", size: 10832, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nn-NO/viewer.properties", size: 10832, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17619,7 +17532,7 @@ func bindataPublicPdfjsWebLocaleNsoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nso/viewer.properties", size: 5610, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/nso/viewer.properties", size: 5610, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17639,7 +17552,7 @@ func bindataPublicPdfjsWebLocaleOcViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/oc/viewer.properties", size: 9755, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/oc/viewer.properties", size: 9755, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17659,7 +17572,7 @@ func bindataPublicPdfjsWebLocaleOrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/or/viewer.properties", size: 10397, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/or/viewer.properties", size: 10397, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17679,7 +17592,7 @@ func bindataPublicPdfjsWebLocalePaInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pa-IN/viewer.properties", size: 11954, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pa-IN/viewer.properties", size: 11954, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17699,7 +17612,7 @@ func bindataPublicPdfjsWebLocalePlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pl/viewer.properties", size: 7751, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pl/viewer.properties", size: 7751, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17719,7 +17632,7 @@ func bindataPublicPdfjsWebLocalePtBrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-BR/viewer.properties", size: 10787, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-BR/viewer.properties", size: 10787, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17739,7 +17652,7 @@ func bindataPublicPdfjsWebLocalePtPtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-PT/viewer.properties", size: 11474, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/pt-PT/viewer.properties", size: 11474, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17759,7 +17672,7 @@ func bindataPublicPdfjsWebLocaleRmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rm/viewer.properties", size: 11670, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rm/viewer.properties", size: 11670, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17779,7 +17692,7 @@ func bindataPublicPdfjsWebLocaleRoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ro/viewer.properties", size: 11640, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ro/viewer.properties", size: 11640, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17799,7 +17712,7 @@ func bindataPublicPdfjsWebLocaleRuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ru/viewer.properties", size: 13879, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ru/viewer.properties", size: 13879, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17819,7 +17732,7 @@ func bindataPublicPdfjsWebLocaleRwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rw/viewer.properties", size: 3488, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/rw/viewer.properties", size: 3488, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17839,7 +17752,7 @@ func bindataPublicPdfjsWebLocaleSahViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sah/viewer.properties", size: 8401, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sah/viewer.properties", size: 8401, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17859,7 +17772,7 @@ func bindataPublicPdfjsWebLocaleSatViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sat/viewer.properties", size: 8346, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sat/viewer.properties", size: 8346, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17879,7 +17792,7 @@ func bindataPublicPdfjsWebLocaleSiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/si/viewer.properties", size: 9674, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/si/viewer.properties", size: 9674, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17899,7 +17812,7 @@ func bindataPublicPdfjsWebLocaleSkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sk/viewer.properties", size: 11628, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sk/viewer.properties", size: 11628, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17919,7 +17832,7 @@ func bindataPublicPdfjsWebLocaleSlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sl/viewer.properties", size: 11146, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sl/viewer.properties", size: 11146, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17939,7 +17852,7 @@ func bindataPublicPdfjsWebLocaleSonViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/son/viewer.properties", size: 7445, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/son/viewer.properties", size: 7445, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17959,7 +17872,7 @@ func bindataPublicPdfjsWebLocaleSqViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sq/viewer.properties", size: 11023, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sq/viewer.properties", size: 11023, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17979,7 +17892,7 @@ func bindataPublicPdfjsWebLocaleSrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sr/viewer.properties", size: 12236, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sr/viewer.properties", size: 12236, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -17999,7 +17912,7 @@ func bindataPublicPdfjsWebLocaleSvSeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sv-SE/viewer.properties", size: 10885, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sv-SE/viewer.properties", size: 10885, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18019,7 +17932,7 @@ func bindataPublicPdfjsWebLocaleSwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sw/viewer.properties", size: 5268, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/sw/viewer.properties", size: 5268, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18039,7 +17952,7 @@ func bindataPublicPdfjsWebLocaleTaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta/viewer.properties", size: 13473, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta/viewer.properties", size: 13473, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18059,7 +17972,7 @@ func bindataPublicPdfjsWebLocaleTaLkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta-LK/viewer.properties", size: 3495, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ta-LK/viewer.properties", size: 3495, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18079,7 +17992,7 @@ func bindataPublicPdfjsWebLocaleTeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/te/viewer.properties", size: 13076, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/te/viewer.properties", size: 13076, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18099,7 +18012,7 @@ func bindataPublicPdfjsWebLocaleThViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/th/viewer.properties", size: 13789, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/th/viewer.properties", size: 13789, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18119,7 +18032,7 @@ func bindataPublicPdfjsWebLocaleTlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tl/viewer.properties", size: 7804, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tl/viewer.properties", size: 7804, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18139,7 +18052,7 @@ func bindataPublicPdfjsWebLocaleTnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tn/viewer.properties", size: 3630, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tn/viewer.properties", size: 3630, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18159,7 +18072,7 @@ func bindataPublicPdfjsWebLocaleTrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tr/viewer.properties", size: 11250, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tr/viewer.properties", size: 11250, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18179,7 +18092,7 @@ func bindataPublicPdfjsWebLocaleTszViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tsz/viewer.properties", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/tsz/viewer.properties", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18199,7 +18112,7 @@ func bindataPublicPdfjsWebLocaleUkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uk/viewer.properties", size: 13712, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uk/viewer.properties", size: 13712, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18219,7 +18132,7 @@ func bindataPublicPdfjsWebLocaleUrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ur/viewer.properties", size: 10290, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/ur/viewer.properties", size: 10290, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18239,7 +18152,7 @@ func bindataPublicPdfjsWebLocaleUzViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uz/viewer.properties", size: 7340, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/uz/viewer.properties", size: 7340, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18259,7 +18172,7 @@ func bindataPublicPdfjsWebLocaleViViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/vi/viewer.properties", size: 9653, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/vi/viewer.properties", size: 9653, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18279,7 +18192,7 @@ func bindataPublicPdfjsWebLocaleWoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/wo/viewer.properties", size: 4913, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/wo/viewer.properties", size: 4913, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18299,7 +18212,7 @@ func bindataPublicPdfjsWebLocaleXhViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/xh/viewer.properties", size: 8192, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/xh/viewer.properties", size: 8192, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18319,7 +18232,7 @@ func bindataPublicPdfjsWebLocaleZamViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zam/viewer.properties", size: 3696, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zam/viewer.properties", size: 3696, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18339,7 +18252,7 @@ func bindataPublicPdfjsWebLocaleZhCnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-CN/viewer.properties", size: 10709, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-CN/viewer.properties", size: 10709, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18359,7 +18272,7 @@ func bindataPublicPdfjsWebLocaleZhTwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-TW/viewer.properties", size: 10774, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zh-TW/viewer.properties", size: 10774, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18379,7 +18292,7 @@ func bindataPublicPdfjsWebLocaleZuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zu/viewer.properties", size: 5672, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/locale/zu/viewer.properties", size: 5672, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18399,7 +18312,7 @@ func bindataPublicPdfjsWebViewerCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.css", size: 55950, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.css", size: 55950, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18419,7 +18332,7 @@ func bindataPublicPdfjsWebViewerHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.html", size: 22182, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.html", size: 22182, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18439,7 +18352,7 @@ func bindataPublicPdfjsWebViewerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.js", size: 229074, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/pdfjs/web/viewer.js", size: 229074, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18459,7 +18372,7 @@ func bindataPublicPrismPrismCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/prism/prism.css", size: 5224, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/prism/prism.css", size: 5224, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18479,7 +18392,7 @@ func bindataPublicPrismPrismJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/prism/prism.js", size: 92348, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/prism/prism.js", size: 92348, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18499,7 +18412,7 @@ func bindataPublicSectionsAirtablePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/airtable.png", size: 1263, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/airtable.png", size: 1263, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18519,7 +18432,7 @@ func bindataPublicSectionsAirtable2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/airtable@2x.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/airtable@2x.png", size: 4247, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18539,7 +18452,7 @@ func bindataPublicSectionsAsanaPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/asana.png", size: 1405, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/asana.png", size: 1405, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18559,7 +18472,7 @@ func bindataPublicSectionsAsana2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/asana@2x.png", size: 3507, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/asana@2x.png", size: 3507, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18579,7 +18492,7 @@ func bindataPublicSectionsCodePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/code.png", size: 720, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/code.png", size: 720, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18599,7 +18512,7 @@ func bindataPublicSectionsCode2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/code@2x.png", size: 1468, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/code@2x.png", size: 1468, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18619,7 +18532,7 @@ func bindataPublicSectionsDocusignPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/docusign.png", size: 791, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/docusign.png", size: 791, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18639,7 +18552,7 @@ func bindataPublicSectionsDocusign2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/docusign@2x.png", size: 1358, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/docusign@2x.png", size: 1358, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18659,7 +18572,7 @@ func bindataPublicSectionsFlowchartPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/flowchart.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/flowchart.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18679,7 +18592,7 @@ func bindataPublicSectionsFlowchart2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/flowchart@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/flowchart@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18699,7 +18612,7 @@ func bindataPublicSectionsFramePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/frame.png", size: 255, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/frame.png", size: 255, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18719,7 +18632,7 @@ func bindataPublicSectionsFrame2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/frame@2x.png", size: 357, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/frame@2x.png", size: 357, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18739,7 +18652,7 @@ func bindataPublicSectionsGeminiPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/gemini.png", size: 1580, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/gemini.png", size: 1580, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18759,7 +18672,7 @@ func bindataPublicSectionsGemini2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/gemini@2x.png", size: 3446, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/gemini@2x.png", size: 3446, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18779,7 +18692,7 @@ func bindataPublicSectionsGithubPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/github.png", size: 674, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/github.png", size: 674, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18799,7 +18712,7 @@ func bindataPublicSectionsGithub2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/github@2x.png", size: 1388, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/github@2x.png", size: 1388, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18819,7 +18732,7 @@ func bindataPublicSectionsIntercomPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/intercom.png", size: 1183, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/intercom.png", size: 1183, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18839,7 +18752,7 @@ func bindataPublicSectionsIntercom2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/intercom@2x.png", size: 2223, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/intercom@2x.png", size: 2223, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18859,7 +18772,7 @@ func bindataPublicSectionsJiraPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/jira.png", size: 1326, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/jira.png", size: 1326, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18879,7 +18792,7 @@ func bindataPublicSectionsJira2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/jira@2x.png", size: 2932, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/jira@2x.png", size: 2932, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18899,7 +18812,7 @@ func bindataPublicSectionsMailchimpPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/mailchimp.png", size: 2115, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/mailchimp.png", size: 2115, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18919,7 +18832,7 @@ func bindataPublicSectionsMailchimp2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/mailchimp@2x.png", size: 5901, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/mailchimp@2x.png", size: 5901, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18939,7 +18852,7 @@ func bindataPublicSectionsMarkdownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/markdown.png", size: 518, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/markdown.png", size: 518, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18959,7 +18872,7 @@ func bindataPublicSectionsMarkdown2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/markdown@2x.png", size: 864, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/markdown@2x.png", size: 864, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18979,7 +18892,7 @@ func bindataPublicSectionsPapertrailPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/papertrail.png", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/papertrail.png", size: 1178, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -18999,7 +18912,7 @@ func bindataPublicSectionsPapertrail2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/papertrail@2x.png", size: 2376, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/papertrail@2x.png", size: 2376, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19019,7 +18932,7 @@ func bindataPublicSectionsPdfPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/pdf.png", size: 555, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/pdf.png", size: 555, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19039,7 +18952,7 @@ func bindataPublicSectionsPdf2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/pdf@2x.png", size: 1001, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/pdf@2x.png", size: 1001, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19059,7 +18972,7 @@ func bindataPublicSectionsPlantumlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/plantuml.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/plantuml.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19079,7 +18992,7 @@ func bindataPublicSectionsPlantuml2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/plantuml@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/plantuml@2x.png", size: 630, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19099,7 +19012,7 @@ func bindataPublicSectionsSalesforcePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/salesforce.png", size: 1116, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/salesforce.png", size: 1116, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19119,7 +19032,7 @@ func bindataPublicSectionsSalesforce2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/salesforce@2x.png", size: 2630, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/salesforce@2x.png", size: 2630, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19139,7 +19052,7 @@ func bindataPublicSectionsStripePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/stripe.png", size: 1487, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/stripe.png", size: 1487, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19159,7 +19072,7 @@ func bindataPublicSectionsStripe2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/stripe@2x.png", size: 4523, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/stripe@2x.png", size: 4523, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19179,7 +19092,7 @@ func bindataPublicSectionsSuggestPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/suggest.png", size: 578, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/suggest.png", size: 578, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19199,7 +19112,7 @@ func bindataPublicSectionsSuggest2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/suggest@2x.png", size: 1096, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/suggest@2x.png", size: 1096, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19219,7 +19132,7 @@ func bindataPublicSectionsTablePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/table.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/table.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19239,7 +19152,7 @@ func bindataPublicSectionsTable2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/table@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/table@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19259,7 +19172,7 @@ func bindataPublicSectionsTabularPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/tabular.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/tabular.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19279,7 +19192,7 @@ func bindataPublicSectionsTabular2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/tabular@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/tabular@2x.png", size: 487, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19299,7 +19212,7 @@ func bindataPublicSectionsTrelloPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/trello.png", size: 718, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/trello.png", size: 718, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19319,7 +19232,7 @@ func bindataPublicSectionsTrello2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/trello@2x.png", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/trello@2x.png", size: 1161, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19339,7 +19252,7 @@ func bindataPublicSectionsWysiwygPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/wysiwyg.png", size: 562, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/wysiwyg.png", size: 562, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19359,7 +19272,7 @@ func bindataPublicSectionsWysiwyg2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/wysiwyg@2x.png", size: 941, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/wysiwyg@2x.png", size: 941, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19379,7 +19292,7 @@ func bindataPublicSectionsZendeskPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/zendesk.png", size: 1720, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/zendesk.png", size: 1720, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19399,27 +19312,7 @@ func bindataPublicSectionsZendesk2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/sections/zendesk@2x.png", size: 5196, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicTinymceDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xd8\x3f\x8a\xc2\x40\x1c\xc5\xf1\xf7\x9b\xcd\xc2\xc0\x36\x53\x6e\x39\xcd\x1e\x60\x6f\x30\x84\x78\x02\x2f\x20\x9a\x46\x0c\xa6\x08\xf6\x39\xba\xc4\x79\xe0\x48\xd0\x4e\x8c\xf2\x3e\xcd\x57\xcc\x44\xc5\x62\xfe\x04\x80\xd5\xa7\xf6\x1f\x08\x00\x3c\x72\xf1\x87\x39\x03\xf0\x8d\x01\x07\xec\x71\xc4\xd0\x0e\xbb\x6e\xdb\xf7\xdd\xf4\x36\x5c\x31\xc6\x2e\x9f\x71\x7b\x5d\x44\x44\x44\x96\x87\x8b\xb4\xff\x79\xf5\x0f\x11\x91\xc5\x99\xe6\x87\xc8\x26\x76\xcc\x35\x5e\x77\x6c\x55\xdc\x13\xd8\xc8\x26\x76\xcc\x35\x8e\x73\x6c\xc5\x7a\x36\xb0\x91\x4d\xec\x98\xcb\x49\xcb\x78\xf8\x30\x7e\xb3\x79\x36\xb0\x91\x4d\xcf\xf9\x6f\x44\xde\xdd\x57\x4e\x98\xd6\xff\xd5\x9d\xf3\xbf\x88\x7c\x36\xab\x9a\x75\x53\x5f\x0f\x04\xf3\x01\x00\x36\xc5\xeb\x47\x9b\x00\x97\x1f\x28\xfe\x16\xf7\x6a\x23\x20\xb2\x30\xe7\x00\x00\x00\xff\xff\xe7\x67\x99\xc9\x04\x18\x00\x00") - -func bindataPublicTinymceDs_storeBytes() ([]byte, error) { - return bindataRead( - _bindataPublicTinymceDs_store, - "bindata/public/tinymce/.DS_Store", - ) -} - -func bindataPublicTinymceDs_store() (*asset, error) { - bytes, err := bindataPublicTinymceDs_storeBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/tinymce/.DS_Store", size: 6148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/sections/zendesk@2x.png", size: 5196, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19439,7 +19332,7 @@ func bindataPublicTinymceLangsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/langs/readme.md", size: 151, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/langs/readme.md", size: 151, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19459,7 +19352,7 @@ func bindataPublicTinymceLicenseTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/license.txt", size: 26441, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/license.txt", size: 26441, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19479,7 +19372,7 @@ func bindataPublicTinymcePluginsAdvlistPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/advlist/plugin.min.js", size: 3640, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/advlist/plugin.min.js", size: 3640, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19499,7 +19392,7 @@ func bindataPublicTinymcePluginsAnchorPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/anchor/plugin.min.js", size: 1788, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/anchor/plugin.min.js", size: 1788, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19519,7 +19412,7 @@ func bindataPublicTinymcePluginsAutolinkPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autolink/plugin.min.js", size: 2145, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autolink/plugin.min.js", size: 2145, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19539,7 +19432,7 @@ func bindataPublicTinymcePluginsAutoresizePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autoresize/plugin.min.js", size: 2121, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autoresize/plugin.min.js", size: 2121, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19559,7 +19452,7 @@ func bindataPublicTinymcePluginsAutosavePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autosave/plugin.min.js", size: 3184, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/autosave/plugin.min.js", size: 3184, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19579,7 +19472,7 @@ func bindataPublicTinymcePluginsBbcodePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/bbcode/plugin.min.js", size: 2811, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/bbcode/plugin.min.js", size: 2811, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19599,7 +19492,7 @@ func bindataPublicTinymcePluginsCharmapPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/charmap/plugin.min.js", size: 11584, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/charmap/plugin.min.js", size: 11584, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19619,7 +19512,7 @@ func bindataPublicTinymcePluginsCodePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/code/plugin.min.js", size: 910, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/code/plugin.min.js", size: 910, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19639,7 +19532,7 @@ func bindataPublicTinymcePluginsCodesampleCssPrismCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/css/prism.css", size: 4970, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/css/prism.css", size: 4970, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19659,7 +19552,7 @@ func bindataPublicTinymcePluginsCodesamplePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/plugin.min.js", size: 20639, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/codesample/plugin.min.js", size: 20639, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19679,7 +19572,7 @@ func bindataPublicTinymcePluginsColorpickerPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/colorpicker/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/colorpicker/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19699,7 +19592,7 @@ func bindataPublicTinymcePluginsContextmenuPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/contextmenu/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/contextmenu/plugin.min.js", size: 240, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19719,7 +19612,7 @@ func bindataPublicTinymcePluginsDirectionalityPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/directionality/plugin.min.js", size: 3903, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/directionality/plugin.min.js", size: 3903, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19739,7 +19632,7 @@ func bindataPublicTinymcePluginsEmoticonsJsEmojisJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.js", size: 175108, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.js", size: 175108, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19759,7 +19652,7 @@ func bindataPublicTinymcePluginsEmoticonsJsEmojisMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.min.js", size: 175108, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/js/emojis.min.js", size: 175108, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19779,7 +19672,7 @@ func bindataPublicTinymcePluginsEmoticonsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/plugin.min.js", size: 6553, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/emoticons/plugin.min.js", size: 6553, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19799,7 +19692,7 @@ func bindataPublicTinymcePluginsFullpagePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullpage/plugin.min.js", size: 7843, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullpage/plugin.min.js", size: 7843, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19819,7 +19712,7 @@ func bindataPublicTinymcePluginsFullscreenPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullscreen/plugin.min.js", size: 13439, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/fullscreen/plugin.min.js", size: 13439, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19839,7 +19732,7 @@ func bindataPublicTinymcePluginsHelpPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/help/plugin.min.js", size: 14129, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/help/plugin.min.js", size: 14129, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19859,7 +19752,7 @@ func bindataPublicTinymcePluginsHrPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/hr/plugin.min.js", size: 533, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/hr/plugin.min.js", size: 533, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19879,7 +19772,7 @@ func bindataPublicTinymcePluginsImagePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/image/plugin.min.js", size: 29164, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/image/plugin.min.js", size: 29164, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19899,7 +19792,7 @@ func bindataPublicTinymcePluginsImagetoolsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/imagetools/plugin.min.js", size: 21079, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/imagetools/plugin.min.js", size: 21079, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19919,7 +19812,7 @@ func bindataPublicTinymcePluginsImportcssPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/importcss/plugin.min.js", size: 4668, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/importcss/plugin.min.js", size: 4668, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19939,7 +19832,7 @@ func bindataPublicTinymcePluginsInsertdatetimePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/insertdatetime/plugin.min.js", size: 2879, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/insertdatetime/plugin.min.js", size: 2879, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19959,7 +19852,7 @@ func bindataPublicTinymcePluginsLegacyoutputPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/legacyoutput/plugin.min.js", size: 2647, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/legacyoutput/plugin.min.js", size: 2647, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19979,7 +19872,7 @@ func bindataPublicTinymcePluginsLinkPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/link/plugin.min.js", size: 22077, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/link/plugin.min.js", size: 22077, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -19999,7 +19892,7 @@ func bindataPublicTinymcePluginsListsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/lists/plugin.min.js", size: 27210, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/lists/plugin.min.js", size: 27210, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20019,7 +19912,7 @@ func bindataPublicTinymcePluginsMediaPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/media/plugin.min.js", size: 17511, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/media/plugin.min.js", size: 17511, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20039,7 +19932,7 @@ func bindataPublicTinymcePluginsNonbreakingPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/nonbreaking/plugin.min.js", size: 1265, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/nonbreaking/plugin.min.js", size: 1265, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20059,7 +19952,7 @@ func bindataPublicTinymcePluginsNoneditablePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/noneditable/plugin.min.js", size: 1530, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/noneditable/plugin.min.js", size: 1530, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20079,7 +19972,7 @@ func bindataPublicTinymcePluginsPagebreakPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/pagebreak/plugin.min.js", size: 1490, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/pagebreak/plugin.min.js", size: 1490, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20099,7 +19992,7 @@ func bindataPublicTinymcePluginsPastePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/paste/plugin.min.js", size: 30914, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/paste/plugin.min.js", size: 30914, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20119,7 +20012,7 @@ func bindataPublicTinymcePluginsPreviewPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/preview/plugin.min.js", size: 1883, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/preview/plugin.min.js", size: 1883, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20139,7 +20032,7 @@ func bindataPublicTinymcePluginsPrintPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/print/plugin.min.js", size: 581, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/print/plugin.min.js", size: 581, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20159,7 +20052,7 @@ func bindataPublicTinymcePluginsQuickbarsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/quickbars/plugin.min.js", size: 10294, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/quickbars/plugin.min.js", size: 10294, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20179,7 +20072,7 @@ func bindataPublicTinymcePluginsSavePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/save/plugin.min.js", size: 1508, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/save/plugin.min.js", size: 1508, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20199,7 +20092,7 @@ func bindataPublicTinymcePluginsSearchreplacePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/searchreplace/plugin.min.js", size: 9861, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/searchreplace/plugin.min.js", size: 9861, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20219,7 +20112,7 @@ func bindataPublicTinymcePluginsSpellcheckerPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/spellchecker/plugin.min.js", size: 9954, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/spellchecker/plugin.min.js", size: 9954, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20239,7 +20132,7 @@ func bindataPublicTinymcePluginsTabfocusPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/tabfocus/plugin.min.js", size: 1634, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/tabfocus/plugin.min.js", size: 1634, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20259,7 +20152,7 @@ func bindataPublicTinymcePluginsTablePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/table/plugin.min.js", size: 122072, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/table/plugin.min.js", size: 122072, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20279,7 +20172,7 @@ func bindataPublicTinymcePluginsTemplatePluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/template/plugin.min.js", size: 7701, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/template/plugin.min.js", size: 7701, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20299,7 +20192,7 @@ func bindataPublicTinymcePluginsTextcolorPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textcolor/plugin.min.js", size: 236, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textcolor/plugin.min.js", size: 236, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20319,7 +20212,7 @@ func bindataPublicTinymcePluginsTextpatternPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textpattern/plugin.min.js", size: 18230, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/textpattern/plugin.min.js", size: 18230, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20339,7 +20232,7 @@ func bindataPublicTinymcePluginsTocPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/toc/plugin.min.js", size: 3260, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/toc/plugin.min.js", size: 3260, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20359,7 +20252,7 @@ func bindataPublicTinymcePluginsVisualblocksPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualblocks/plugin.min.js", size: 1338, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualblocks/plugin.min.js", size: 1338, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20379,7 +20272,7 @@ func bindataPublicTinymcePluginsVisualcharsPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualchars/plugin.min.js", size: 6567, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/visualchars/plugin.min.js", size: 6567, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20399,27 +20292,7 @@ func bindataPublicTinymcePluginsWordcountPluginMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/plugins/wordcount/plugin.min.js", size: 9050, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicTinymceSkinsDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xd8\x3f\x0a\xc2\x30\x1c\xc5\xf1\xf7\x8b\x1d\x02\x2e\x19\x1d\xb3\x78\x00\x6f\x10\x4a\x3d\x81\x17\x10\xed\x22\x14\x3a\x48\xf7\x1e\x5d\x4a\x1e\x34\x58\x74\x13\xab\xbc\xcf\xf2\x15\x92\xaa\x38\xe4\x8f\x00\xac\x1e\xda\x03\x10\x00\x78\xe4\x62\x8f\x25\x03\xe0\x30\xe0\xd6\xde\xaf\xdd\xa5\xef\x3b\x9b\xc7\x5c\x31\xc7\xa6\xf7\x78\x1a\x17\x11\x11\x91\xf5\xe1\x56\xed\xb7\xdf\xfe\x22\x22\xb2\x3a\xd3\xfa\x10\xd9\xc4\x8e\xb9\xc6\x71\xc7\x56\xc5\x33\x81\x8d\x6c\x62\xc7\x5c\xe3\x3c\xc7\x56\xac\x67\x03\x1b\xd9\xc4\x8e\xb9\x5c\xb4\x8c\x97\x0f\xe3\x27\x9b\x67\x03\x1b\xd9\xf4\x99\xdf\x46\xe4\xd7\x6d\x72\xc2\xb4\xff\x1f\x5f\xdc\xff\x45\xe4\xbf\x59\xd5\x9c\x9a\x7a\xbe\x10\x2c\x27\x00\x38\x17\xaf\xdf\x1d\x02\x5c\xfe\x43\x71\x57\x3c\xab\x83\x80\xc8\xca\x3c\x02\x00\x00\xff\xff\x09\xce\x35\xad\x04\x18\x00\x00") - -func bindataPublicTinymceSkinsDs_storeBytes() ([]byte, error) { - return bindataRead( - _bindataPublicTinymceSkinsDs_store, - "bindata/public/tinymce/skins/.DS_Store", - ) -} - -func bindataPublicTinymceSkinsDs_store() (*asset, error) { - bytes, err := bindataPublicTinymceSkinsDs_storeBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/tinymce/skins/.DS_Store", size: 6148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/plugins/wordcount/plugin.min.js", size: 9050, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20439,7 +20312,7 @@ func bindataPublicTinymceSkinsContentDarkContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/dark/content.min.css", size: 1082, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/dark/content.min.css", size: 1082, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20459,7 +20332,7 @@ func bindataPublicTinymceSkinsContentDefaultContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/default/content.min.css", size: 957, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/default/content.min.css", size: 957, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20479,7 +20352,7 @@ func bindataPublicTinymceSkinsContentDocumentContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/document/content.min.css", size: 1040, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/document/content.min.css", size: 1040, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20499,27 +20372,7 @@ func bindataPublicTinymceSkinsContentWriterContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/writer/content.min.css", size: 978, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _bindataPublicTinymceSkinsUiDs_store = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x98\xc1\x4e\xab\x40\x14\x40\xef\x50\xfa\x1e\xcd\xcb\x8b\x2c\x8c\xba\x64\xe3\xae\x8b\xb2\xb0\xd5\x85\x09\xc1\xba\x70\x67\x82\xd1\x45\x35\x2d\x13\x88\x25\x41\xa6\x01\x2a\x2a\x62\xfa\x17\xfa\x47\x7e\x82\xbf\x63\xe8\x5c\x0d\xad\xd5\x9d\xb1\xea\x3d\x49\x73\xa6\x0c\x33\x70\x19\x32\xdc\x19\x00\x60\xf6\xd8\x33\x01\x74\x00\xd0\x40\x5a\x69\xc0\x42\x34\xfc\xbd\x41\xa9\x98\x4d\xfb\xf0\x79\x96\x8c\x78\x28\xf8\xe2\x9e\x88\xa5\xa3\x1c\xbb\x3a\x08\xb8\x82\x00\xbc\x99\xf1\x7b\xe4\xa3\x30\x48\xd2\x56\xeb\x89\x29\x35\xb5\xfe\xe7\xaf\x56\xf2\x5f\x3b\x73\x86\x22\x73\x52\x37\x1d\x27\xb6\x1b\xf7\xca\x7f\x87\x6e\x3a\xe4\x58\x3e\x12\x22\x7c\x2d\xbb\xfc\x38\xf0\xb3\xbe\xbe\xba\x27\xa2\xd4\x0d\x22\x3f\x9e\x36\x0e\x3c\x9f\xbb\xf1\xe9\x49\x10\x79\x22\xb3\xc5\x38\xf2\x92\x5e\xa5\xa2\x51\xd2\xd7\xd7\xf2\xdc\xdc\x6a\x1a\xed\x4e\xd1\x34\xf2\x1d\x73\xbb\x69\xb4\x5b\x9d\xa2\x68\x68\xeb\x9b\xe6\xee\xc1\xe0\xe2\xfa\x26\xbf\x2d\xee\xee\x65\x1c\x8c\x61\x40\x2b\x73\x01\x3e\xcc\x06\x78\xe9\xc4\x51\x28\xa2\x73\xf9\xca\x12\x04\x41\xfc\x4e\x70\x02\xd4\xfe\x7d\xf5\x8d\x10\x04\xb1\x74\x94\xf3\x83\x81\xb6\xd0\x13\x69\x86\xf5\x0a\x5a\xad\xb4\xd1\xd1\x06\xda\x42\x4f\xa4\x19\x9e\xa7\xa0\x55\xb4\x86\xd6\xd1\x06\xda\x42\x4f\xa4\x71\xd2\x62\xb8\xf8\x60\x78\x65\x86\x2b\x14\xa6\xa3\x0d\xb4\xf5\x39\xcf\x86\x20\xbe\x3b\x35\x29\xbd\xfc\xfe\xef\xbf\xbf\xfe\x27\x08\xe2\x07\xc3\xd4\xae\xd3\xb5\x3f\xd8\x11\x51\x30\x11\x18\xbc\x34\x98\x4b\x04\xa0\x92\x04\x28\x72\xb3\x70\xa3\x72\x9c\x12\x01\x82\x58\x32\x9e\x03\x00\x00\xff\xff\x6a\xb0\x2c\x2b\x04\x18\x00\x00") - -func bindataPublicTinymceSkinsUiDs_storeBytes() ([]byte, error) { - return bindataRead( - _bindataPublicTinymceSkinsUiDs_store, - "bindata/public/tinymce/skins/ui/.DS_Store", - ) -} - -func bindataPublicTinymceSkinsUiDs_store() (*asset, error) { - bytes, err := bindataPublicTinymceSkinsUiDs_storeBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/.DS_Store", size: 6148, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/content/writer/content.min.css", size: 978, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20539,7 +20392,7 @@ func bindataPublicTinymceSkinsUiOxideContentInlineMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.inline.min.css", size: 17798, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.inline.min.css", size: 17798, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20559,7 +20412,7 @@ func bindataPublicTinymceSkinsUiOxideContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.min.css", size: 17883, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.min.css", size: 17883, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20579,7 +20432,7 @@ func bindataPublicTinymceSkinsUiOxideContentMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20599,7 +20452,7 @@ func bindataPublicTinymceSkinsUiOxideFontsTinymceMobileWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20619,7 +20472,7 @@ func bindataPublicTinymceSkinsUiOxideSkinMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.min.css", size: 54953, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.min.css", size: 54953, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20639,7 +20492,7 @@ func bindataPublicTinymceSkinsUiOxideSkinMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.mobile.min.css", size: 21004, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide/skin.mobile.min.css", size: 21004, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20659,7 +20512,7 @@ func bindataPublicTinymceSkinsUiOxideDarkContentInlineMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.inline.min.css", size: 17824, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.inline.min.css", size: 17824, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20679,7 +20532,7 @@ func bindataPublicTinymceSkinsUiOxideDarkContentMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.min.css", size: 17510, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.min.css", size: 17510, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20699,7 +20552,7 @@ func bindataPublicTinymceSkinsUiOxideDarkContentMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css", size: 544, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20719,7 +20572,7 @@ func bindataPublicTinymceSkinsUiOxideDarkFontsTinymceMobileWoff() (*asset, error return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff", size: 4624, mode: os.FileMode(493), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20739,7 +20592,7 @@ func bindataPublicTinymceSkinsUiOxideDarkSkinMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.min.css", size: 54813, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.min.css", size: 54813, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20759,7 +20612,7 @@ func bindataPublicTinymceSkinsUiOxideDarkSkinMobileMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css", size: 21004, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css", size: 21004, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20779,7 +20632,7 @@ func bindataPublicTinymceThemesMobileThemeMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/themes/mobile/theme.min.js", size: 176357, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/themes/mobile/theme.min.js", size: 176357, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20799,7 +20652,7 @@ func bindataPublicTinymceThemesSilverThemeMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/themes/silver/theme.min.js", size: 398859, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/themes/silver/theme.min.js", size: 398859, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20819,7 +20672,7 @@ func bindataPublicTinymceTinymceMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/public/tinymce/tinymce.min.js", size: 435357, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/public/tinymce/tinymce.min.js", size: 435357, mode: os.FileMode(420), modTime: time.Unix(1590060362, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20839,7 +20692,7 @@ func bindataRobotsTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/robots.txt", size: 51, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/robots.txt", size: 51, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20859,7 +20712,7 @@ func bindataScriptsMysqlDb_00000Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00000.sql", size: 10782, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00000.sql", size: 10782, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20879,7 +20732,7 @@ func bindataScriptsMysqlDb_00001Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00001.sql", size: 692, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00001.sql", size: 692, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20899,7 +20752,7 @@ func bindataScriptsMysqlDb_00002Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00002.sql", size: 548, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00002.sql", size: 548, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20919,7 +20772,7 @@ func bindataScriptsMysqlDb_00003Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00003.sql", size: 103, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00003.sql", size: 103, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20939,7 +20792,7 @@ func bindataScriptsMysqlDb_00004Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00004.sql", size: 824, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00004.sql", size: 824, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20959,7 +20812,7 @@ func bindataScriptsMysqlDb_00005Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00005.sql", size: 441, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00005.sql", size: 441, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20979,7 +20832,7 @@ func bindataScriptsMysqlDb_00006Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00006.sql", size: 634, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00006.sql", size: 634, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -20999,7 +20852,7 @@ func bindataScriptsMysqlDb_00007Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00007.sql", size: 115, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00007.sql", size: 115, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21019,7 +20872,7 @@ func bindataScriptsMysqlDb_00008Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00008.sql", size: 711, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00008.sql", size: 711, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21039,7 +20892,7 @@ func bindataScriptsMysqlDb_00009Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00009.sql", size: 1262, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00009.sql", size: 1262, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21059,7 +20912,7 @@ func bindataScriptsMysqlDb_00010Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00010.sql", size: 4289, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00010.sql", size: 4289, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21079,7 +20932,7 @@ func bindataScriptsMysqlDb_00011Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00011.sql", size: 218, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00011.sql", size: 218, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21099,7 +20952,7 @@ func bindataScriptsMysqlDb_00012Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00012.sql", size: 128, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00012.sql", size: 128, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21119,7 +20972,7 @@ func bindataScriptsMysqlDb_00013Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00013.sql", size: 632, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00013.sql", size: 632, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21139,7 +20992,7 @@ func bindataScriptsMysqlDb_00014Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00014.sql", size: 144, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00014.sql", size: 144, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21159,7 +21012,7 @@ func bindataScriptsMysqlDb_00015Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00015.sql", size: 3905, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00015.sql", size: 3905, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21179,7 +21032,7 @@ func bindataScriptsMysqlDb_00016Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00016.sql", size: 6528, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00016.sql", size: 6528, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21199,7 +21052,7 @@ func bindataScriptsMysqlDb_00017Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00017.sql", size: 1543, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00017.sql", size: 1543, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21219,7 +21072,7 @@ func bindataScriptsMysqlDb_00018Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00018.sql", size: 320, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00018.sql", size: 320, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21239,7 +21092,7 @@ func bindataScriptsMysqlDb_00019Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00019.sql", size: 1432, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00019.sql", size: 1432, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21259,7 +21112,7 @@ func bindataScriptsMysqlDb_00020Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00020.sql", size: 605, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00020.sql", size: 605, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21279,7 +21132,7 @@ func bindataScriptsMysqlDb_00021Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00021.sql", size: 929, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00021.sql", size: 929, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21299,7 +21152,7 @@ func bindataScriptsMysqlDb_00022Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00022.sql", size: 158, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00022.sql", size: 158, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21319,7 +21172,7 @@ func bindataScriptsMysqlDb_00023Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00023.sql", size: 126, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00023.sql", size: 126, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21339,7 +21192,7 @@ func bindataScriptsMysqlDb_00024Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00024.sql", size: 346, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00024.sql", size: 346, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21359,7 +21212,7 @@ func bindataScriptsMysqlDb_00025Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00025.sql", size: 16139, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00025.sql", size: 16139, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21379,7 +21232,7 @@ func bindataScriptsMysqlDb_00026Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00026.sql", size: 133, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00026.sql", size: 133, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21399,7 +21252,7 @@ func bindataScriptsMysqlDb_00027Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00027.sql", size: 1901, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00027.sql", size: 1901, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21419,7 +21272,7 @@ func bindataScriptsMysqlDb_00028Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00028.sql", size: 145, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00028.sql", size: 145, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21439,7 +21292,7 @@ func bindataScriptsMysqlDb_00029Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00029.sql", size: 182, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00029.sql", size: 182, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21459,7 +21312,7 @@ func bindataScriptsMysqlDb_00030Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00030.sql", size: 332, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00030.sql", size: 332, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21479,7 +21332,7 @@ func bindataScriptsMysqlDb_00031Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00031.sql", size: 185, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00031.sql", size: 185, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21499,7 +21352,7 @@ func bindataScriptsMysqlDb_00032Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00032.sql", size: 390, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00032.sql", size: 390, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21519,7 +21372,7 @@ func bindataScriptsMysqlDb_00033Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/mysql/db_00033.sql", size: 156, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/mysql/db_00033.sql", size: 156, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21539,7 +21392,7 @@ func bindataScriptsPostgresqlDb_00001Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00001.sql", size: 21353, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00001.sql", size: 21353, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21559,7 +21412,7 @@ func bindataScriptsPostgresqlDb_00002Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00002.sql", size: 110, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00002.sql", size: 110, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21579,7 +21432,7 @@ func bindataScriptsPostgresqlDb_00003Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00003.sql", size: 1637, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00003.sql", size: 1637, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21599,7 +21452,7 @@ func bindataScriptsPostgresqlDb_00004Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00004.sql", size: 134, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00004.sql", size: 134, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21619,7 +21472,7 @@ func bindataScriptsPostgresqlDb_00005Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00005.sql", size: 165, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00005.sql", size: 165, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21639,7 +21492,7 @@ func bindataScriptsPostgresqlDb_00006Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00006.sql", size: 298, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00006.sql", size: 298, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21659,7 +21512,7 @@ func bindataScriptsPostgresqlDb_00007Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00007.sql", size: 187, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00007.sql", size: 187, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21679,7 +21532,7 @@ func bindataScriptsPostgresqlDb_00008Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00008.sql", size: 344, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00008.sql", size: 344, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21699,7 +21552,7 @@ func bindataScriptsPostgresqlDb_00009Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00009.sql", size: 134, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/postgresql/db_00009.sql", size: 134, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21719,7 +21572,7 @@ func bindataScriptsSqlserverDb_00001Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00001.sql", size: 23995, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00001.sql", size: 23995, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21739,7 +21592,7 @@ func bindataScriptsSqlserverDb_00002Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00002.sql", size: 170, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00002.sql", size: 170, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21759,7 +21612,7 @@ func bindataScriptsSqlserverDb_00003Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00003.sql", size: 308, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00003.sql", size: 308, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21779,7 +21632,7 @@ func bindataScriptsSqlserverDb_00004Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00004.sql", size: 588, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00004.sql", size: 588, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21799,7 +21652,7 @@ func bindataScriptsSqlserverDb_00005Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00005.sql", size: 324, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00005.sql", size: 324, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21819,7 +21672,7 @@ func bindataScriptsSqlserverDb_00006Sql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00006.sql", size: 126, mode: os.FileMode(420), modTime: time.Unix(1581781081, 0)} + info := bindataFileInfo{name: "bindata/scripts/sqlserver/db_00006.sql", size: 126, mode: os.FileMode(420), modTime: time.Unix(1590060363, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -21900,12 +21753,11 @@ var _bindata = map[string]func() (*asset, error){ "bindata/onboard/dmz_section_meta.json": bindataOnboardDmz_section_metaJson, "bindata/onboard/dmz_space.json": bindataOnboardDmz_spaceJson, "bindata/onboard/dmz_space_label.json": bindataOnboardDmz_space_labelJson, - "bindata/public/assets/.DS_Store": bindataPublicAssetsDs_store, - "bindata/public/assets/assetMap-008e1502d1228b4a70335f8af41f1a35.json": bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35Json, + "bindata/public/assets/assetMap-a45900b8f69eb159feb8ca100a41909d.json": bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJson, "bindata/public/assets/assetMap-cd33192964e8c20af9391de38dbf449b.json": bindataPublicAssetsAssetmapCd33192964e8c20af9391de38dbf449bJson, "bindata/public/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": bindataPublicAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, "bindata/public/assets/documize-4ee544cff593a82f6c42f144efb818da.css": bindataPublicAssetsDocumize4ee544cff593a82f6c42f144efb818daCss, - "bindata/public/assets/documize-9296c7094ce7ee195933e0cccd1beff3.js": bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3Js, + "bindata/public/assets/documize-59e28465e64f60780e745ce5f305c872.js": bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872Js, "bindata/public/assets/font/MaterialIcons-Regular.eot": bindataPublicAssetsFontMaterialiconsRegularEot, "bindata/public/assets/font/MaterialIcons-Regular.ttf": bindataPublicAssetsFontMaterialiconsRegularTtf, "bindata/public/assets/font/MaterialIcons-Regular.woff": bindataPublicAssetsFontMaterialiconsRegularWoff, @@ -21984,8 +21836,6 @@ var _bindata = map[string]func() (*asset, error){ "bindata/public/assets/theme-sunflower-41d93b240ec10c3f8357bcb205c7ab80.css": bindataPublicAssetsThemeSunflower41d93b240ec10c3f8357bcb205c7ab80Css, "bindata/public/assets/vendor-b2be9a3c3aa09c32b38be5ba5d34b312.js": bindataPublicAssetsVendorB2be9a3c3aa09c32b38be5ba5d34b312Js, "bindata/public/assets/vendor-edb876ab3653e1c4ec07d79685459500.css": bindataPublicAssetsVendorEdb876ab3653e1c4ec07d79685459500Css, - "bindata/public/codemirror/.DS_Store": bindataPublicCodemirrorDs_store, - "bindata/public/codemirror/addon/.DS_Store": bindataPublicCodemirrorAddonDs_store, "bindata/public/codemirror/addon/comment/comment.js": bindataPublicCodemirrorAddonCommentCommentJs, "bindata/public/codemirror/addon/comment/continuecomment.js": bindataPublicCodemirrorAddonCommentContinuecommentJs, "bindata/public/codemirror/addon/dialog/dialog.css": bindataPublicCodemirrorAddonDialogDialogCss, @@ -22343,7 +22193,6 @@ var _bindata = map[string]func() (*asset, error){ "bindata/public/codemirror/mode/z80/z80.js": bindataPublicCodemirrorModeZ80Z80Js, "bindata/public/favicon.ico": bindataPublicFaviconIco, "bindata/public/manifest.json": bindataPublicManifestJson, - "bindata/public/pdfjs/.DS_Store": bindataPublicPdfjsDs_store, "bindata/public/pdfjs/LICENSE": bindataPublicPdfjsLicense, "bindata/public/pdfjs/build/pdf.js": bindataPublicPdfjsBuildPdfJs, "bindata/public/pdfjs/build/pdf.worker.js": bindataPublicPdfjsBuildPdfWorkerJs, @@ -22791,7 +22640,6 @@ var _bindata = map[string]func() (*asset, error){ "bindata/public/sections/wysiwyg@2x.png": bindataPublicSectionsWysiwyg2xPng, "bindata/public/sections/zendesk.png": bindataPublicSectionsZendeskPng, "bindata/public/sections/zendesk@2x.png": bindataPublicSectionsZendesk2xPng, - "bindata/public/tinymce/.DS_Store": bindataPublicTinymceDs_store, "bindata/public/tinymce/langs/readme.md": bindataPublicTinymceLangsReadmeMd, "bindata/public/tinymce/license.txt": bindataPublicTinymceLicenseTxt, "bindata/public/tinymce/plugins/advlist/plugin.min.js": bindataPublicTinymcePluginsAdvlistPluginMinJs, @@ -22841,12 +22689,10 @@ var _bindata = map[string]func() (*asset, error){ "bindata/public/tinymce/plugins/visualblocks/plugin.min.js": bindataPublicTinymcePluginsVisualblocksPluginMinJs, "bindata/public/tinymce/plugins/visualchars/plugin.min.js": bindataPublicTinymcePluginsVisualcharsPluginMinJs, "bindata/public/tinymce/plugins/wordcount/plugin.min.js": bindataPublicTinymcePluginsWordcountPluginMinJs, - "bindata/public/tinymce/skins/.DS_Store": bindataPublicTinymceSkinsDs_store, "bindata/public/tinymce/skins/content/dark/content.min.css": bindataPublicTinymceSkinsContentDarkContentMinCss, "bindata/public/tinymce/skins/content/default/content.min.css": bindataPublicTinymceSkinsContentDefaultContentMinCss, "bindata/public/tinymce/skins/content/document/content.min.css": bindataPublicTinymceSkinsContentDocumentContentMinCss, "bindata/public/tinymce/skins/content/writer/content.min.css": bindataPublicTinymceSkinsContentWriterContentMinCss, - "bindata/public/tinymce/skins/ui/.DS_Store": bindataPublicTinymceSkinsUiDs_store, "bindata/public/tinymce/skins/ui/oxide/content.inline.min.css": bindataPublicTinymceSkinsUiOxideContentInlineMinCss, "bindata/public/tinymce/skins/ui/oxide/content.min.css": bindataPublicTinymceSkinsUiOxideContentMinCss, "bindata/public/tinymce/skins/ui/oxide/content.mobile.min.css": bindataPublicTinymceSkinsUiOxideContentMobileMinCss, @@ -22985,12 +22831,11 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, "public": &bintree{nil, map[string]*bintree{ "assets": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicAssetsDs_store, map[string]*bintree{}}, - "assetMap-008e1502d1228b4a70335f8af41f1a35.json": &bintree{bindataPublicAssetsAssetmap008e1502d1228b4a70335f8af41f1a35Json, map[string]*bintree{}}, + "assetMap-a45900b8f69eb159feb8ca100a41909d.json": &bintree{bindataPublicAssetsAssetmapA45900b8f69eb159feb8ca100a41909dJson, map[string]*bintree{}}, "assetMap-cd33192964e8c20af9391de38dbf449b.json": &bintree{bindataPublicAssetsAssetmapCd33192964e8c20af9391de38dbf449bJson, map[string]*bintree{}}, "auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": &bintree{bindataPublicAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, map[string]*bintree{}}, "documize-4ee544cff593a82f6c42f144efb818da.css": &bintree{bindataPublicAssetsDocumize4ee544cff593a82f6c42f144efb818daCss, map[string]*bintree{}}, - "documize-9296c7094ce7ee195933e0cccd1beff3.js": &bintree{bindataPublicAssetsDocumize9296c7094ce7ee195933e0cccd1beff3Js, map[string]*bintree{}}, + "documize-59e28465e64f60780e745ce5f305c872.js": &bintree{bindataPublicAssetsDocumize59e28465e64f60780e745ce5f305c872Js, map[string]*bintree{}}, "font": &bintree{nil, map[string]*bintree{ "MaterialIcons-Regular.eot": &bintree{bindataPublicAssetsFontMaterialiconsRegularEot, map[string]*bintree{}}, "MaterialIcons-Regular.ttf": &bintree{bindataPublicAssetsFontMaterialiconsRegularTtf, map[string]*bintree{}}, @@ -23083,9 +22928,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "vendor-edb876ab3653e1c4ec07d79685459500.css": &bintree{bindataPublicAssetsVendorEdb876ab3653e1c4ec07d79685459500Css, map[string]*bintree{}}, }}, "codemirror": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicCodemirrorDs_store, map[string]*bintree{}}, "addon": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicCodemirrorAddonDs_store, map[string]*bintree{}}, "comment": &bintree{nil, map[string]*bintree{ "comment.js": &bintree{bindataPublicCodemirrorAddonCommentCommentJs, map[string]*bintree{}}, "continuecomment.js": &bintree{bindataPublicCodemirrorAddonCommentContinuecommentJs, map[string]*bintree{}}, @@ -23724,7 +23567,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ "favicon.ico": &bintree{bindataPublicFaviconIco, map[string]*bintree{}}, "manifest.json": &bintree{bindataPublicManifestJson, map[string]*bintree{}}, "pdfjs": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicPdfjsDs_store, map[string]*bintree{}}, "LICENSE": &bintree{bindataPublicPdfjsLicense, map[string]*bintree{}}, "build": &bintree{nil, map[string]*bintree{ "pdf.js": &bintree{bindataPublicPdfjsBuildPdfJs, map[string]*bintree{}}, @@ -24434,7 +24276,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ "zendesk@2x.png": &bintree{bindataPublicSectionsZendesk2xPng, map[string]*bintree{}}, }}, "tinymce": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicTinymceDs_store, map[string]*bintree{}}, "langs": &bintree{nil, map[string]*bintree{ "readme.md": &bintree{bindataPublicTinymceLangsReadmeMd, map[string]*bintree{}}, }}, @@ -24581,7 +24422,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, }}, "skins": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicTinymceSkinsDs_store, map[string]*bintree{}}, "content": &bintree{nil, map[string]*bintree{ "dark": &bintree{nil, map[string]*bintree{ "content.min.css": &bintree{bindataPublicTinymceSkinsContentDarkContentMinCss, map[string]*bintree{}}, @@ -24597,7 +24437,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, }}, "ui": &bintree{nil, map[string]*bintree{ - ".DS_Store": &bintree{bindataPublicTinymceSkinsUiDs_store, map[string]*bintree{}}, "oxide": &bintree{nil, map[string]*bintree{ "content.inline.min.css": &bintree{bindataPublicTinymceSkinsUiOxideContentInlineMinCss, map[string]*bintree{}}, "content.min.css": &bintree{bindataPublicTinymceSkinsUiOxideContentMinCss, map[string]*bintree{}}, diff --git a/go.mod b/go.mod index c9584a2e..d089a735 100644 --- a/go.mod +++ b/go.mod @@ -3,36 +3,41 @@ module github.com/documize/community go 1.13 require ( + cloud.google.com/go v0.57.0 // indirect github.com/BurntSushi/toml v0.3.1 - github.com/andygrunwald/go-jira v1.10.0 - github.com/codegangsta/negroni v0.3.0 - github.com/denisenkom/go-mssqldb v0.0.0-20190806190131-db2462fef53b - github.com/dgrijalva/jwt-go v3.1.0+incompatible + github.com/andygrunwald/go-jira v1.12.0 + github.com/apache/thrift v0.12.0 // indirect + github.com/codegangsta/negroni v1.0.0 + github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc + github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/documize/blackfriday v2.0.0+incompatible github.com/documize/glick v0.0.0-20160503134043-a8ccbef88237 github.com/documize/html-diff v0.0.0-20160503140253-f61c192c7796 github.com/documize/slug v1.1.1 github.com/elazarl/go-bindata-assetfs v1.0.0 - github.com/go-sql-driver/mysql v1.4.1 + github.com/go-sql-driver/mysql v1.5.0 github.com/google/go-github v17.0.0+incompatible github.com/google/go-querystring v1.0.0 // indirect - github.com/gorilla/handlers v1.4.0 - github.com/gorilla/mux v1.6.2 + github.com/gorilla/handlers v1.4.2 + github.com/gorilla/mux v1.7.4 github.com/jmoiron/sqlx v1.2.0 github.com/jteeuwen/go-bindata v3.0.7+incompatible // indirect - github.com/kr/pretty v0.1.0 // indirect - github.com/lib/pq v1.2.0 + github.com/kr/pretty v0.2.0 // indirect + github.com/lib/pq v1.5.2 github.com/mb0/diff v0.0.0-20131118162322-d8d9a906c24d // indirect github.com/microcosm-cc/bluemonday v1.0.2 github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d - github.com/pkg/errors v0.8.0 + github.com/openzipkin/zipkin-go v0.1.6 // indirect + github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 // indirect github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be // indirect - github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95 // indirect - golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 - golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 - golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 + github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect + golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 + golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc - gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225 // indirect gopkg.in/cas.v2 v2.1.0 - gopkg.in/ldap.v3 v3.0.3 + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect + gopkg.in/ldap.v3 v3.1.0 + gopkg.in/yaml.v2 v2.2.2 // indirect ) diff --git a/go.sum b/go.sum index 706c8aef..be34ce22 100644 --- a/go.sum +++ b/go.sum @@ -2,24 +2,61 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.37.4 h1:glPeL3BQJsbF6aIIYfZizMwc5LTYz250bDMjttbBGAU= cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andygrunwald/go-jira v1.10.0 h1:+HPPK7++6/hW8ygtr2Yc0wd+Qu139NrWiTD/r1cYxO0= github.com/andygrunwald/go-jira v1.10.0/go.mod h1:KEsrADP1cEXRxVWTaDtpLyyZN1LM9p6Jn8W5+sDzxhc= +github.com/andygrunwald/go-jira v1.12.0 h1:JJi2cEDmDxVtTXxC8ruLDbtOU6pA4OLeL0niyfNcoWw= +github.com/andygrunwald/go-jira v1.12.0/go.mod h1:jYi4kFDbRPZTJdJOVJO4mpMMIwdB+rcZwSO58DzPd2I= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/codegangsta/negroni v0.3.0 h1:ByBtJaE0u71x6Ebli7lm95c8oCkrmF88+s5qB2o6j8I= github.com/codegangsta/negroni v0.3.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.0.0-20190806190131-db2462fef53b h1:C8eKel5CV265bq4KKOvyMKyNK4NPPr1mImhqm8xcK7k= github.com/denisenkom/go-mssqldb v0.0.0-20190806190131-db2462fef53b/go.mod h1:uU0N10vx1abI4qeVe79CxepBP6PPREVTgMS5Gx6/mOk= +github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc h1:VRRKCwnzqk8QCaRC4os14xoKDdbHqqlJtJA0oc1ZAjg= +github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.1.0+incompatible h1:FFziAwDQQ2dz1XClWMkwvukur3evtZx7x/wMHKM1i20= github.com/dgrijalva/jwt-go v3.1.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/documize/blackfriday v2.0.0+incompatible h1:qjRGAIVwZlHBtA/b9u0LtseYM3v3WpIXofPCwNjcUsE= github.com/documize/blackfriday v2.0.0+incompatible/go.mod h1:89vHw0Rs0jcipRrgirvJJn6hvRgbk4KX6rask9ZQ84Y= github.com/documize/glick v0.0.0-20160503134043-a8ccbef88237 h1:i9vV99+Zl6G82LGwwk7TBf5WwbniTNZZfYCIrEvqRpY= @@ -33,29 +70,58 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/structs v1.0.0 h1:BrX964Rv5uQ3wwS+KRUAJCBBw5PQmgJfJ6v4yly5QwU= github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= @@ -63,18 +129,32 @@ github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASu github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZsA= github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jteeuwen/go-bindata v3.0.7+incompatible h1:91Uy4d9SYVr1kyTJ15wJsog+esAZZl7JmEfTkwmhJts= github.com/jteeuwen/go-bindata v3.0.7+incompatible/go.mod h1:JVvhzYOiGBnFSYRyV00iY8q7/0PThjIYav1p9h5dmKs= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= @@ -83,12 +163,16 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.5.2 h1:yTSXVswvWUOQ3k1sd7vJfDrbSl8lKuscqFJRqjC0ifw= +github.com/lib/pq v1.5.2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -106,35 +190,80 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be h1:ta7tUOvsPHVHGom5hKW5VXNc2xZIkfCKP8iaqOyYtUQ= github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be/go.mod h1:MIDFMn7db1kT65GmV94GzpX9Qdi7N/pQlwb+AN8wh+Q= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95 h1:/vdW8Cb7EXrkqWGufVMES1OH2sU9gKVb2n9/1y5NMBY= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/trivago/tgo v1.0.1 h1:bxatjJIXNIpV18bucU4Uk/LaoxvxuOlp/oowRHyncLQ= github.com/trivago/tgo v1.0.1/go.mod h1:w4dpD+3tzNIIiIfkWWa85w5/B77tlvdZckQ+6PkFnhc= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -147,50 +276,172 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJV golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 h1:eDrdRpKgkcCqKZQwyZRyeFZgfqt37SL7Kv3tok06cKE= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225 h1:JBwmEvLfCqgPcIq8MjVMQxsF3LVL4XG/HH0qiG0+IFY= gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/cas.v2 v2.1.0 h1:sbYBMWtpanwLH75GAWjIp5JnON9wa3NodLZhouu0G9I= gopkg.in/cas.v2 v2.1.0/go.mod h1:M291I/o/u3eeMl9SkXMPYpWasHp7weFY9G/pM5DbB+g= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ldap.v3 v3.0.3 h1:YKRHW/2sIl05JsCtx/5ZuUueFuJyoj/6+DGXe3wp6ro= gopkg.in/ldap.v3 v3.0.3/go.mod h1:oxD7NyBuxchC+SgJDE1Q5Od05eGt29SDQVBmV+HYbzw= +gopkg.in/ldap.v3 v3.1.0 h1:DIDWEjI7vQWREh0S8X5/NFPCZ3MCVd55LmXKPW4XLGE= +gopkg.in/ldap.v3 v3.1.0/go.mod h1:dQjCc0R0kfyFjIlWNMH1DORwUASZyDxo2Ry1B51dXaQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= @@ -198,3 +449,11 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/gui/app/pods/folder/index/template.hbs b/gui/app/pods/folder/index/template.hbs index 41d16591..526b84db 100644 --- a/gui/app/pods/folder/index/template.hbs +++ b/gui/app/pods/folder/index/template.hbs @@ -66,7 +66,7 @@ meta=model.folder.icon}} {{folder/documents-list - numDocuments=model.documents.length + numDocuments=model.documents.length documents=filteredDocs spaces=model.folders space=model.folder diff --git a/gui/package.json b/gui/package.json index 9d928ee9..5df53a78 100644 --- a/gui/package.json +++ b/gui/package.json @@ -1,6 +1,6 @@ { "name": "documize", - "version": "3.7.0", + "version": "3.8.0", "description": "Documize is the Integrated Document Environment (IDE)", "repository": "", "license": "AGPL", @@ -59,7 +59,7 @@ "dependencies": { "bootstrap": "^4.2.1", "nan": "git+https://github.com/nodejs/nan.git", - "node-sass": "^4.13.0", + "node-sass": "^4.14.1", "npm": "^6.9.0", "pdfjs-dist": "^2.0.943", "popper.js": "^1.15.0" diff --git a/gui/yarn.lock b/gui/yarn.lock index d8ccb0c5..503558e4 100644 --- a/gui/yarn.lock +++ b/gui/yarn.lock @@ -3389,11 +3389,6 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -3645,15 +3640,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -9164,10 +9150,10 @@ node-releases@^1.1.23: dependencies: semver "^5.3.0" -node-sass@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066" - integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA== +node-sass@^4.14.1: + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -9183,7 +9169,7 @@ node-sass@^4.13.0: node-gyp "^3.8.0" npmlog "^4.0.0" request "^2.88.0" - sass-graph "^2.2.4" + sass-graph "2.2.5" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" @@ -9792,13 +9778,6 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -11233,15 +11212,15 @@ sane@^4.0.0, sane@^4.1.0: minimist "^1.1.1" walker "~1.0.5" -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== dependencies: glob "^7.0.0" lodash "^4.0.0" scss-tokenizer "^0.2.3" - yargs "^7.0.0" + yargs "^13.3.2" sass@^1.13.2: version "1.21.0" @@ -11871,7 +11850,7 @@ string-template@~0.2.1: resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -12854,11 +12833,6 @@ whatwg-fetch@^3.0.0: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -13051,12 +13025,13 @@ yargs-parser@^13.1.0, yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: - camelcase "^3.0.0" + camelcase "^5.0.0" + decamelize "^1.2.0" yargs-parser@^9.0.2: version "9.0.2" @@ -13100,6 +13075,22 @@ yargs@^13.0.0: y18n "^4.0.0" yargs-parser "^13.1.0" +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@^14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.0.0.tgz#ba4cacc802b3c0b3e36a9e791723763d57a85066" @@ -13117,25 +13108,6 @@ yargs@^14.0.0: y18n "^4.0.0" yargs-parser "^13.1.1" -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/vendor/cloud.google.com/go/AUTHORS b/vendor/cloud.google.com/go/AUTHORS deleted file mode 100644 index c364af1d..00000000 --- a/vendor/cloud.google.com/go/AUTHORS +++ /dev/null @@ -1,15 +0,0 @@ -# This is the official list of cloud authors for copyright purposes. -# This file is distinct from the CONTRIBUTORS files. -# See the latter for an explanation. - -# Names should be added to this file as: -# Name or Organization -# The email address is not required for organizations. - -Filippo Valsorda -Google Inc. -Ingo Oeser -Palm Stone Games, Inc. -Paweł Knap -Péter Szilágyi -Tyler Treat diff --git a/vendor/cloud.google.com/go/CONTRIBUTORS b/vendor/cloud.google.com/go/CONTRIBUTORS deleted file mode 100644 index 3b3cbed9..00000000 --- a/vendor/cloud.google.com/go/CONTRIBUTORS +++ /dev/null @@ -1,40 +0,0 @@ -# People who have agreed to one of the CLAs and can contribute patches. -# The AUTHORS file lists the copyright holders; this file -# lists people. For example, Google employees are listed here -# but not in AUTHORS, because Google holds the copyright. -# -# https://developers.google.com/open-source/cla/individual -# https://developers.google.com/open-source/cla/corporate -# -# Names should be added to this file as: -# Name - -# Keep the list alphabetically sorted. - -Alexis Hunt -Andreas Litt -Andrew Gerrand -Brad Fitzpatrick -Burcu Dogan -Dave Day -David Sansome -David Symonds -Filippo Valsorda -Glenn Lewis -Ingo Oeser -James Hall -Johan Euphrosine -Jonathan Amsterdam -Kunpei Sakai -Luna Duclos -Magnus Hiie -Mario Castro -Michael McGreevy -Omar Jarjur -Paweł Knap -Péter Szilágyi -Sarah Adams -Thanatat Tamtan -Toby Burress -Tuo Shan -Tyler Treat diff --git a/vendor/github.com/andygrunwald/go-jira/.travis.yml b/vendor/github.com/andygrunwald/go-jira/.travis.yml index 34dc3b87..a0b62b63 100644 --- a/vendor/github.com/andygrunwald/go-jira/.travis.yml +++ b/vendor/github.com/andygrunwald/go-jira/.travis.yml @@ -3,14 +3,18 @@ language: go sudo: false go: - - "1.8.x" - "1.9.x" - "1.10.x" - "1.11.x" - "1.12.x" + - "1.13.x" before_install: - go get -t ./... +matrix: + allow_failures: + - go: 1.13.x + script: - GOMAXPROCS=4 GORACE="halt_on_error=1" go test -race -v ./... diff --git a/vendor/github.com/andygrunwald/go-jira/CHANGELOG.md b/vendor/github.com/andygrunwald/go-jira/CHANGELOG.md index 43242838..e893cd7a 100644 --- a/vendor/github.com/andygrunwald/go-jira/CHANGELOG.md +++ b/vendor/github.com/andygrunwald/go-jira/CHANGELOG.md @@ -1,4 +1,44 @@ -# [](https://github.com/andygrunwald/go-jira/compare/v1.9.0...v1.10.0) (2019-05-23) +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [1.12.0](https://github.com/andygrunwald/go-jira/compare/v1.11.1...v1.12.0) (2019-12-14) + + +### Features + +* Add IssueLinkTypeService with GetList and test ([261889a](https://github.com/andygrunwald/go-jira/commit/261889adc63623fcea0fa8cab0d5da26eec37e68)) +* add worklog update method ([9ff562a](https://github.com/andygrunwald/go-jira/commit/9ff562ae3ea037961f277be10412ad0a42ff8a6f)) +* Implement get remote links method ([1946cac](https://github.com/andygrunwald/go-jira/commit/1946cac0fe6ee91f784e3dda3c12f3f30f7115b8)) +* Implement issue link type DELETE ([e37cc6c](https://github.com/andygrunwald/go-jira/commit/e37cc6c6897830492c070667ab8b68bd85683fc3)) +* Implement issue link type GET ([57538b9](https://github.com/andygrunwald/go-jira/commit/57538b926c558e97940760a30bdc16cdd37ef4f1)) +* Implement issue link type POST ([75b9df8](https://github.com/andygrunwald/go-jira/commit/75b9df8b01557f01dc318d33c0bc2841a9c084eb)) +* Implement issue link type PUT ([48a15c1](https://github.com/andygrunwald/go-jira/commit/48a15c10443a3cff78f0fb2c8034dd772320e238)) +* provide access to issue transitions loaded from JIRA API ([7530b7c](https://github.com/andygrunwald/go-jira/commit/7530b7cd8266d82cdb4afe831518986772e742ba)) + +### [1.11.1](https://github.com/andygrunwald/go-jira/compare/v1.11.0...v1.11.1) (2019-10-17) + +## [1.11.0](https://github.com/andygrunwald/go-jira/compare/v1.10.0...v1.11.0) (2019-10-17) + + +### Features + +* Add AccountID and AccountType to GroupMember struct ([216e005](https://github.com/andygrunwald/go-jira/commit/216e0056d6385eba9d31cb37e6ff64314860d2cc)) +* Add AccountType and Locale to User struct ([52ab347](https://github.com/andygrunwald/go-jira/commit/52ab34790307144087f0d9bf86c93a2b2209fe46)) +* Add GetAllStatuses ([afc96b1](https://github.com/andygrunwald/go-jira/commit/afc96b18d17b77e32cec9e1ac7e4f5dec7e627f5)) +* Add GetMyFilters to FilterService ([ebae19d](https://github.com/andygrunwald/go-jira/commit/ebae19dda6afd0e54578f30300bc36012381e99b)) +* Add Search to FilterService ([38a755b](https://github.com/andygrunwald/go-jira/commit/38a755b407cd70d11fe2e2897d814552ca29ab51)) +* add support for JWT auth with qsh needed by add-ons ([a8bdfed](https://github.com/andygrunwald/go-jira/commit/a8bdfed27ff42a9bb0468b8cf192871780919def)) +* AddGetBoardConfiguration ([fd698c5](https://github.com/andygrunwald/go-jira/commit/fd698c57163f248f21285d5ebc6a3bb60d46694f)) +* Replace http.Client with interface for extensibility ([b59a65c](https://github.com/andygrunwald/go-jira/commit/b59a65c365dcefd42e135579e9b7ce9c9c006489)) + + +### Bug Fixes + +* Fix fixversion description tag ([8383e2f](https://github.com/andygrunwald/go-jira/commit/8383e2f5f145d04f6bcdb47fb12a95b58bdcedfa)) +* Fix typos in filter_test.go ([e9a261c](https://github.com/andygrunwald/go-jira/commit/e9a261c52249073345e5895b22e2cf4d7286497a)) + +# [1.10.0](https://github.com/andygrunwald/go-jira/compare/v1.9.0...v1.10.0) (2019-05-23) ### Bug Fixes diff --git a/vendor/github.com/andygrunwald/go-jira/PULL_REQUEST_TEMPLATE.md b/vendor/github.com/andygrunwald/go-jira/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..26ee7854 --- /dev/null +++ b/vendor/github.com/andygrunwald/go-jira/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ +# PR Description + +_What does this fix or add?_ + +# Checklist + +* [ ] Tests added + * [ ] Good Path + * [ ] Error Path +* [ ] Commits follow conventions described here: + * [ ] [https://conventionalcommits.org/en/v1.0.0-beta.4/#summary](https://conventionalcommits.org/en/v1.0.0-beta.4/#summary) + * [ ] [https://chris.beams.io/posts/git-commit/#seven-rules](https://chris.beams.io/posts/git-commit/#seven-rules) +* [ ] Commits are squashed such that + * [ ] There is 1 commit per isolated change +* [ ] I've not made extraneous commits/changes that are unrelated to my change. diff --git a/vendor/github.com/andygrunwald/go-jira/README.md b/vendor/github.com/andygrunwald/go-jira/README.md index 922d0e20..64f2263b 100644 --- a/vendor/github.com/andygrunwald/go-jira/README.md +++ b/vendor/github.com/andygrunwald/go-jira/README.md @@ -230,6 +230,8 @@ These services own a responsibility of the single endpoints / usecases of JIRA. ## Contribution +We ❤️ PR's + Contribution, in any kind of way, is highly welcome! It doesn't matter if you are not able to write code. Creating issues or holding talks and help other people to use [go-jira](https://github.com/andygrunwald/go-jira) is contribution, too! @@ -254,6 +256,22 @@ Jira offers sandbox test environments at http://go.atlassian.com/cloud-dev. You can read more about them at https://developer.atlassian.com/blog/2016/04/cloud-ecosystem-dev-env/. +## Releasing + +Install `standard-version` +```bash +npm i -g standard-version +``` + +```bash +standard-version +git push --tags +``` + +Manually copy/paste text from changelog (for this new version) into the release on Github.com. E.g. + +[https://github.com/andygrunwald/go-jira/releases/edit/v1.11.0](https://github.com/andygrunwald/go-jira/releases/edit/v1.11.0) + ## License This project is released under the terms of the [MIT license](http://en.wikipedia.org/wiki/MIT_License). diff --git a/vendor/github.com/andygrunwald/go-jira/board.go b/vendor/github.com/andygrunwald/go-jira/board.go index a691672c..3daa4c84 100644 --- a/vendor/github.com/andygrunwald/go-jira/board.go +++ b/vendor/github.com/andygrunwald/go-jira/board.go @@ -74,6 +74,56 @@ type Sprint struct { State string `json:"state" structs:"state"` } +// BoardConfiguration represents a boardConfiguration of a jira board +type BoardConfiguration struct { + ID int `json:"id"` + Name string `json:"name"` + Self string `json:"self"` + Location BoardConfigurationLocation `json:"location"` + Filter BoardConfigurationFilter `json:"filter"` + SubQuery BoardConfigurationSubQuery `json:"subQuery"` + ColumnConfig BoardConfigurationColumnConfig `json:"columnConfig"` +} + +// BoardConfigurationFilter reference to the filter used by the given board. +type BoardConfigurationFilter struct { + ID string `json:"id"` + Self string `json:"self"` +} + +// BoardConfigurationSubQuery (Kanban only) - JQL subquery used by the given board. +type BoardConfigurationSubQuery struct { + Query string `json:"query"` +} + +// BoardConfigurationLocation reference to the container that the board is located in +type BoardConfigurationLocation struct { + Type string `json:"type"` + Key string `json:"key"` + ID string `json:"id"` + Self string `json:"self"` + Name string `json:"name"` +} + +// BoardConfigurationColumnConfig lists the columns for a given board in the order defined in the column configuration +// with constrainttype (none, issueCount, issueCountExclSubs) +type BoardConfigurationColumnConfig struct { + Columns []BoardConfigurationColumn `json:"columns"` + ConstraintType string `json:"constraintType"` +} + +// BoardConfigurationColumn lists the name of the board with the statuses that maps to a particular column +type BoardConfigurationColumn struct { + Name string `json:"name"` + Status []BoardConfigurationColumnStatus `json:"statuses"` +} + +// BoardConfigurationColumnStatus represents a status in the column configuration +type BoardConfigurationColumnStatus struct { + ID string `json:"id"` + Self string `json:"self"` +} + // GetAllBoards will returns all boards. This only includes boards that the user has permission to view. // // JIRA API docs: https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getAllBoards @@ -202,3 +252,24 @@ func (s *BoardService) GetAllSprintsWithOptions(boardID int, options *GetAllSpri return result, resp, err } + +// GetBoardConfiguration will return a board configuration for a given board Id +// Jira API docs:https://developer.atlassian.com/cloud/jira/software/rest/#api-rest-agile-1-0-board-boardId-configuration-get +func (s *BoardService) GetBoardConfiguration(boardID int) (*BoardConfiguration, *Response, error) { + apiEndpoint := fmt.Sprintf("rest/agile/1.0/board/%d/configuration", boardID) + + req, err := s.client.NewRequest("GET", apiEndpoint, nil) + + if err != nil { + return nil, nil, err + } + + result := new(BoardConfiguration) + resp, err := s.client.Do(req, result) + if err != nil { + err = NewJiraError(resp, err) + } + + return result, resp, err + +} diff --git a/vendor/github.com/andygrunwald/go-jira/filter.go b/vendor/github.com/andygrunwald/go-jira/filter.go index 209e63bd..666153aa 100644 --- a/vendor/github.com/andygrunwald/go-jira/filter.go +++ b/vendor/github.com/andygrunwald/go-jira/filter.go @@ -32,6 +32,90 @@ type Filter struct { } `json:"subscriptions"` } +// GetMyFiltersQueryOptions specifies the optional parameters for the Get My Filters method +type GetMyFiltersQueryOptions struct { + IncludeFavourites bool `url:"includeFavourites,omitempty"` + Expand string `url:"expand,omitempty"` +} + +// FiltersList reflects a list of filters +type FiltersList struct { + MaxResults int `json:"maxResults" structs:"maxResults"` + StartAt int `json:"startAt" structs:"startAt"` + Total int `json:"total" structs:"total"` + IsLast bool `json:"isLast" structs:"isLast"` + Values []FiltersListItem `json:"values" structs:"values"` +} + +// FiltersListItem represents a Filter of FiltersList in Jira +type FiltersListItem struct { + Self string `json:"self"` + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Owner User `json:"owner"` + Jql string `json:"jql"` + ViewURL string `json:"viewUrl"` + SearchURL string `json:"searchUrl"` + Favourite bool `json:"favourite"` + FavouritedCount int `json:"favouritedCount"` + SharePermissions []interface{} `json:"sharePermissions"` + Subscriptions []struct { + ID int `json:"id"` + User User `json:"user"` + } `json:"subscriptions"` +} + +// FilterSearchOptions specifies the optional parameters for the Search method +// https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-filter-search-get +type FilterSearchOptions struct { + // String used to perform a case-insensitive partial match with name. + FilterName string `url:"filterName,omitempty"` + + // User account ID used to return filters with the matching owner.accountId. This parameter cannot be used with owner. + AccountID string `url:"accountId,omitempty"` + + // Group name used to returns filters that are shared with a group that matches sharePermissions.group.groupname. + GroupName string `url:"groupname,omitempty"` + + // Project ID used to returns filters that are shared with a project that matches sharePermissions.project.id. + // Format: int64 + ProjectID int64 `url:"projectId,omitempty"` + + // Orders the results using one of these filter properties. + // - `description` Orders by filter `description`. Note that this ordering works independently of whether the expand to display the description field is in use. + // - `favourite_count` Orders by `favouritedCount`. + // - `is_favourite` Orders by `favourite`. + // - `id` Orders by filter `id`. + // - `name` Orders by filter `name`. + // - `owner` Orders by `owner.accountId`. + // + // Default: `name` + // + // Valid values: id, name, description, owner, favorite_count, is_favorite, -id, -name, -description, -owner, -favorite_count, -is_favorite + OrderBy string `url:"orderBy,omitempty"` + + // The index of the first item to return in a page of results (page offset). + // Default: 0, Format: int64 + StartAt int64 `url:"startAt,omitempty"` + + // The maximum number of items to return per page. The maximum is 100. + // Default: 50, Format: int32 + MaxResults int32 `url:"maxResults,omitempty"` + + // Use expand to include additional information about filter in the response. This parameter accepts multiple values separated by a comma: + // - description Returns the description of the filter. + // - favourite Returns an indicator of whether the user has set the filter as a favorite. + // - favouritedCount Returns a count of how many users have set this filter as a favorite. + // - jql Returns the JQL query that the filter uses. + // - owner Returns the owner of the filter. + // - searchUrl Returns a URL to perform the filter's JQL query. + // - sharePermissions Returns the share permissions defined for the filter. + // - subscriptions Returns the users that are subscribed to the filter. + // - viewUrl Returns a URL to view the filter. + Expand string `url:"expand,omitempty"` +} + // GetList retrieves all filters from Jira func (fs *FilterService) GetList() ([]*Filter, *Response, error) { @@ -91,3 +175,50 @@ func (fs *FilterService) Get(filterID int) (*Filter, *Response, error) { return filter, resp, err } + +// GetMyFilters retrieves the my Filters. +// +// https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-filter-my-get +func (fs *FilterService) GetMyFilters(opts *GetMyFiltersQueryOptions) ([]*Filter, *Response, error) { + apiEndpoint := "rest/api/3/filter/my" + url, err := addOptions(apiEndpoint, opts) + if err != nil { + return nil, nil, err + } + req, err := fs.client.NewRequest("GET", url, nil) + if err != nil { + return nil, nil, err + } + + filters := []*Filter{} + resp, err := fs.client.Do(req, &filters) + if err != nil { + jerr := NewJiraError(resp, err) + return nil, resp, jerr + } + return filters, resp, nil +} + +// Search will search for filter according to the search options +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-filter-search-get +func (fs *FilterService) Search(opt *FilterSearchOptions) (*FiltersList, *Response, error) { + apiEndpoint := "rest/api/3/filter/search" + url, err := addOptions(apiEndpoint, opt) + if err != nil { + return nil, nil, err + } + req, err := fs.client.NewRequest("GET", url, nil) + if err != nil { + return nil, nil, err + } + + filters := new(FiltersList) + resp, err := fs.client.Do(req, filters) + if err != nil { + jerr := NewJiraError(resp, err) + return nil, resp, jerr + } + + return filters, resp, err +} diff --git a/vendor/github.com/andygrunwald/go-jira/go.mod b/vendor/github.com/andygrunwald/go-jira/go.mod index c31a7502..8c9a0aa5 100644 --- a/vendor/github.com/andygrunwald/go-jira/go.mod +++ b/vendor/github.com/andygrunwald/go-jira/go.mod @@ -3,6 +3,7 @@ module github.com/andygrunwald/go-jira go 1.12 require ( + github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/fatih/structs v1.0.0 github.com/google/go-cmp v0.3.0 github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 diff --git a/vendor/github.com/andygrunwald/go-jira/go.sum b/vendor/github.com/andygrunwald/go-jira/go.sum new file mode 100644 index 00000000..0a2c2cc2 --- /dev/null +++ b/vendor/github.com/andygrunwald/go-jira/go.sum @@ -0,0 +1,20 @@ +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/fatih/structs v1.0.0 h1:BrX964Rv5uQ3wwS+KRUAJCBBw5PQmgJfJ6v4yly5QwU= +github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 h1:zLTLjkaOFEFIOxY5BWLFLwh+cL8vOBW4XJ2aqLE/Tf0= +github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/trivago/tgo v1.0.1 h1:bxatjJIXNIpV18bucU4Uk/LaoxvxuOlp/oowRHyncLQ= +github.com/trivago/tgo v1.0.1/go.mod h1:w4dpD+3tzNIIiIfkWWa85w5/B77tlvdZckQ+6PkFnhc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/andygrunwald/go-jira/group.go b/vendor/github.com/andygrunwald/go-jira/group.go index 8ceadc9b..a0b77764 100644 --- a/vendor/github.com/andygrunwald/go-jira/group.go +++ b/vendor/github.com/andygrunwald/go-jira/group.go @@ -43,10 +43,12 @@ type GroupMember struct { Self string `json:"self,omitempty"` Name string `json:"name,omitempty"` Key string `json:"key,omitempty"` + AccountID string `json:"accountId,omitempty"` EmailAddress string `json:"emailAddress,omitempty"` DisplayName string `json:"displayName,omitempty"` Active bool `json:"active,omitempty"` TimeZone string `json:"timeZone,omitempty"` + AccountType string `json:"accountType,omitempty"` } // GroupSearchOptions specifies the optional parameters for the Get Group methods diff --git a/vendor/github.com/andygrunwald/go-jira/issue.go b/vendor/github.com/andygrunwald/go-jira/issue.go index 93212b1d..857373cc 100644 --- a/vendor/github.com/andygrunwald/go-jira/issue.go +++ b/vendor/github.com/andygrunwald/go-jira/issue.go @@ -46,6 +46,7 @@ type Issue struct { Fields *IssueFields `json:"fields,omitempty" structs:"fields,omitempty"` RenderedFields *IssueRenderedFields `json:"renderedFields,omitempty" structs:"renderedFields,omitempty"` Changelog *Changelog `json:"changelog,omitempty" structs:"changelog,omitempty"` + Transitions []Transition `json:"transitions,omitempty" structs:"transitions,omitempty"` } // ChangelogItems reflects one single changelog item of a history item @@ -268,18 +269,6 @@ type Component struct { Name string `json:"name,omitempty" structs:"name,omitempty"` } -// Status represents the current status of a JIRA issue. -// Typical status are "Open", "In Progress", "Closed", ... -// Status can be user defined in every JIRA instance. -type Status struct { - Self string `json:"self" structs:"self"` - Description string `json:"description" structs:"description"` - IconURL string `json:"iconUrl" structs:"iconUrl"` - Name string `json:"name" structs:"name"` - ID string `json:"id" structs:"id"` - StatusCategory StatusCategory `json:"statusCategory" structs:"statusCategory"` -} - // Progress represents the progress of a JIRA issue. type Progress struct { Progress int `json:"progress" structs:"progress"` @@ -479,7 +468,7 @@ type FixVersion struct { Self string `json:"self,omitempty" structs:"self,omitempty"` ID string `json:"id,omitempty" structs:"id,omitempty"` Name string `json:"name,omitempty" structs:"name,omitempty"` - Description string `json:"description,omitempty" structs:"name,omitempty"` + Description string `json:"description,omitempty" structs:"description,omitempty"` Archived *bool `json:"archived,omitempty" structs:"archived,omitempty"` Released *bool `json:"released,omitempty" structs:"released,omitempty"` ReleaseDate string `json:"releaseDate,omitempty" structs:"releaseDate,omitempty"` @@ -558,6 +547,44 @@ type AddWorklogQueryOptions struct { // This can heavily differ between JIRA instances type CustomFields map[string]string +// RemoteLink represents remote links which linked to issues +type RemoteLink struct { + ID int `json:"id,omitempty" structs:"id,omitempty"` + Self string `json:"self,omitempty" structs:"self,omitempty"` + GlobalID string `json:"globalId,omitempty" structs:"globalId,omitempty"` + Application *RemoteLinkApplication `json:"application,omitempty" structs:"application,omitempty"` + Relationship string `json:"relationship,omitempty" structs:"relationship,omitempty"` + Object *RemoteLinkObject `json:"object,omitempty" structs:"object,omitempty"` +} + +// RemoteLinkApplication represents remote links application +type RemoteLinkApplication struct { + Type string `json:"type,omitempty" structs:"type,omitempty"` + Name string `json:"name,omitempty" structs:"name,omitempty"` +} + +// RemoteLinkObject represents remote link object itself +type RemoteLinkObject struct { + URL string `json:"url,omitempty" structs:"url,omitempty"` + Title string `json:"title,omitempty" structs:"title,omitempty"` + Summary string `json:"summary,omitempty" structs:"summary,omitempty"` + Icon *RemoteLinkIcon `json:"icon,omitempty" structs:"icon,omitempty"` + Status *RemoteLinkStatus `json:"status,omitempty" structs:"status,omitempty"` +} + +// RemoteLinkIcon represents icon displayed next to link +type RemoteLinkIcon struct { + Url16x16 string `json:"url16x16,omitempty" structs:"url16x16,omitempty"` + Title string `json:"title,omitempty" structs:"title,omitempty"` + Link string `json:"link,omitempty" structs:"link,omitempty"` +} + +// RemoteLinkStatus if the link is a resolvable object (issue, epic) - the structure represent its status +type RemoteLinkStatus struct { + Resolved bool + Icon *RemoteLinkIcon +} + // Get returns a full representation of the issue for the given issue key. // JIRA will attempt to identify the issue by the issueIdOrKey path parameter. // This can be an issue id, or an issue key. @@ -879,6 +906,33 @@ func (s *IssueService) AddWorklogRecord(issueID string, record *WorklogRecord, o return responseRecord, resp, nil } +// UpdateWorklogRecord updates a worklog record. +// +// https://docs.atlassian.com/software/jira/docs/api/REST/7.1.2/#api/2/issue-updateWorklog +func (s *IssueService) UpdateWorklogRecord(issueID, worklogID string, record *WorklogRecord, options ...func(*http.Request) error) (*WorklogRecord, *Response, error) { + apiEndpoint := fmt.Sprintf("rest/api/2/issue/%s/worklog/%s", issueID, worklogID) + req, err := s.client.NewRequest("PUT", apiEndpoint, record) + if err != nil { + return nil, nil, err + } + + for _, option := range options { + err = option(req) + if err != nil { + return nil, nil, err + } + } + + responseRecord := new(WorklogRecord) + resp, err := s.client.Do(req, responseRecord) + if err != nil { + jerr := NewJiraError(resp, err) + return nil, resp, jerr + } + + return responseRecord, resp, nil +} + // AddLink adds a link between two issues. // // JIRA API docs: https://docs.atlassian.com/jira/REST/latest/#api/2/issueLink @@ -1258,3 +1312,21 @@ func (c ChangelogHistory) CreatedTime() (time.Time, error) { t, err := time.Parse("2006-01-02T15:04:05.999-0700", c.Created) return t, err } + +// GetRemoteLinks gets remote issue links on the issue. +// +// JIRA API docs: https://docs.atlassian.com/jira/REST/latest/#api/2/issue-getRemoteIssueLinks +func (s *IssueService) GetRemoteLinks(id string) (*[]RemoteLink, *Response, error) { + apiEndpoint := fmt.Sprintf("rest/api/2/issue/%s/remotelink", id) + req, err := s.client.NewRequest("GET", apiEndpoint, nil) + if err != nil { + return nil, nil, err + } + + result := new([]RemoteLink) + resp, err := s.client.Do(req, result) + if err != nil { + err = NewJiraError(resp, err) + } + return result, resp, err +} diff --git a/vendor/github.com/andygrunwald/go-jira/issuelinktype.go b/vendor/github.com/andygrunwald/go-jira/issuelinktype.go new file mode 100644 index 00000000..31eebc81 --- /dev/null +++ b/vendor/github.com/andygrunwald/go-jira/issuelinktype.go @@ -0,0 +1,111 @@ +package jira + +import ( + "encoding/json" + "fmt" + "io/ioutil" +) + +// IssueLinkTypeService handles issue link types for the JIRA instance / API. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-group-Issue-link-types +type IssueLinkTypeService struct { + client *Client +} + +// GetList gets all of the issue link types from JIRA. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-issueLinkType-get +func (s *IssueLinkTypeService) GetList() ([]IssueLinkType, *Response, error) { + apiEndpoint := "rest/api/2/issueLinkType" + req, err := s.client.NewRequest("GET", apiEndpoint, nil) + if err != nil { + return nil, nil, err + } + + linkTypeList := []IssueLinkType{} + resp, err := s.client.Do(req, &linkTypeList) + if err != nil { + return nil, resp, NewJiraError(resp, err) + } + return linkTypeList, resp, nil +} + +// Get gets info of a specific issue link type from JIRA. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-issueLinkType-issueLinkTypeId-get +func (s *IssueLinkTypeService) Get(ID string) (*IssueLinkType, *Response, error) { + apiEndPoint := fmt.Sprintf("rest/api/2/issueLinkType/%s", ID) + req, err := s.client.NewRequest("GET", apiEndPoint, nil) + if err != nil { + return nil, nil, err + } + + linkType := new(IssueLinkType) + resp, err := s.client.Do(req, linkType) + if err != nil { + return nil, resp, NewJiraError(resp, err) + } + return linkType, resp, nil +} + +// Create creates an issue link type in JIRA. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-issueLinkType-post +func (s *IssueLinkTypeService) Create(linkType *IssueLinkType) (*IssueLinkType, *Response, error) { + apiEndpoint := "/rest/api/2/issueLinkType" + req, err := s.client.NewRequest("POST", apiEndpoint, linkType) + if err != nil { + return nil, nil, err + } + + resp, err := s.client.Do(req, nil) + if err != nil { + return nil, resp, err + } + + responseLinkType := new(IssueLinkType) + defer resp.Body.Close() + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + e := fmt.Errorf("Could not read the returned data") + return nil, resp, NewJiraError(resp, e) + } + err = json.Unmarshal(data, responseLinkType) + if err != nil { + e := fmt.Errorf("Could no unmarshal the data into struct") + return nil, resp, NewJiraError(resp, e) + } + return linkType, resp, nil +} + +// Update updates an issue link type. The issue is found by key. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-issueLinkType-issueLinkTypeId-put +func (s *IssueLinkTypeService) Update(linkType *IssueLinkType) (*IssueLinkType, *Response, error) { + apiEndpoint := fmt.Sprintf("rest/api/2/issueLinkType/%s", linkType.ID) + req, err := s.client.NewRequest("PUT", apiEndpoint, linkType) + if err != nil { + return nil, nil, err + } + resp, err := s.client.Do(req, nil) + if err != nil { + return nil, resp, NewJiraError(resp, err) + } + ret := *linkType + return &ret, resp, nil +} + +// Delete deletes an issue link type based on provided ID. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-issueLinkType-issueLinkTypeId-delete +func (s *IssueLinkTypeService) Delete(ID string) (*Response, error) { + apiEndpoint := fmt.Sprintf("rest/api/2/issueLinkType/%s", ID) + req, err := s.client.NewRequest("DELETE", apiEndpoint, nil) + if err != nil { + return nil, err + } + + resp, err := s.client.Do(req, nil) + return resp, err +} diff --git a/vendor/github.com/andygrunwald/go-jira/jira.go b/vendor/github.com/andygrunwald/go-jira/jira.go index 4bd1c35c..34fa8cb4 100644 --- a/vendor/github.com/andygrunwald/go-jira/jira.go +++ b/vendor/github.com/andygrunwald/go-jira/jira.go @@ -2,28 +2,38 @@ package jira import ( "bytes" + "crypto/sha256" + "encoding/hex" "encoding/json" "fmt" "io" "net/http" "net/url" "reflect" + "sort" "strings" "time" + "github.com/dgrijalva/jwt-go" "github.com/google/go-querystring/query" "github.com/pkg/errors" ) +// httpClient defines an interface for an http.Client implementation so that alternative +// http Clients can be passed in for making requests +type httpClient interface { + Do(request *http.Request) (response *http.Response, err error) +} + // A Client manages communication with the JIRA API. type Client struct { // HTTP client used to communicate with the API. - client *http.Client + client httpClient // Base URL for API requests. baseURL *url.URL - // Session storage if the user authentificate with a Session cookie + // Session storage if the user authenticates with a Session cookie session *Session // Services used for talking to different parts of the JIRA API. @@ -43,6 +53,8 @@ type Client struct { Filter *FilterService Role *RoleService PermissionScheme *PermissionSchemeService + Status *StatusService + IssueLinkType *IssueLinkTypeService } // NewClient returns a new JIRA API client. @@ -52,7 +64,7 @@ type Client struct { // As an alternative you can use Session Cookie based authentication provided by this package as well. // See https://docs.atlassian.com/jira/REST/latest/#authentication // baseURL is the HTTP endpoint of your JIRA instance and should always be specified with a trailing slash. -func NewClient(httpClient *http.Client, baseURL string) (*Client, error) { +func NewClient(httpClient httpClient, baseURL string) (*Client, error) { if httpClient == nil { httpClient = http.DefaultClient } @@ -87,6 +99,8 @@ func NewClient(httpClient *http.Client, baseURL string) (*Client, error) { c.Filter = &FilterService{client: c} c.Role = &RoleService{client: c} c.PermissionScheme = &PermissionSchemeService{client: c} + c.Status = &StatusService{client: c} + c.IssueLinkType = &IssueLinkTypeService{client: c} return c, nil } @@ -352,7 +366,7 @@ func (t *BasicAuthTransport) transport() http.RoundTripper { // CookieAuthTransport is an http.RoundTripper that authenticates all requests // using Jira's cookie-based authentication. // -// Note that it is generally preferrable to use HTTP BASIC authentication with the REST API. +// Note that it is generally preferable to use HTTP BASIC authentication with the REST API. // However, this resource may be used to mimic the behaviour of JIRA's log-in page (e.g. to display log-in errors to a user). // // JIRA API docs: https://docs.atlassian.com/jira/REST/latest/#auth/1/session @@ -445,6 +459,78 @@ func (t *CookieAuthTransport) transport() http.RoundTripper { return http.DefaultTransport } +// JWTAuthTransport is an http.RoundTripper that authenticates all requests +// using Jira's JWT based authentication. +// +// NOTE: this form of auth should be used by add-ons installed from the Atlassian marketplace. +// +// JIRA docs: https://developer.atlassian.com/cloud/jira/platform/understanding-jwt +// Examples in other languages: +// https://bitbucket.org/atlassian/atlassian-jwt-ruby/src/d44a8e7a4649e4f23edaa784402655fda7c816ea/lib/atlassian/jwt.rb +// https://bitbucket.org/atlassian/atlassian-jwt-py/src/master/atlassian_jwt/url_utils.py +type JWTAuthTransport struct { + Secret []byte + Issuer string + + // Transport is the underlying HTTP transport to use when making requests. + // It will default to http.DefaultTransport if nil. + Transport http.RoundTripper +} + +func (t *JWTAuthTransport) Client() *http.Client { + return &http.Client{Transport: t} +} + +func (t *JWTAuthTransport) transport() http.RoundTripper { + if t.Transport != nil { + return t.Transport + } + return http.DefaultTransport +} + +// RoundTrip adds the session object to the request. +func (t *JWTAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req2 := cloneRequest(req) // per RoundTripper contract + exp := time.Duration(59) * time.Second + qsh := t.createQueryStringHash(req.Method, req2.URL) + token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ + "iss": t.Issuer, + "iat": time.Now().Unix(), + "exp": time.Now().Add(exp).Unix(), + "qsh": qsh, + }) + + jwtStr, err := token.SignedString(t.Secret) + if err != nil { + return nil, errors.Wrap(err, "jwtAuth: error signing JWT") + } + + req2.Header.Set("Authorization", fmt.Sprintf("JWT %s", jwtStr)) + return t.transport().RoundTrip(req2) +} + +func (t *JWTAuthTransport) createQueryStringHash(httpMethod string, jiraURL *url.URL) string { + canonicalRequest := t.canonicalizeRequest(httpMethod, jiraURL) + h := sha256.Sum256([]byte(canonicalRequest)) + return hex.EncodeToString(h[:]) +} + +func (t *JWTAuthTransport) canonicalizeRequest(httpMethod string, jiraURL *url.URL) string { + path := "/" + strings.Replace(strings.Trim(jiraURL.Path, "/"), "&", "%26", -1) + + var canonicalQueryString []string + for k, v := range jiraURL.Query() { + if k == "jwt" { + continue + } + param := url.QueryEscape(k) + value := url.QueryEscape(strings.Join(v, "")) + canonicalQueryString = append(canonicalQueryString, strings.Replace(strings.Join([]string{param, value}, "="), "+", "%20", -1)) + } + sort.Strings(canonicalQueryString) + return fmt.Sprintf("%s&%s&%s", strings.ToUpper(httpMethod), path, strings.Join(canonicalQueryString, "&")) +} + // cloneRequest returns a clone of the provided *http.Request. // The clone is a shallow copy of the struct and its Header map. func cloneRequest(r *http.Request) *http.Request { diff --git a/vendor/github.com/andygrunwald/go-jira/status.go b/vendor/github.com/andygrunwald/go-jira/status.go new file mode 100644 index 00000000..365d9586 --- /dev/null +++ b/vendor/github.com/andygrunwald/go-jira/status.go @@ -0,0 +1,40 @@ +package jira + +// StatusService handles staties for the JIRA instance / API. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-group-Workflow-statuses +type StatusService struct { + client *Client +} + +// Status represents the current status of a JIRA issue. +// Typical status are "Open", "In Progress", "Closed", ... +// Status can be user defined in every JIRA instance. +type Status struct { + Self string `json:"self" structs:"self"` + Description string `json:"description" structs:"description"` + IconURL string `json:"iconUrl" structs:"iconUrl"` + Name string `json:"name" structs:"name"` + ID string `json:"id" structs:"id"` + StatusCategory StatusCategory `json:"statusCategory" structs:"statusCategory"` +} + +// GetAllStatuses returns a list of all statuses associated with workflows. +// +// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-status-get +func (s *StatusService) GetAllStatuses() ([]Status, *Response, error) { + apiEndpoint := "rest/api/2/status" + req, err := s.client.NewRequest("GET", apiEndpoint, nil) + + if err != nil { + return nil, nil, err + } + + statusList := []Status{} + resp, err := s.client.Do(req, &statusList) + if err != nil { + return nil, resp, NewJiraError(resp, err) + } + + return statusList, resp, nil +} diff --git a/vendor/github.com/andygrunwald/go-jira/user.go b/vendor/github.com/andygrunwald/go-jira/user.go index e14ebd83..9a6cbd20 100644 --- a/vendor/github.com/andygrunwald/go-jira/user.go +++ b/vendor/github.com/andygrunwald/go-jira/user.go @@ -15,8 +15,9 @@ type UserService struct { // User represents a JIRA user. type User struct { - Self string `json:"self,omitempty" structs:"self,omitempty"` - AccountID string `json:"accountId,omitempty" structs:"accountId,omitempty"` + Self string `json:"self,omitempty" structs:"self,omitempty"` + AccountID string `json:"accountId,omitempty" structs:"accountId,omitempty"` + AccountType string `json:"accountType,omitempty" structs:"accountType,omitempty"` // TODO: name & key are deprecated, see: // https://developer.atlassian.com/cloud/jira/platform/api-changes-for-user-privacy-announcement/ Name string `json:"name,omitempty" structs:"name,omitempty"` @@ -27,6 +28,7 @@ type User struct { DisplayName string `json:"displayName,omitempty" structs:"displayName,omitempty"` Active bool `json:"active,omitempty" structs:"active,omitempty"` TimeZone string `json:"timeZone,omitempty" structs:"timeZone,omitempty"` + Locale string `json:"locale,omitempty" structs:"locale,omitempty"` ApplicationKeys []string `json:"applicationKeys,omitempty" structs:"applicationKeys,omitempty"` } diff --git a/vendor/github.com/andygrunwald/go-jira/version.go b/vendor/github.com/andygrunwald/go-jira/version.go index 87bcde7b..2af81f47 100644 --- a/vendor/github.com/andygrunwald/go-jira/version.go +++ b/vendor/github.com/andygrunwald/go-jira/version.go @@ -18,7 +18,7 @@ type Version struct { Self string `json:"self,omitempty" structs:"self,omitempty"` ID string `json:"id,omitempty" structs:"id,omitempty"` Name string `json:"name,omitempty" structs:"name,omitempty"` - Description string `json:"description,omitempty" structs:"name,omitempty"` + Description string `json:"description,omitempty" structs:"description,omitempty"` Archived bool `json:"archived,omitempty" structs:"archived,omitempty"` Released bool `json:"released,omitempty" structs:"released,omitempty"` ReleaseDate string `json:"releaseDate,omitempty" structs:"releaseDate,omitempty"` diff --git a/vendor/github.com/codegangsta/negroni/CHANGELOG.md b/vendor/github.com/codegangsta/negroni/CHANGELOG.md index f4104318..9a6d638e 100644 --- a/vendor/github.com/codegangsta/negroni/CHANGELOG.md +++ b/vendor/github.com/codegangsta/negroni/CHANGELOG.md @@ -4,6 +4,11 @@ ## [Unreleased] - +## [1.0.0] - 2018-09-01 + +### Fixed +- `Logger` middleware now correctly handles paths containing a `%` instead of trying to treat it as a format specifier + ## [0.3.0] - 2017-11-11 ### Added - `With()` helper for building a new `Negroni` struct chaining handlers from diff --git a/vendor/github.com/codegangsta/negroni/README.md b/vendor/github.com/codegangsta/negroni/README.md index 8c2e9d85..17298559 100644 --- a/vendor/github.com/codegangsta/negroni/README.md +++ b/vendor/github.com/codegangsta/negroni/README.md @@ -17,8 +17,8 @@ you think it contains too much magic, then Negroni is a great fit. Language Translations: * [Deutsch (de_DE)](translations/README_de_de.md) * [Português Brasileiro (pt_BR)](translations/README_pt_br.md) -* [简体中文 (zh_cn)](translations/README_zh_CN.md) -* [繁體中文 (zh_tw)](translations/README_zh_tw.md) +* [简体中文 (zh_CN)](translations/README_zh_CN.md) +* [繁體中文 (zh_TW)](translations/README_zh_tw.md) * [日本語 (ja_JP)](translations/README_ja_JP.md) * [Français (fr_FR)](translations/README_fr_FR.md) @@ -504,6 +504,7 @@ linking your middleware if you have built one: | [Graceful](https://github.com/tylerb/graceful) | [Tyler Bunnell](https://github.com/tylerb) | Graceful HTTP Shutdown | | [gzip](https://github.com/phyber/negroni-gzip) | [phyber](https://github.com/phyber) | GZIP response compression | | [JWT Middleware](https://github.com/auth0/go-jwt-middleware) | [Auth0](https://github.com/auth0) | Middleware checks for a JWT on the `Authorization` header on incoming requests and decodes it| +| [JWT Middleware](https://github.com/mfuentesg/go-jwtmiddleware) | [Marcelo Fuentes](https://github.com/mfuentesg) | JWT middleware for golang | | [logrus](https://github.com/meatballhat/negroni-logrus) | [Dan Buch](https://github.com/meatballhat) | Logrus-based logger | | [oauth2](https://github.com/goincremental/negroni-oauth2) | [David Bochenski](https://github.com/bochenski) | oAuth2 middleware | | [onthefly](https://github.com/xyproto/onthefly) | [Alexander Rødseth](https://github.com/xyproto) | Generate TinySVG, HTML and CSS on the fly | @@ -518,6 +519,8 @@ linking your middleware if you have built one: | [xrequestid](https://github.com/pilu/xrequestid) | [Andrea Franz](https://github.com/pilu) | Middleware that assigns a random X-Request-Id header to each request | | [mgo session](https://github.com/joeljames/nigroni-mgo-session) | [Joel James](https://github.com/joeljames) | Middleware that handles creating and closing mgo sessions per request | | [digits](https://github.com/bamarni/digits) | [Bilal Amarni](https://github.com/bamarni) | Middleware that handles [Twitter Digits](https://get.digits.com/) authentication | +| [stats](https://github.com/guptachirag/stats) | [Chirag Gupta](https://github.com/guptachirag/stats) | Middleware that manages qps and latency stats for your endpoints and asynchronously flushes them to influx db | +| [Chaos](https://github.com/falzm/chaos) | [Marc Falzon](https://github.com/falzm) | Middleware for injecting chaotic behavior into application in a programmatic way | ## Examples diff --git a/vendor/github.com/codegangsta/negroni/logger.go b/vendor/github.com/codegangsta/negroni/logger.go index 5bf7731c..9c2216ba 100644 --- a/vendor/github.com/codegangsta/negroni/logger.go +++ b/vendor/github.com/codegangsta/negroni/logger.go @@ -10,8 +10,7 @@ import ( "time" ) -// LoggerEntry is the structure -// passed to the template. +// LoggerEntry is the structure passed to the template. type LoggerEntry struct { StartTime string Status int @@ -22,13 +21,10 @@ type LoggerEntry struct { Request *http.Request } -// LoggerDefaultFormat is the format -// logged used by the default Logger instance. -var LoggerDefaultFormat = "{{.StartTime}} | {{.Status}} | \t {{.Duration}} | {{.Hostname}} | {{.Method}} {{.Path}} \n" +// LoggerDefaultFormat is the format logged used by the default Logger instance. +var LoggerDefaultFormat = "{{.StartTime}} | {{.Status}} | \t {{.Duration}} | {{.Hostname}} | {{.Method}} {{.Path}}" -// LoggerDefaultDateFormat is the -// format used for date by the -// default Logger instance. +// LoggerDefaultDateFormat is the format used for date by the default Logger instance. var LoggerDefaultDateFormat = time.RFC3339 // ALogger interface @@ -78,5 +74,5 @@ func (l *Logger) ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.Ha buff := &bytes.Buffer{} l.template.Execute(buff, log) - l.Printf(buff.String()) + l.Println(buff.String()) } diff --git a/vendor/github.com/denisenkom/go-mssqldb/README.md b/vendor/github.com/denisenkom/go-mssqldb/README.md index 41d9461a..94d87fe0 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/README.md +++ b/vendor/github.com/denisenkom/go-mssqldb/README.md @@ -18,7 +18,7 @@ Other supported formats are listed below. ### Common parameters: -* `user id` - enter the SQL Server Authentication user id or the Windows Authentication user id in the DOMAIN\User format. On Windows, if user id is empty or missing Single-Sign-On is used. +* `user id` - enter the SQL Server Authentication user id or the Windows Authentication user id in the DOMAIN\User format. On Windows, if user id is empty or missing Single-Sign-On is used. The user domain sensitive to the case which is defined in the connection string. * `password` * `database` * `connection timeout` - in seconds (default is 0 for no timeout), set to 0 for no timeout. Recommended to set to 0 and use context to manage query and connection timeouts. @@ -56,7 +56,7 @@ Other supported formats are listed below. * `hostNameInCertificate` - Specifies the Common Name (CN) in the server certificate. Default value is the server host. * `ServerSPN` - The kerberos SPN (Service Principal Name) for the server. Default is MSSQLSvc/host:port. * `Workstation ID` - The workstation name (default is the host name) -* `ApplicationIntent` - Can be given the value `ReadOnly` to initiate a read-only connection to an Availability Group listener. +* `ApplicationIntent` - Can be given the value `ReadOnly` to initiate a read-only connection to an Availability Group listener. The `database` must be specified when connecting with `Application Intent` set to `ReadOnly`. ### The connection string can be specified in one of three formats: @@ -106,6 +106,26 @@ Other supported formats are listed below. * `odbc:server=localhost;user id=sa;password={foo{bar}` // Literal `{`, password is "foo{bar" * `odbc:server=localhost;user id=sa;password={foo}}bar}` // Escaped `} with `}}`, password is "foo}bar" +### Azure Active Directory authentication - preview + +The configuration of functionality might change in the future. + +Azure Active Directory (AAD) access tokens are relatively short lived and need to be +valid when a new connection is made. Authentication is supported using a callback func that +provides a fresh and valid token using a connector: +``` golang +conn, err := mssql.NewAccessTokenConnector( + "Server=test.database.windows.net;Database=testdb", + tokenProvider) +if err != nil { + // handle errors in DSN +} +db := sql.OpenDB(conn) +``` +Where `tokenProvider` is a function that returns a fresh access token or an error. None of these statements +actually trigger the retrieval of a token, this happens when the first statment is issued and a connection +is created. + ## Executing Stored Procedures To run a stored procedure, set the query text to the procedure name: @@ -220,9 +240,9 @@ are supported: * time.Time -> datetimeoffset or datetime (TDS version dependent) * mssql.DateTime1 -> datetime * mssql.DateTimeOffset -> datetimeoffset - * "cloud.google.com/go/civil".Date -> date - * "cloud.google.com/go/civil".DateTime -> datetime2 - * "cloud.google.com/go/civil".Time -> time + * "github.com/golang-sql/civil".Date -> date + * "github.com/golang-sql/civil".DateTime -> datetime2 + * "github.com/golang-sql/civil".Time -> time * mssql.TVP -> Table Value Parameter (TDS version dependent) ## Important Notes diff --git a/vendor/github.com/denisenkom/go-mssqldb/accesstokenconnector.go b/vendor/github.com/denisenkom/go-mssqldb/accesstokenconnector.go new file mode 100644 index 00000000..8dbe5099 --- /dev/null +++ b/vendor/github.com/denisenkom/go-mssqldb/accesstokenconnector.go @@ -0,0 +1,51 @@ +// +build go1.10 + +package mssql + +import ( + "context" + "database/sql/driver" + "errors" + "fmt" +) + +var _ driver.Connector = &accessTokenConnector{} + +// accessTokenConnector wraps Connector and injects a +// fresh access token when connecting to the database +type accessTokenConnector struct { + Connector + + accessTokenProvider func() (string, error) +} + +// NewAccessTokenConnector creates a new connector from a DSN and a token provider. +// The token provider func will be called when a new connection is requested and should return a valid access token. +// The returned connector may be used with sql.OpenDB. +func NewAccessTokenConnector(dsn string, tokenProvider func() (string, error)) (driver.Connector, error) { + if tokenProvider == nil { + return nil, errors.New("mssql: tokenProvider cannot be nil") + } + + conn, err := NewConnector(dsn) + if err != nil { + return nil, err + } + + c := &accessTokenConnector{ + Connector: *conn, + accessTokenProvider: tokenProvider, + } + return c, nil +} + +// Connect returns a new database connection +func (c *accessTokenConnector) Connect(ctx context.Context) (driver.Conn, error) { + var err error + c.Connector.params.fedAuthAccessToken, err = c.accessTokenProvider() + if err != nil { + return nil, fmt.Errorf("mssql: error retrieving access token: %+v", err) + } + + return c.Connector.Connect(ctx) +} diff --git a/vendor/github.com/denisenkom/go-mssqldb/appveyor.yml b/vendor/github.com/denisenkom/go-mssqldb/appveyor.yml index 2ae5456d..c4d2bb06 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/appveyor.yml +++ b/vendor/github.com/denisenkom/go-mssqldb/appveyor.yml @@ -10,7 +10,7 @@ environment: SQLUSER: sa SQLPASSWORD: Password12! DATABASE: test - GOVERSION: 110 + GOVERSION: 111 matrix: - GOVERSION: 18 SQLINSTANCE: SQL2016 @@ -18,6 +18,8 @@ environment: SQLINSTANCE: SQL2016 - GOVERSION: 110 SQLINSTANCE: SQL2016 + - GOVERSION: 111 + SQLINSTANCE: SQL2016 - SQLINSTANCE: SQL2014 - SQLINSTANCE: SQL2012SP1 - SQLINSTANCE: SQL2008R2SP2 @@ -27,7 +29,7 @@ install: - set PATH=%GOPATH%\bin;%GOROOT%\bin;%PATH% - go version - go env - - go get -u cloud.google.com/go/civil + - go get -u github.com/golang-sql/civil build_script: - go build diff --git a/vendor/github.com/denisenkom/go-mssqldb/buf.go b/vendor/github.com/denisenkom/go-mssqldb/buf.go index 927d75d1..ba39b40f 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/buf.go +++ b/vendor/github.com/denisenkom/go-mssqldb/buf.go @@ -221,23 +221,27 @@ func (r *tdsBuffer) uint16() uint16 { } func (r *tdsBuffer) BVarChar() string { - l := int(r.byte()) - return r.readUcs2(l) + return readBVarCharOrPanic(r) } -func (r *tdsBuffer) UsVarChar() string { - l := int(r.uint16()) - return r.readUcs2(l) -} - -func (r *tdsBuffer) readUcs2(numchars int) string { - b := make([]byte, numchars*2) - r.ReadFull(b) - res, err := ucs22str(b) +func readBVarCharOrPanic(r io.Reader) string { + s, err := readBVarChar(r) if err != nil { badStreamPanic(err) } - return res + return s +} + +func readUsVarCharOrPanic(r io.Reader) string { + s, err := readUsVarChar(r) + if err != nil { + badStreamPanic(err) + } + return s +} + +func (r *tdsBuffer) UsVarChar() string { + return readUsVarCharOrPanic(r) } func (r *tdsBuffer) Read(buf []byte) (copied int, err error) { diff --git a/vendor/github.com/denisenkom/go-mssqldb/bulkcopy.go b/vendor/github.com/denisenkom/go-mssqldb/bulkcopy.go index 3b319af8..1d5eacb3 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/bulkcopy.go +++ b/vendor/github.com/denisenkom/go-mssqldb/bulkcopy.go @@ -7,9 +7,10 @@ import ( "fmt" "math" "reflect" - "strconv" "strings" "time" + + "github.com/denisenkom/go-mssqldb/internal/decimal" ) type Bulk struct { @@ -42,6 +43,11 @@ type BulkOptions struct { type DataValue interface{} +const ( + sqlDateFormat = "2006-01-02" + sqlTimeFormat = "2006-01-02 15:04:05.999999999Z07:00" +) + func (cn *Conn) CreateBulk(table string, columns []string) (_ *Bulk) { b := Bulk{ctx: context.Background(), cn: cn, tablename: table, headerSent: false, columnsName: columns} b.Debug = false @@ -334,7 +340,7 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) case int64: intvalue = val default: - err = fmt.Errorf("mssql: invalid type for int column") + err = fmt.Errorf("mssql: invalid type for int column: %T", val) return } @@ -361,7 +367,7 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) case int64: floatvalue = float64(val) default: - err = fmt.Errorf("mssql: invalid type for float column: %s", val) + err = fmt.Errorf("mssql: invalid type for float column: %T %s", val, val) return } @@ -380,7 +386,7 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) case []byte: res.buffer = val default: - err = fmt.Errorf("mssql: invalid type for nvarchar column: %s", val) + err = fmt.Errorf("mssql: invalid type for nvarchar column: %T %s", val, val) return } res.ti.Size = len(res.buffer) @@ -392,14 +398,14 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) case []byte: res.buffer = val default: - err = fmt.Errorf("mssql: invalid type for varchar column: %s", val) + err = fmt.Errorf("mssql: invalid type for varchar column: %T %s", val, val) return } res.ti.Size = len(res.buffer) case typeBit, typeBitN: if reflect.TypeOf(val).Kind() != reflect.Bool { - err = fmt.Errorf("mssql: invalid type for bit column: %s", val) + err = fmt.Errorf("mssql: invalid type for bit column: %T %s", val, val) return } res.ti.TypeId = typeBitN @@ -413,18 +419,31 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) case time.Time: res.buffer = encodeDateTime2(val, int(col.ti.Scale)) res.ti.Size = len(res.buffer) + case string: + var t time.Time + if t, err = time.Parse(sqlTimeFormat, val); err != nil { + return res, fmt.Errorf("bulk: unable to convert string to date: %v", err) + } + res.buffer = encodeDateTime2(t, int(col.ti.Scale)) + res.ti.Size = len(res.buffer) default: - err = fmt.Errorf("mssql: invalid type for datetime2 column: %s", val) + err = fmt.Errorf("mssql: invalid type for datetime2 column: %T %s", val, val) return } case typeDateTimeOffsetN: switch val := val.(type) { case time.Time: - res.buffer = encodeDateTimeOffset(val, int(res.ti.Scale)) + res.buffer = encodeDateTimeOffset(val, int(col.ti.Scale)) + res.ti.Size = len(res.buffer) + case string: + var t time.Time + if t, err = time.Parse(sqlTimeFormat, val); err != nil { + return res, fmt.Errorf("bulk: unable to convert string to date: %v", err) + } + res.buffer = encodeDateTimeOffset(t, int(col.ti.Scale)) res.ti.Size = len(res.buffer) - default: - err = fmt.Errorf("mssql: invalid type for datetimeoffset column: %s", val) + err = fmt.Errorf("mssql: invalid type for datetimeoffset column: %T %s", val, val) return } case typeDateN: @@ -432,69 +451,79 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) case time.Time: res.buffer = encodeDate(val) res.ti.Size = len(res.buffer) + case string: + var t time.Time + if t, err = time.ParseInLocation(sqlDateFormat, val, time.UTC); err != nil { + return res, fmt.Errorf("bulk: unable to convert string to date: %v", err) + } + res.buffer = encodeDate(t) + res.ti.Size = len(res.buffer) default: - err = fmt.Errorf("mssql: invalid type for date column: %s", val) + err = fmt.Errorf("mssql: invalid type for date column: %T %s", val, val) return } case typeDateTime, typeDateTimeN, typeDateTim4: + var t time.Time switch val := val.(type) { case time.Time: - if col.ti.Size == 4 { - res.buffer = encodeDateTim4(val) - res.ti.Size = len(res.buffer) - } else if col.ti.Size == 8 { - res.buffer = encodeDateTime(val) - res.ti.Size = len(res.buffer) - } else { - err = fmt.Errorf("mssql: invalid size of column") + t = val + case string: + if t, err = time.Parse(sqlTimeFormat, val); err != nil { + return res, fmt.Errorf("bulk: unable to convert string to date: %v", err) } - default: - err = fmt.Errorf("mssql: invalid type for datetime column: %s", val) + err = fmt.Errorf("mssql: invalid type for datetime column: %T %s", val, val) + return + } + + if col.ti.Size == 4 { + res.buffer = encodeDateTim4(t) + res.ti.Size = len(res.buffer) + } else if col.ti.Size == 8 { + res.buffer = encodeDateTime(t) + res.ti.Size = len(res.buffer) + } else { + err = fmt.Errorf("mssql: invalid size of column %d", col.ti.Size) } // case typeMoney, typeMoney4, typeMoneyN: case typeDecimal, typeDecimalN, typeNumeric, typeNumericN: - var value float64 + prec := col.ti.Prec + scale := col.ti.Scale + var dec decimal.Decimal switch v := val.(type) { case int: - value = float64(v) + dec = decimal.Int64ToDecimalScale(int64(v), 0) case int8: - value = float64(v) + dec = decimal.Int64ToDecimalScale(int64(v), 0) case int16: - value = float64(v) + dec = decimal.Int64ToDecimalScale(int64(v), 0) case int32: - value = float64(v) + dec = decimal.Int64ToDecimalScale(int64(v), 0) case int64: - value = float64(v) + dec = decimal.Int64ToDecimalScale(int64(v), 0) case float32: - value = float64(v) + dec, err = decimal.Float64ToDecimalScale(float64(v), scale) case float64: - value = v + dec, err = decimal.Float64ToDecimalScale(float64(v), scale) case string: - if value, err = strconv.ParseFloat(v, 64); err != nil { - return res, fmt.Errorf("bulk: unable to convert string to float: %v", err) - } + dec, err = decimal.StringToDecimalScale(v, scale) default: - return res, fmt.Errorf("unknown value for decimal: %#v", v) + return res, fmt.Errorf("unknown value for decimal: %T %#v", v, v) } - perc := col.ti.Prec - scale := col.ti.Scale - var dec Decimal - dec, err = Float64ToDecimalScale(value, scale) if err != nil { return res, err } - dec.prec = perc + dec.SetPrec(prec) var length byte switch { - case perc <= 9: + case prec <= 9: length = 4 - case perc <= 19: + case prec <= 19: length = 8 - case perc <= 28: + case prec <= 28: length = 12 default: length = 16 @@ -504,7 +533,7 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) // first byte length written by typeInfo.writer res.ti.Size = int(length) + 1 // second byte sign - if value < 0 { + if !dec.IsPositive() { buf[0] = 0 } else { buf[0] = 1 @@ -527,7 +556,7 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) res.ti.Size = len(val) res.buffer = val default: - err = fmt.Errorf("mssql: invalid type for Binary column: %s", val) + err = fmt.Errorf("mssql: invalid type for Binary column: %T %s", val, val) return } case typeGuid: @@ -536,7 +565,7 @@ func (b *Bulk) makeParam(val DataValue, col columnStruct) (res param, err error) res.ti.Size = len(val) res.buffer = val default: - err = fmt.Errorf("mssql: invalid type for Guid column: %s", val) + err = fmt.Errorf("mssql: invalid type for Guid column: %T %s", val, val) return } diff --git a/vendor/github.com/denisenkom/go-mssqldb/conn_str.go b/vendor/github.com/denisenkom/go-mssqldb/conn_str.go new file mode 100644 index 00000000..26ac50f3 --- /dev/null +++ b/vendor/github.com/denisenkom/go-mssqldb/conn_str.go @@ -0,0 +1,471 @@ +package mssql + +import ( + "fmt" + "net" + "net/url" + "os" + "strconv" + "strings" + "time" + "unicode" +) + +const defaultServerPort = 1433 + +type connectParams struct { + logFlags uint64 + port uint64 + host string + instance string + database string + user string + password string + dial_timeout time.Duration + conn_timeout time.Duration + keepAlive time.Duration + encrypt bool + disableEncryption bool + trustServerCertificate bool + certificate string + hostInCertificate string + hostInCertificateProvided bool + serverSPN string + workstation string + appname string + typeFlags uint8 + failOverPartner string + failOverPort uint64 + packetSize uint16 + fedAuthAccessToken string +} + +func parseConnectParams(dsn string) (connectParams, error) { + var p connectParams + + var params map[string]string + if strings.HasPrefix(dsn, "odbc:") { + parameters, err := splitConnectionStringOdbc(dsn[len("odbc:"):]) + if err != nil { + return p, err + } + params = parameters + } else if strings.HasPrefix(dsn, "sqlserver://") { + parameters, err := splitConnectionStringURL(dsn) + if err != nil { + return p, err + } + params = parameters + } else { + params = splitConnectionString(dsn) + } + + strlog, ok := params["log"] + if ok { + var err error + p.logFlags, err = strconv.ParseUint(strlog, 10, 64) + if err != nil { + return p, fmt.Errorf("Invalid log parameter '%s': %s", strlog, err.Error()) + } + } + server := params["server"] + parts := strings.SplitN(server, `\`, 2) + p.host = parts[0] + if p.host == "." || strings.ToUpper(p.host) == "(LOCAL)" || p.host == "" { + p.host = "localhost" + } + if len(parts) > 1 { + p.instance = parts[1] + } + p.database = params["database"] + p.user = params["user id"] + p.password = params["password"] + + p.port = 0 + strport, ok := params["port"] + if ok { + var err error + p.port, err = strconv.ParseUint(strport, 10, 16) + if err != nil { + f := "Invalid tcp port '%v': %v" + return p, fmt.Errorf(f, strport, err.Error()) + } + } + + // https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option + // Default packet size remains at 4096 bytes + p.packetSize = 4096 + strpsize, ok := params["packet size"] + if ok { + var err error + psize, err := strconv.ParseUint(strpsize, 0, 16) + if err != nil { + f := "Invalid packet size '%v': %v" + return p, fmt.Errorf(f, strpsize, err.Error()) + } + + // Ensure packet size falls within the TDS protocol range of 512 to 32767 bytes + // NOTE: Encrypted connections have a maximum size of 16383 bytes. If you request + // a higher packet size, the server will respond with an ENVCHANGE request to + // alter the packet size to 16383 bytes. + p.packetSize = uint16(psize) + if p.packetSize < 512 { + p.packetSize = 512 + } else if p.packetSize > 32767 { + p.packetSize = 32767 + } + } + + // https://msdn.microsoft.com/en-us/library/dd341108.aspx + // + // Do not set a connection timeout. Use Context to manage such things. + // Default to zero, but still allow it to be set. + if strconntimeout, ok := params["connection timeout"]; ok { + timeout, err := strconv.ParseUint(strconntimeout, 10, 64) + if err != nil { + f := "Invalid connection timeout '%v': %v" + return p, fmt.Errorf(f, strconntimeout, err.Error()) + } + p.conn_timeout = time.Duration(timeout) * time.Second + } + p.dial_timeout = 15 * time.Second + if strdialtimeout, ok := params["dial timeout"]; ok { + timeout, err := strconv.ParseUint(strdialtimeout, 10, 64) + if err != nil { + f := "Invalid dial timeout '%v': %v" + return p, fmt.Errorf(f, strdialtimeout, err.Error()) + } + p.dial_timeout = time.Duration(timeout) * time.Second + } + + // default keep alive should be 30 seconds according to spec: + // https://msdn.microsoft.com/en-us/library/dd341108.aspx + p.keepAlive = 30 * time.Second + if keepAlive, ok := params["keepalive"]; ok { + timeout, err := strconv.ParseUint(keepAlive, 10, 64) + if err != nil { + f := "Invalid keepAlive value '%s': %s" + return p, fmt.Errorf(f, keepAlive, err.Error()) + } + p.keepAlive = time.Duration(timeout) * time.Second + } + encrypt, ok := params["encrypt"] + if ok { + if strings.EqualFold(encrypt, "DISABLE") { + p.disableEncryption = true + } else { + var err error + p.encrypt, err = strconv.ParseBool(encrypt) + if err != nil { + f := "Invalid encrypt '%s': %s" + return p, fmt.Errorf(f, encrypt, err.Error()) + } + } + } else { + p.trustServerCertificate = true + } + trust, ok := params["trustservercertificate"] + if ok { + var err error + p.trustServerCertificate, err = strconv.ParseBool(trust) + if err != nil { + f := "Invalid trust server certificate '%s': %s" + return p, fmt.Errorf(f, trust, err.Error()) + } + } + p.certificate = params["certificate"] + p.hostInCertificate, ok = params["hostnameincertificate"] + if ok { + p.hostInCertificateProvided = true + } else { + p.hostInCertificate = p.host + p.hostInCertificateProvided = false + } + + serverSPN, ok := params["serverspn"] + if ok { + p.serverSPN = serverSPN + } else { + p.serverSPN = generateSpn(p.host, resolveServerPort(p.port)) + } + + workstation, ok := params["workstation id"] + if ok { + p.workstation = workstation + } else { + workstation, err := os.Hostname() + if err == nil { + p.workstation = workstation + } + } + + appname, ok := params["app name"] + if !ok { + appname = "go-mssqldb" + } + p.appname = appname + + appintent, ok := params["applicationintent"] + if ok { + if appintent == "ReadOnly" { + if p.database == "" { + return p, fmt.Errorf("Database must be specified when ApplicationIntent is ReadOnly") + } + p.typeFlags |= fReadOnlyIntent + } + } + + failOverPartner, ok := params["failoverpartner"] + if ok { + p.failOverPartner = failOverPartner + } + + failOverPort, ok := params["failoverport"] + if ok { + var err error + p.failOverPort, err = strconv.ParseUint(failOverPort, 0, 16) + if err != nil { + f := "Invalid tcp port '%v': %v" + return p, fmt.Errorf(f, failOverPort, err.Error()) + } + } + + return p, nil +} + +func splitConnectionString(dsn string) (res map[string]string) { + res = map[string]string{} + parts := strings.Split(dsn, ";") + for _, part := range parts { + if len(part) == 0 { + continue + } + lst := strings.SplitN(part, "=", 2) + name := strings.TrimSpace(strings.ToLower(lst[0])) + if len(name) == 0 { + continue + } + var value string = "" + if len(lst) > 1 { + value = strings.TrimSpace(lst[1]) + } + res[name] = value + } + return res +} + +// Splits a URL of the form sqlserver://username:password@host/instance?param1=value¶m2=value +func splitConnectionStringURL(dsn string) (map[string]string, error) { + res := map[string]string{} + + u, err := url.Parse(dsn) + if err != nil { + return res, err + } + + if u.Scheme != "sqlserver" { + return res, fmt.Errorf("scheme %s is not recognized", u.Scheme) + } + + if u.User != nil { + res["user id"] = u.User.Username() + p, exists := u.User.Password() + if exists { + res["password"] = p + } + } + + host, port, err := net.SplitHostPort(u.Host) + if err != nil { + host = u.Host + } + + if len(u.Path) > 0 { + res["server"] = host + "\\" + u.Path[1:] + } else { + res["server"] = host + } + + if len(port) > 0 { + res["port"] = port + } + + query := u.Query() + for k, v := range query { + if len(v) > 1 { + return res, fmt.Errorf("key %s provided more than once", k) + } + res[strings.ToLower(k)] = v[0] + } + + return res, nil +} + +// Splits a URL in the ODBC format +func splitConnectionStringOdbc(dsn string) (map[string]string, error) { + res := map[string]string{} + + type parserState int + const ( + // Before the start of a key + parserStateBeforeKey parserState = iota + + // Inside a key + parserStateKey + + // Beginning of a value. May be bare or braced + parserStateBeginValue + + // Inside a bare value + parserStateBareValue + + // Inside a braced value + parserStateBracedValue + + // A closing brace inside a braced value. + // May be the end of the value or an escaped closing brace, depending on the next character + parserStateBracedValueClosingBrace + + // After a value. Next character should be a semicolon or whitespace. + parserStateEndValue + ) + + var state = parserStateBeforeKey + + var key string + var value string + + for i, c := range dsn { + switch state { + case parserStateBeforeKey: + switch { + case c == '=': + return res, fmt.Errorf("Unexpected character = at index %d. Expected start of key or semi-colon or whitespace.", i) + case !unicode.IsSpace(c) && c != ';': + state = parserStateKey + key += string(c) + } + + case parserStateKey: + switch c { + case '=': + key = normalizeOdbcKey(key) + state = parserStateBeginValue + + case ';': + // Key without value + key = normalizeOdbcKey(key) + res[key] = value + key = "" + value = "" + state = parserStateBeforeKey + + default: + key += string(c) + } + + case parserStateBeginValue: + switch { + case c == '{': + state = parserStateBracedValue + case c == ';': + // Empty value + res[key] = value + key = "" + state = parserStateBeforeKey + case unicode.IsSpace(c): + // Ignore whitespace + default: + state = parserStateBareValue + value += string(c) + } + + case parserStateBareValue: + if c == ';' { + res[key] = strings.TrimRightFunc(value, unicode.IsSpace) + key = "" + value = "" + state = parserStateBeforeKey + } else { + value += string(c) + } + + case parserStateBracedValue: + if c == '}' { + state = parserStateBracedValueClosingBrace + } else { + value += string(c) + } + + case parserStateBracedValueClosingBrace: + if c == '}' { + // Escaped closing brace + value += string(c) + state = parserStateBracedValue + continue + } + + // End of braced value + res[key] = value + key = "" + value = "" + + // This character is the first character past the end, + // so it needs to be parsed like the parserStateEndValue state. + state = parserStateEndValue + switch { + case c == ';': + state = parserStateBeforeKey + case unicode.IsSpace(c): + // Ignore whitespace + default: + return res, fmt.Errorf("Unexpected character %c at index %d. Expected semi-colon or whitespace.", c, i) + } + + case parserStateEndValue: + switch { + case c == ';': + state = parserStateBeforeKey + case unicode.IsSpace(c): + // Ignore whitespace + default: + return res, fmt.Errorf("Unexpected character %c at index %d. Expected semi-colon or whitespace.", c, i) + } + } + } + + switch state { + case parserStateBeforeKey: // Okay + case parserStateKey: // Unfinished key. Treat as key without value. + key = normalizeOdbcKey(key) + res[key] = value + case parserStateBeginValue: // Empty value + res[key] = value + case parserStateBareValue: + res[key] = strings.TrimRightFunc(value, unicode.IsSpace) + case parserStateBracedValue: + return res, fmt.Errorf("Unexpected end of braced value at index %d.", len(dsn)) + case parserStateBracedValueClosingBrace: // End of braced value + res[key] = value + case parserStateEndValue: // Okay + } + + return res, nil +} + +// Normalizes the given string as an ODBC-format key +func normalizeOdbcKey(s string) string { + return strings.ToLower(strings.TrimRightFunc(s, unicode.IsSpace)) +} + +func resolveServerPort(port uint64) uint64 { + if port == 0 { + return defaultServerPort + } + + return port +} + +func generateSpn(host string, port uint64) string { + return fmt.Sprintf("MSSQLSvc/%s:%d", host, port) +} diff --git a/vendor/github.com/denisenkom/go-mssqldb/decimal.go b/vendor/github.com/denisenkom/go-mssqldb/decimal.go deleted file mode 100644 index 372f64b4..00000000 --- a/vendor/github.com/denisenkom/go-mssqldb/decimal.go +++ /dev/null @@ -1,131 +0,0 @@ -package mssql - -import ( - "encoding/binary" - "errors" - "math" - "math/big" -) - -// http://msdn.microsoft.com/en-us/library/ee780893.aspx -type Decimal struct { - integer [4]uint32 - positive bool - prec uint8 - scale uint8 -} - -var scaletblflt64 [39]float64 - -func (d Decimal) ToFloat64() float64 { - val := float64(0) - for i := 3; i >= 0; i-- { - val *= 0x100000000 - val += float64(d.integer[i]) - } - if !d.positive { - val = -val - } - if d.scale != 0 { - val /= scaletblflt64[d.scale] - } - return val -} - -const autoScale = 100 - -func Float64ToDecimal(f float64) (Decimal, error) { - return Float64ToDecimalScale(f, autoScale) -} - -func Float64ToDecimalScale(f float64, scale uint8) (Decimal, error) { - var dec Decimal - if math.IsNaN(f) { - return dec, errors.New("NaN") - } - if math.IsInf(f, 0) { - return dec, errors.New("Infinity can't be converted to decimal") - } - dec.positive = f >= 0 - if !dec.positive { - f = math.Abs(f) - } - if f > 3.402823669209385e+38 { - return dec, errors.New("Float value is out of range") - } - dec.prec = 20 - var integer float64 - for dec.scale = 0; dec.scale <= scale; dec.scale++ { - integer = f * scaletblflt64[dec.scale] - _, frac := math.Modf(integer) - if frac == 0 && scale == autoScale { - break - } - } - for i := 0; i < 4; i++ { - mod := math.Mod(integer, 0x100000000) - integer -= mod - integer /= 0x100000000 - dec.integer[i] = uint32(mod) - } - return dec, nil -} - -func init() { - var acc float64 = 1 - for i := 0; i <= 38; i++ { - scaletblflt64[i] = acc - acc *= 10 - } -} - -func (d Decimal) BigInt() big.Int { - bytes := make([]byte, 16) - binary.BigEndian.PutUint32(bytes[0:4], d.integer[3]) - binary.BigEndian.PutUint32(bytes[4:8], d.integer[2]) - binary.BigEndian.PutUint32(bytes[8:12], d.integer[1]) - binary.BigEndian.PutUint32(bytes[12:16], d.integer[0]) - var x big.Int - x.SetBytes(bytes) - if !d.positive { - x.Neg(&x) - } - return x -} - -func (d Decimal) Bytes() []byte { - x := d.BigInt() - return scaleBytes(x.String(), d.scale) -} - -func (d Decimal) UnscaledBytes() []byte { - x := d.BigInt() - return x.Bytes() -} - -func scaleBytes(s string, scale uint8) []byte { - z := make([]byte, 0, len(s)+1) - if s[0] == '-' || s[0] == '+' { - z = append(z, byte(s[0])) - s = s[1:] - } - pos := len(s) - int(scale) - if pos <= 0 { - z = append(z, byte('0')) - } else if pos > 0 { - z = append(z, []byte(s[:pos])...) - } - if scale > 0 { - z = append(z, byte('.')) - for pos < 0 { - z = append(z, byte('0')) - pos++ - } - z = append(z, []byte(s[pos:])...) - } - return z -} - -func (d Decimal) String() string { - return string(d.Bytes()) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/go.mod b/vendor/github.com/denisenkom/go-mssqldb/go.mod index 096fc96b..ebc02ab8 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/go.mod +++ b/vendor/github.com/denisenkom/go-mssqldb/go.mod @@ -3,8 +3,6 @@ module github.com/denisenkom/go-mssqldb go 1.11 require ( - cloud.google.com/go v0.37.4 + github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect - gopkg.in/yaml.v2 v2.2.2 // indirect ) diff --git a/vendor/github.com/denisenkom/go-mssqldb/go.sum b/vendor/github.com/denisenkom/go-mssqldb/go.sum index e1936ecf..1887801b 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/go.sum +++ b/vendor/github.com/denisenkom/go-mssqldb/go.sum @@ -1,168 +1,5 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.2 h1:4y4L7BdHenTfZL0HervofNTHh9Ad6mNX72cQvl+5eH0= -cloud.google.com/go v0.37.2/go.mod h1:H8IAquKe2L30IxoupDgqTaQvKSwF/c8prYHynGIWQbA= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= -go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= -google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/denisenkom/go-mssqldb/internal/decimal/decimal.go b/vendor/github.com/denisenkom/go-mssqldb/internal/decimal/decimal.go new file mode 100644 index 00000000..7da0375d --- /dev/null +++ b/vendor/github.com/denisenkom/go-mssqldb/internal/decimal/decimal.go @@ -0,0 +1,252 @@ +package decimal + +import ( + "encoding/binary" + "errors" + "fmt" + "math" + "math/big" + "strings" +) + +// Decimal represents decimal type in the Microsoft Open Specifications: http://msdn.microsoft.com/en-us/library/ee780893.aspx +type Decimal struct { + integer [4]uint32 // Little-endian + positive bool + prec uint8 + scale uint8 +} + +var ( + scaletblflt64 [39]float64 + int10 big.Int + int1e5 big.Int +) + +func init() { + var acc float64 = 1 + for i := 0; i <= 38; i++ { + scaletblflt64[i] = acc + acc *= 10 + } + + int10.SetInt64(10) + int1e5.SetInt64(1e5) +} + +const autoScale = 100 + +// SetInteger sets the ind'th element in the integer array +func (d *Decimal) SetInteger(integer uint32, ind uint8) { + d.integer[ind] = integer +} + +// SetPositive sets the positive member +func (d *Decimal) SetPositive(positive bool) { + d.positive = positive +} + +// SetPrec sets the prec member +func (d *Decimal) SetPrec(prec uint8) { + d.prec = prec +} + +// SetScale sets the scale member +func (d *Decimal) SetScale(scale uint8) { + d.scale = scale +} + +// IsPositive returns true if the Decimal is positive +func (d *Decimal) IsPositive() bool { + return d.positive +} + +// ToFloat64 converts decimal to a float64 +func (d Decimal) ToFloat64() float64 { + val := float64(0) + for i := 3; i >= 0; i-- { + val *= 0x100000000 + val += float64(d.integer[i]) + } + if !d.positive { + val = -val + } + if d.scale != 0 { + val /= scaletblflt64[d.scale] + } + return val +} + +// BigInt converts decimal to a bigint +func (d Decimal) BigInt() big.Int { + bytes := make([]byte, 16) + binary.BigEndian.PutUint32(bytes[0:4], d.integer[3]) + binary.BigEndian.PutUint32(bytes[4:8], d.integer[2]) + binary.BigEndian.PutUint32(bytes[8:12], d.integer[1]) + binary.BigEndian.PutUint32(bytes[12:16], d.integer[0]) + var x big.Int + x.SetBytes(bytes) + if !d.positive { + x.Neg(&x) + } + return x +} + +// Bytes converts decimal to a scaled byte slice +func (d Decimal) Bytes() []byte { + x := d.BigInt() + return ScaleBytes(x.String(), d.scale) +} + +// UnscaledBytes converts decimal to a unscaled byte slice +func (d Decimal) UnscaledBytes() []byte { + x := d.BigInt() + return x.Bytes() +} + +// String converts decimal to a string +func (d Decimal) String() string { + return string(d.Bytes()) +} + +// Float64ToDecimal converts float64 to decimal +func Float64ToDecimal(f float64) (Decimal, error) { + return Float64ToDecimalScale(f, autoScale) +} + +// Float64ToDecimalScale converts float64 to decimal; user can specify the scale +func Float64ToDecimalScale(f float64, scale uint8) (Decimal, error) { + var dec Decimal + if math.IsNaN(f) { + return dec, errors.New("NaN") + } + if math.IsInf(f, 0) { + return dec, errors.New("Infinity can't be converted to decimal") + } + dec.positive = f >= 0 + if !dec.positive { + f = math.Abs(f) + } + if f > 3.402823669209385e+38 { + return dec, errors.New("Float value is out of range") + } + dec.prec = 20 + var integer float64 + for dec.scale = 0; dec.scale <= scale; dec.scale++ { + integer = f * scaletblflt64[dec.scale] + _, frac := math.Modf(integer) + if frac == 0 && scale == autoScale { + break + } + } + for i := 0; i < 4; i++ { + mod := math.Mod(integer, 0x100000000) + integer -= mod + integer /= 0x100000000 + dec.integer[i] = uint32(mod) + if mod-math.Trunc(mod) >= 0.5 { + dec.integer[i] = uint32(mod) + 1 + } + } + return dec, nil +} + +// Int64ToDecimalScale converts float64 to decimal; user can specify the scale +func Int64ToDecimalScale(v int64, scale uint8) Decimal { + positive := v >= 0 + if !positive { + if v == math.MinInt64 { + // Special case - can't negate + return Decimal{ + integer: [4]uint32{0, 0x80000000, 0, 0}, + positive: false, + prec: 20, + scale: 0, + } + } + v = -v + } + return Decimal{ + integer: [4]uint32{uint32(v), uint32(v >> 32), 0, 0}, + positive: positive, + prec: 20, + scale: scale, + } +} + +// StringToDecimalScale converts string to decimal +func StringToDecimalScale(v string, outScale uint8) (Decimal, error) { + var r big.Int + var unscaled string + var inScale int + + point := strings.LastIndexByte(v, '.') + if point == -1 { + inScale = 0 + unscaled = v + } else { + inScale = len(v) - point - 1 + unscaled = v[:point] + v[point+1:] + } + if inScale > math.MaxUint8 { + return Decimal{}, fmt.Errorf("can't parse %q as a decimal number: scale too large", v) + } + + _, ok := r.SetString(unscaled, 10) + if !ok { + return Decimal{}, fmt.Errorf("can't parse %q as a decimal number", v) + } + + if inScale > int(outScale) { + return Decimal{}, fmt.Errorf("can't parse %q as a decimal number: scale %d is larger than the scale %d of the target column", v, inScale, outScale) + } + for inScale < int(outScale) { + if int(outScale)-inScale >= 5 { + r.Mul(&r, &int1e5) + inScale += 5 + } else { + r.Mul(&r, &int10) + inScale++ + } + } + + bytes := r.Bytes() + if len(bytes) > 16 { + return Decimal{}, fmt.Errorf("can't parse %q as a decimal number: precision too large", v) + } + var out [4]uint32 + for i, b := range bytes { + pos := len(bytes) - i - 1 + out[pos/4] += uint32(b) << uint(pos%4*8) + } + return Decimal{ + integer: out, + positive: r.Sign() >= 0, + prec: 20, + scale: uint8(inScale), + }, nil +} + +// ScaleBytes converts a stringified decimal to a scaled byte slice +func ScaleBytes(s string, scale uint8) []byte { + z := make([]byte, 0, len(s)+1) + if s[0] == '-' || s[0] == '+' { + z = append(z, byte(s[0])) + s = s[1:] + } + pos := len(s) - int(scale) + if pos <= 0 { + z = append(z, byte('0')) + } else if pos > 0 { + z = append(z, []byte(s[:pos])...) + } + if scale > 0 { + z = append(z, byte('.')) + for pos < 0 { + z = append(z, byte('0')) + pos++ + } + z = append(z, []byte(s[pos:])...) + } + return z +} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql.go b/vendor/github.com/denisenkom/go-mssqldb/mssql.go index e9d2bfd7..a74bc7e3 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql.go +++ b/vendor/github.com/denisenkom/go-mssqldb/mssql.go @@ -397,7 +397,10 @@ func (s *Stmt) Close() error { } func (s *Stmt) SetQueryNotification(id, options string, timeout time.Duration) { - to := uint32(timeout / time.Second) + // 2.2.5.3.1 Query Notifications Header + // https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/e168d373-a7b7-41aa-b6ca-25985466a7e0 + // Timeout in milliseconds in TDS protocol. + to := uint32(timeout / time.Millisecond) if to < 1 { to = 1 } @@ -613,11 +616,13 @@ loop: break loop case doneStruct: if token.isError() { + cancel() return nil, s.c.checkBadConn(token.getError()) } case ReturnStatus: s.c.setReturnStatus(token) case error: + cancel() return nil, s.c.checkBadConn(token) } } @@ -876,29 +881,6 @@ func (r *Result) RowsAffected() (int64, error) { return r.rowsAffected, nil } -func (r *Result) LastInsertId() (int64, error) { - s, err := r.c.Prepare("select cast(@@identity as bigint)") - if err != nil { - return 0, err - } - defer s.Close() - rows, err := s.Query(nil) - if err != nil { - return 0, err - } - defer rows.Close() - dest := make([]driver.Value, 1) - err = rows.Next(dest) - if err != nil { - return 0, err - } - if dest[0] == nil { - return -1, errors.New("There is no generated identity value") - } - lastInsertId := dest[0].(int64) - return lastInsertId, nil -} - var _ driver.Pinger = &Conn{} // Ping is used to check if the remote server is available and satisfies the Pinger interface. diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_go110.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_go110.go index 833f0471..6d76fbad 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql_go110.go +++ b/vendor/github.com/denisenkom/go-mssqldb/mssql_go110.go @@ -5,6 +5,7 @@ package mssql import ( "context" "database/sql/driver" + "errors" ) var _ driver.Connector = &Connector{} @@ -45,3 +46,7 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) { func (c *Connector) Driver() driver.Driver { return c.driver } + +func (r *Result) LastInsertId() (int64, error) { + return -1, errors.New("LastInsertId is not supported. Please use the OUTPUT clause or add `select ID = convert(bigint, SCOPE_IDENTITY())` to the end of your query.") +} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_go110pre.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_go110pre.go new file mode 100644 index 00000000..3baae0c4 --- /dev/null +++ b/vendor/github.com/denisenkom/go-mssqldb/mssql_go110pre.go @@ -0,0 +1,31 @@ +// +build !go1.10 + +package mssql + +import ( + "database/sql/driver" + "errors" +) + +func (r *Result) LastInsertId() (int64, error) { + s, err := r.c.Prepare("select cast(@@identity as bigint)") + if err != nil { + return 0, err + } + defer s.Close() + rows, err := s.Query(nil) + if err != nil { + return 0, err + } + defer rows.Close() + dest := make([]driver.Value, 1) + err = rows.Next(dest) + if err != nil { + return 0, err + } + if dest[0] == nil { + return -1, errors.New("There is no generated identity value") + } + lastInsertId := dest[0].(int64) + return lastInsertId, nil +} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_go19.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_go19.go index 7f2295c3..a2bd1167 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql_go19.go +++ b/vendor/github.com/denisenkom/go-mssqldb/mssql_go19.go @@ -11,7 +11,7 @@ import ( "time" // "github.com/cockroachdb/apd" - "cloud.google.com/go/civil" + "github.com/golang-sql/civil" ) // Type alias provided for compatibility. diff --git a/vendor/github.com/denisenkom/go-mssqldb/net.go b/vendor/github.com/denisenkom/go-mssqldb/net.go index e3864d1a..94858cc7 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/net.go +++ b/vendor/github.com/denisenkom/go-mssqldb/net.go @@ -9,9 +9,6 @@ import ( type timeoutConn struct { c net.Conn timeout time.Duration - buf *tdsBuffer - packetPending bool - continueRead bool } func newTimeoutConn(conn net.Conn, timeout time.Duration) *timeoutConn { @@ -22,32 +19,6 @@ func newTimeoutConn(conn net.Conn, timeout time.Duration) *timeoutConn { } func (c *timeoutConn) Read(b []byte) (n int, err error) { - if c.buf != nil { - if c.packetPending { - c.packetPending = false - err = c.buf.FinishPacket() - if err != nil { - err = fmt.Errorf("Cannot send handshake packet: %s", err.Error()) - return - } - c.continueRead = false - } - if !c.continueRead { - var packet packetType - packet, err = c.buf.BeginRead() - if err != nil { - err = fmt.Errorf("Cannot read handshake packet: %s", err.Error()) - return - } - if packet != packPrelogin { - err = fmt.Errorf("unexpected packet %d, expecting prelogin", packet) - return - } - c.continueRead = true - } - n, err = c.buf.Read(b) - return - } if c.timeout > 0 { err = c.c.SetDeadline(time.Now().Add(c.timeout)) if err != nil { @@ -58,17 +29,6 @@ func (c *timeoutConn) Read(b []byte) (n int, err error) { } func (c *timeoutConn) Write(b []byte) (n int, err error) { - if c.buf != nil { - if !c.packetPending { - c.buf.BeginPacket(packPrelogin, false) - c.packetPending = true - } - n, err = c.buf.Write(b) - if err != nil { - return - } - return - } if c.timeout > 0 { err = c.c.SetDeadline(time.Now().Add(c.timeout)) if err != nil { @@ -101,3 +61,108 @@ func (c timeoutConn) SetReadDeadline(t time.Time) error { func (c timeoutConn) SetWriteDeadline(t time.Time) error { panic("Not implemented") } + +// this connection is used during TLS Handshake +// TDS protocol requires TLS handshake messages to be sent inside TDS packets +type tlsHandshakeConn struct { + buf *tdsBuffer + packetPending bool + continueRead bool +} + +func (c *tlsHandshakeConn) Read(b []byte) (n int, err error) { + if c.packetPending { + c.packetPending = false + err = c.buf.FinishPacket() + if err != nil { + err = fmt.Errorf("Cannot send handshake packet: %s", err.Error()) + return + } + c.continueRead = false + } + if !c.continueRead { + var packet packetType + packet, err = c.buf.BeginRead() + if err != nil { + err = fmt.Errorf("Cannot read handshake packet: %s", err.Error()) + return + } + if packet != packPrelogin { + err = fmt.Errorf("unexpected packet %d, expecting prelogin", packet) + return + } + c.continueRead = true + } + return c.buf.Read(b) +} + +func (c *tlsHandshakeConn) Write(b []byte) (n int, err error) { + if !c.packetPending { + c.buf.BeginPacket(packPrelogin, false) + c.packetPending = true + } + return c.buf.Write(b) +} + +func (c *tlsHandshakeConn) Close() error { + panic("Not implemented") +} + +func (c *tlsHandshakeConn) LocalAddr() net.Addr { + panic("Not implemented") +} + +func (c *tlsHandshakeConn) RemoteAddr() net.Addr { + panic("Not implemented") +} + +func (c *tlsHandshakeConn) SetDeadline(t time.Time) error { + panic("Not implemented") +} + +func (c *tlsHandshakeConn) SetReadDeadline(t time.Time) error { + panic("Not implemented") +} + +func (c *tlsHandshakeConn) SetWriteDeadline(t time.Time) error { + panic("Not implemented") +} + +// this connection just delegates all methods to it's wrapped connection +// it also allows switching underlying connection on the fly +// it is needed because tls.Conn does not allow switching underlying connection +type passthroughConn struct { + c net.Conn +} + +func (c passthroughConn) Read(b []byte) (n int, err error) { + return c.c.Read(b) +} + +func (c passthroughConn) Write(b []byte) (n int, err error) { + return c.c.Write(b) +} + +func (c passthroughConn) Close() error { + return c.c.Close() +} + +func (c passthroughConn) LocalAddr() net.Addr { + panic("Not implemented") +} + +func (c passthroughConn) RemoteAddr() net.Addr { + panic("Not implemented") +} + +func (c passthroughConn) SetDeadline(t time.Time) error { + panic("Not implemented") +} + +func (c passthroughConn) SetReadDeadline(t time.Time) error { + panic("Not implemented") +} + +func (c passthroughConn) SetWriteDeadline(t time.Time) error { + panic("Not implemented") +} diff --git a/vendor/github.com/denisenkom/go-mssqldb/ntlm.go b/vendor/github.com/denisenkom/go-mssqldb/ntlm.go index 7c0cc4f7..ea9148ae 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/ntlm.go +++ b/vendor/github.com/denisenkom/go-mssqldb/ntlm.go @@ -4,11 +4,14 @@ package mssql import ( "crypto/des" + "crypto/hmac" "crypto/md5" "crypto/rand" "encoding/binary" "errors" + "fmt" "strings" + "time" "unicode/utf16" "golang.org/x/crypto/md4" @@ -198,86 +201,204 @@ func ntlmSessionResponse(clientNonce [8]byte, serverChallenge [8]byte, password return response(hash, passwordHash) } -func (auth *ntlmAuth) NextBytes(bytes []byte) ([]byte, error) { - if string(bytes[0:8]) != "NTLMSSP\x00" { - return nil, errorNTLM - } - if binary.LittleEndian.Uint32(bytes[8:12]) != _CHALLENGE_MESSAGE { - return nil, errorNTLM - } - flags := binary.LittleEndian.Uint32(bytes[20:24]) - var challenge [8]byte - copy(challenge[:], bytes[24:32]) +func ntlmHashNoPadding(val string) []byte { + hash := make([]byte, 16) + h := md4.New() + h.Write(utf16le(val)) + h.Sum(hash[:0]) - var lm, nt []byte - if (flags & _NEGOTIATE_EXTENDED_SESSIONSECURITY) != 0 { - nonce := clientChallenge() - var lm_bytes [24]byte - copy(lm_bytes[:8], nonce[:]) - lm = lm_bytes[:] - nt_bytes := ntlmSessionResponse(nonce, challenge, auth.Password) - nt = nt_bytes[:] - } else { - lm_bytes := lmResponse(challenge, auth.Password) - lm = lm_bytes[:] - nt_bytes := ntResponse(challenge, auth.Password) - nt = nt_bytes[:] + return hash +} + +func hmacMD5(passwordHash, data []byte) []byte { + hmacEntity := hmac.New(md5.New, passwordHash) + hmacEntity.Write(data) + + return hmacEntity.Sum(nil) +} + +func getNTLMv2AndLMv2ResponsePayloads(userDomain, username, password string, challenge, nonce [8]byte, targetInfoFields []byte, timestamp time.Time) (ntlmV2Payload, lmV2Payload []byte) { + // NTLMv2 response payload: http://davenport.sourceforge.net/ntlm.html#theNtlmv2Response + + ntlmHash := ntlmHashNoPadding(password) + usernameAndTargetBytes := utf16le(strings.ToUpper(username) + userDomain) + ntlmV2Hash := hmacMD5(ntlmHash, usernameAndTargetBytes) + targetInfoLength := len(targetInfoFields) + blob := make([]byte, 32+targetInfoLength) + binary.BigEndian.PutUint32(blob[:4], 0x01010000) + binary.BigEndian.PutUint32(blob[4:8], 0x00000000) + binary.BigEndian.PutUint64(blob[8:16], uint64(timestamp.UnixNano())) + copy(blob[16:24], nonce[:]) + binary.BigEndian.PutUint32(blob[24:28], 0x00000000) + copy(blob[28:], targetInfoFields) + binary.BigEndian.PutUint32(blob[28+targetInfoLength:], 0x00000000) + challengeLength := len(challenge) + blobLength := len(blob) + challengeAndBlob := make([]byte, challengeLength+blobLength) + copy(challengeAndBlob[:challengeLength], challenge[:]) + copy(challengeAndBlob[challengeLength:], blob) + hashedChallenge := hmacMD5(ntlmV2Hash, challengeAndBlob) + ntlmV2Payload = append(hashedChallenge, blob...) + + // LMv2 response payload: http://davenport.sourceforge.net/ntlm.html#theLmv2Response + ntlmV2hash := hmacMD5(ntlmHash, usernameAndTargetBytes) + challengeAndNonce := make([]byte, 16) + copy(challengeAndNonce[:8], challenge[:]) + copy(challengeAndNonce[8:], nonce[:]) + hashedChallenge = hmacMD5(ntlmV2hash, challengeAndNonce) + lmV2Payload = append(hashedChallenge, nonce[:]...) + + return +} + +func negotiateExtendedSessionSecurity(flags uint32, message []byte, challenge [8]byte, username, password, userDom string) (lm, nt []byte, err error) { + nonce := clientChallenge() + + // Official specification: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4 + // Unofficial walk through referenced by https://www.freetds.org/userguide/domains.htm: http://davenport.sourceforge.net/ntlm.html + if (flags & _NEGOTIATE_TARGET_INFO) != 0 { + targetInfoFields, err := getNTLMv2TargetInfoFields(message) + if err != nil { + return lm, nt, err + } + + nt, lm = getNTLMv2AndLMv2ResponsePayloads(userDom, username, password, challenge, nonce, targetInfoFields, time.Now()) + + return lm, nt, nil } + + var lm_bytes [24]byte + copy(lm_bytes[:8], nonce[:]) + lm = lm_bytes[:] + nt_bytes := ntlmSessionResponse(nonce, challenge, password) + nt = nt_bytes[:] + + return lm, nt, nil +} + +func getNTLMv2TargetInfoFields(type2Message []byte) (info []byte, err error) { + type2MessageError := "mssql: while parsing NTLMv2 type 2 message, length %d too small for offset %d" + type2MessageLength := len(type2Message) + if type2MessageLength < 20 { + return nil, fmt.Errorf(type2MessageError, type2MessageLength, 20) + } + + targetNameAllocated := binary.LittleEndian.Uint16(type2Message[14:16]) + targetNameOffset := binary.LittleEndian.Uint32(type2Message[16:20]) + endOfOffset := int(targetNameOffset + uint32(targetNameAllocated)) + if type2MessageLength < endOfOffset { + return nil, fmt.Errorf(type2MessageError, type2MessageLength, endOfOffset) + } + + targetInformationAllocated := binary.LittleEndian.Uint16(type2Message[42:44]) + targetInformationDataOffset := binary.LittleEndian.Uint32(type2Message[44:48]) + endOfOffset = int(targetInformationDataOffset + uint32(targetInformationAllocated)) + if type2MessageLength < endOfOffset { + return nil, fmt.Errorf(type2MessageError, type2MessageLength, endOfOffset) + } + + targetInformationBytes := make([]byte, targetInformationAllocated) + copy(targetInformationBytes, type2Message[targetInformationDataOffset:targetInformationDataOffset+uint32(targetInformationAllocated)]) + + return targetInformationBytes, nil +} + +func buildNTLMResponsePayload(lm, nt []byte, flags uint32, domain, workstation, username string) ([]byte, error) { lm_len := len(lm) nt_len := len(nt) - - domain16 := utf16le(auth.Domain) + domain16 := utf16le(domain) domain_len := len(domain16) - user16 := utf16le(auth.UserName) + user16 := utf16le(username) user_len := len(user16) - workstation16 := utf16le(auth.Workstation) + workstation16 := utf16le(workstation) workstation_len := len(workstation16) - msg := make([]byte, 88+lm_len+nt_len+domain_len+user_len+workstation_len) copy(msg, []byte("NTLMSSP\x00")) binary.LittleEndian.PutUint32(msg[8:], _AUTHENTICATE_MESSAGE) + // Lm Challenge Response Fields binary.LittleEndian.PutUint16(msg[12:], uint16(lm_len)) binary.LittleEndian.PutUint16(msg[14:], uint16(lm_len)) binary.LittleEndian.PutUint32(msg[16:], 88) + // Nt Challenge Response Fields binary.LittleEndian.PutUint16(msg[20:], uint16(nt_len)) binary.LittleEndian.PutUint16(msg[22:], uint16(nt_len)) binary.LittleEndian.PutUint32(msg[24:], uint32(88+lm_len)) + // Domain Name Fields binary.LittleEndian.PutUint16(msg[28:], uint16(domain_len)) binary.LittleEndian.PutUint16(msg[30:], uint16(domain_len)) binary.LittleEndian.PutUint32(msg[32:], uint32(88+lm_len+nt_len)) + // User Name Fields binary.LittleEndian.PutUint16(msg[36:], uint16(user_len)) binary.LittleEndian.PutUint16(msg[38:], uint16(user_len)) binary.LittleEndian.PutUint32(msg[40:], uint32(88+lm_len+nt_len+domain_len)) + // Workstation Fields binary.LittleEndian.PutUint16(msg[44:], uint16(workstation_len)) binary.LittleEndian.PutUint16(msg[46:], uint16(workstation_len)) binary.LittleEndian.PutUint32(msg[48:], uint32(88+lm_len+nt_len+domain_len+user_len)) + // Encrypted Random Session Key Fields binary.LittleEndian.PutUint16(msg[52:], 0) binary.LittleEndian.PutUint16(msg[54:], 0) binary.LittleEndian.PutUint32(msg[56:], uint32(88+lm_len+nt_len+domain_len+user_len+workstation_len)) + // Negotiate Flags binary.LittleEndian.PutUint32(msg[60:], flags) + // Version binary.LittleEndian.PutUint32(msg[64:], 0) binary.LittleEndian.PutUint32(msg[68:], 0) + // MIC binary.LittleEndian.PutUint32(msg[72:], 0) binary.LittleEndian.PutUint32(msg[76:], 0) binary.LittleEndian.PutUint32(msg[88:], 0) binary.LittleEndian.PutUint32(msg[84:], 0) + // Payload copy(msg[88:], lm) copy(msg[88+lm_len:], nt) copy(msg[88+lm_len+nt_len:], domain16) copy(msg[88+lm_len+nt_len+domain_len:], user16) copy(msg[88+lm_len+nt_len+domain_len+user_len:], workstation16) + return msg, nil } +func (auth *ntlmAuth) NextBytes(bytes []byte) ([]byte, error) { + signature := string(bytes[0:8]) + if signature != "NTLMSSP\x00" { + return nil, errorNTLM + } + + messageTypeIndicator := binary.LittleEndian.Uint32(bytes[8:12]) + if messageTypeIndicator != _CHALLENGE_MESSAGE { + return nil, errorNTLM + } + + var challenge [8]byte + copy(challenge[:], bytes[24:32]) + flags := binary.LittleEndian.Uint32(bytes[20:24]) + if (flags & _NEGOTIATE_EXTENDED_SESSIONSECURITY) != 0 { + lm, nt, err := negotiateExtendedSessionSecurity(flags, bytes, challenge, auth.UserName, auth.Password, auth.Domain) + if err != nil { + return nil, err + } + + return buildNTLMResponsePayload(lm, nt, flags, auth.Domain, auth.Workstation, auth.UserName) + } + + lm_bytes := lmResponse(challenge, auth.Password) + lm := lm_bytes[:] + nt_bytes := ntResponse(challenge, auth.Password) + nt := nt_bytes[:] + + return buildNTLMResponsePayload(lm, nt, flags, auth.Domain, auth.Workstation, auth.UserName) +} + func (auth *ntlmAuth) Free() { } diff --git a/vendor/github.com/denisenkom/go-mssqldb/tds.go b/vendor/github.com/denisenkom/go-mssqldb/tds.go index a924e901..832c4fd2 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/tds.go +++ b/vendor/github.com/denisenkom/go-mssqldb/tds.go @@ -10,13 +10,9 @@ import ( "io" "io/ioutil" "net" - "net/url" - "os" "sort" "strconv" "strings" - "time" - "unicode" "unicode/utf16" "unicode/utf8" ) @@ -51,15 +47,13 @@ func parseInstances(msg []byte) map[string]map[string]string { } func getInstances(ctx context.Context, d Dialer, address string) (map[string]map[string]string, error) { - maxTime := 5 * time.Second - ctx, cancel := context.WithTimeout(ctx, maxTime) - defer cancel() conn, err := d.DialContext(ctx, "udp", address+":1434") if err != nil { return nil, err } defer conn.Close() - conn.SetDeadline(time.Now().Add(maxTime)) + deadline, _ := ctx.Deadline() + conn.SetDeadline(deadline) _, err = conn.Write([]byte{3}) if err != nil { return nil, err @@ -106,13 +100,15 @@ const ( // prelogin fields // http://msdn.microsoft.com/en-us/library/dd357559.aspx const ( - preloginVERSION = 0 - preloginENCRYPTION = 1 - preloginINSTOPT = 2 - preloginTHREADID = 3 - preloginMARS = 4 - preloginTRACEID = 5 - preloginTERMINATOR = 0xff + preloginVERSION = 0 + preloginENCRYPTION = 1 + preloginINSTOPT = 2 + preloginTHREADID = 3 + preloginMARS = 4 + preloginTRACEID = 5 + preloginFEDAUTHREQUIRED = 6 + preloginNONCEOPT = 7 + preloginTERMINATOR = 0xff ) const ( @@ -251,6 +247,12 @@ const ( fReadOnlyIntent = 32 ) +// OptionFlags3 +// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/773a62b6-ee89-4c02-9e5e-344882630aac +const ( + fExtension = 0x10 +) + type login struct { TDSVersion uint32 PacketSize uint32 @@ -275,6 +277,89 @@ type login struct { SSPI []byte AtchDBFile string ChangePassword string + FeatureExt featureExts +} + +type featureExts struct { + features map[byte]featureExt +} + +type featureExt interface { + featureID() byte + toBytes() []byte +} + +func (e *featureExts) Add(f featureExt) error { + if f == nil { + return nil + } + id := f.featureID() + if _, exists := e.features[id]; exists { + f := "Login error: Feature with ID '%v' is already present in FeatureExt block." + return fmt.Errorf(f, id) + } + if e.features == nil { + e.features = make(map[byte]featureExt) + } + e.features[id] = f + return nil +} + +func (e featureExts) toBytes() []byte { + if len(e.features) == 0 { + return nil + } + var d []byte + for featureID, f := range e.features { + featureData := f.toBytes() + + hdr := make([]byte, 5) + hdr[0] = featureID // FedAuth feature extension BYTE + binary.LittleEndian.PutUint32(hdr[1:], uint32(len(featureData))) // FeatureDataLen DWORD + d = append(d, hdr...) + + d = append(d, featureData...) // FeatureData *BYTE + } + if d != nil { + d = append(d, 0xff) // Terminator + } + return d +} + +type featureExtFedAuthSTS struct { + FedAuthEcho bool + FedAuthToken string + Nonce []byte +} + +func (e *featureExtFedAuthSTS) featureID() byte { + return 0x02 +} + +func (e *featureExtFedAuthSTS) toBytes() []byte { + if e == nil { + return nil + } + + options := byte(0x01) << 1 // 0x01 => STS bFedAuthLibrary 7BIT + if e.FedAuthEcho { + options |= 1 // fFedAuthEcho + } + + d := make([]byte, 5) + d[0] = options + + // looks like string in + // https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/f88b63bb-b479-49e1-a87b-deda521da508 + tokenBytes := str2ucs2(e.FedAuthToken) + binary.LittleEndian.PutUint32(d[1:], uint32(len(tokenBytes))) // Should be a signed int32, but since the length is relatively small, this should work + d = append(d, tokenBytes...) + + if len(e.Nonce) == 32 { + d = append(d, e.Nonce...) + } + + return d } type loginHeader struct { @@ -301,7 +386,7 @@ type loginHeader struct { ServerNameOffset uint16 ServerNameLength uint16 ExtensionOffset uint16 - ExtensionLenght uint16 + ExtensionLength uint16 CtlIntNameOffset uint16 CtlIntNameLength uint16 LanguageOffset uint16 @@ -363,6 +448,8 @@ func sendLogin(w *tdsBuffer, login login) error { database := str2ucs2(login.Database) atchdbfile := str2ucs2(login.AtchDBFile) changepassword := str2ucs2(login.ChangePassword) + featureExt := login.FeatureExt.toBytes() + hdr := loginHeader{ TDSVersion: login.TDSVersion, PacketSize: login.PacketSize, @@ -411,7 +498,18 @@ func sendLogin(w *tdsBuffer, login login) error { offset += uint16(len(atchdbfile)) hdr.ChangePasswordOffset = offset offset += uint16(len(changepassword)) - hdr.Length = uint32(offset) + + featureExtOffset := uint32(0) + featureExtLen := len(featureExt) + if featureExtLen > 0 { + hdr.OptionFlags3 |= fExtension + hdr.ExtensionOffset = offset + hdr.ExtensionLength = 4 + offset += hdr.ExtensionLength // DWORD + featureExtOffset = uint32(offset) + } + hdr.Length = uint32(offset) + uint32(featureExtLen) + var err error err = binary.Write(w, binary.LittleEndian, &hdr) if err != nil { @@ -461,6 +559,16 @@ func sendLogin(w *tdsBuffer, login login) error { if err != nil { return err } + if featureExtOffset > 0 { + err = binary.Write(w, binary.LittleEndian, featureExtOffset) + if err != nil { + return err + } + _, err = w.Write(featureExt) + if err != nil { + return err + } + } return w.FinishPacket() } @@ -474,10 +582,9 @@ func readUcs2(r io.Reader, numchars int) (res string, err error) { } func readUsVarChar(r io.Reader) (res string, err error) { - var numchars uint16 - err = binary.Read(r, binary.LittleEndian, &numchars) + numchars, err := readUshort(r) if err != nil { - return "", err + return } return readUcs2(r, int(numchars)) } @@ -497,8 +604,7 @@ func writeUsVarChar(w io.Writer, s string) (err error) { } func readBVarChar(r io.Reader) (res string, err error) { - var numchars uint8 - err = binary.Read(r, binary.LittleEndian, &numchars) + numchars, err := readByte(r) if err != nil { return "", err } @@ -525,8 +631,7 @@ func writeBVarChar(w io.Writer, s string) (err error) { } func readBVarByte(r io.Reader) (res []byte, err error) { - var length uint8 - err = binary.Read(r, binary.LittleEndian, &length) + length, err := readByte(r) if err != nil { return } @@ -654,458 +759,6 @@ func sendAttention(buf *tdsBuffer) error { return buf.FinishPacket() } -type connectParams struct { - logFlags uint64 - port uint64 - host string - instance string - database string - user string - password string - dial_timeout time.Duration - conn_timeout time.Duration - keepAlive time.Duration - encrypt bool - disableEncryption bool - trustServerCertificate bool - certificate string - hostInCertificate string - hostInCertificateProvided bool - serverSPN string - workstation string - appname string - typeFlags uint8 - failOverPartner string - failOverPort uint64 - packetSize uint16 -} - -func splitConnectionString(dsn string) (res map[string]string) { - res = map[string]string{} - parts := strings.Split(dsn, ";") - for _, part := range parts { - if len(part) == 0 { - continue - } - lst := strings.SplitN(part, "=", 2) - name := strings.TrimSpace(strings.ToLower(lst[0])) - if len(name) == 0 { - continue - } - var value string = "" - if len(lst) > 1 { - value = strings.TrimSpace(lst[1]) - } - res[name] = value - } - return res -} - -// Splits a URL in the ODBC format -func splitConnectionStringOdbc(dsn string) (map[string]string, error) { - res := map[string]string{} - - type parserState int - const ( - // Before the start of a key - parserStateBeforeKey parserState = iota - - // Inside a key - parserStateKey - - // Beginning of a value. May be bare or braced - parserStateBeginValue - - // Inside a bare value - parserStateBareValue - - // Inside a braced value - parserStateBracedValue - - // A closing brace inside a braced value. - // May be the end of the value or an escaped closing brace, depending on the next character - parserStateBracedValueClosingBrace - - // After a value. Next character should be a semicolon or whitespace. - parserStateEndValue - ) - - var state = parserStateBeforeKey - - var key string - var value string - - for i, c := range dsn { - switch state { - case parserStateBeforeKey: - switch { - case c == '=': - return res, fmt.Errorf("Unexpected character = at index %d. Expected start of key or semi-colon or whitespace.", i) - case !unicode.IsSpace(c) && c != ';': - state = parserStateKey - key += string(c) - } - - case parserStateKey: - switch c { - case '=': - key = normalizeOdbcKey(key) - if len(key) == 0 { - return res, fmt.Errorf("Unexpected end of key at index %d.", i) - } - - state = parserStateBeginValue - - case ';': - // Key without value - key = normalizeOdbcKey(key) - if len(key) == 0 { - return res, fmt.Errorf("Unexpected end of key at index %d.", i) - } - - res[key] = value - key = "" - value = "" - state = parserStateBeforeKey - - default: - key += string(c) - } - - case parserStateBeginValue: - switch { - case c == '{': - state = parserStateBracedValue - case c == ';': - // Empty value - res[key] = value - key = "" - state = parserStateBeforeKey - case unicode.IsSpace(c): - // Ignore whitespace - default: - state = parserStateBareValue - value += string(c) - } - - case parserStateBareValue: - if c == ';' { - res[key] = strings.TrimRightFunc(value, unicode.IsSpace) - key = "" - value = "" - state = parserStateBeforeKey - } else { - value += string(c) - } - - case parserStateBracedValue: - if c == '}' { - state = parserStateBracedValueClosingBrace - } else { - value += string(c) - } - - case parserStateBracedValueClosingBrace: - if c == '}' { - // Escaped closing brace - value += string(c) - state = parserStateBracedValue - continue - } - - // End of braced value - res[key] = value - key = "" - value = "" - - // This character is the first character past the end, - // so it needs to be parsed like the parserStateEndValue state. - state = parserStateEndValue - switch { - case c == ';': - state = parserStateBeforeKey - case unicode.IsSpace(c): - // Ignore whitespace - default: - return res, fmt.Errorf("Unexpected character %c at index %d. Expected semi-colon or whitespace.", c, i) - } - - case parserStateEndValue: - switch { - case c == ';': - state = parserStateBeforeKey - case unicode.IsSpace(c): - // Ignore whitespace - default: - return res, fmt.Errorf("Unexpected character %c at index %d. Expected semi-colon or whitespace.", c, i) - } - } - } - - switch state { - case parserStateBeforeKey: // Okay - case parserStateKey: // Unfinished key. Treat as key without value. - key = normalizeOdbcKey(key) - if len(key) == 0 { - return res, fmt.Errorf("Unexpected end of key at index %d.", len(dsn)) - } - res[key] = value - case parserStateBeginValue: // Empty value - res[key] = value - case parserStateBareValue: - res[key] = strings.TrimRightFunc(value, unicode.IsSpace) - case parserStateBracedValue: - return res, fmt.Errorf("Unexpected end of braced value at index %d.", len(dsn)) - case parserStateBracedValueClosingBrace: // End of braced value - res[key] = value - case parserStateEndValue: // Okay - } - - return res, nil -} - -// Normalizes the given string as an ODBC-format key -func normalizeOdbcKey(s string) string { - return strings.ToLower(strings.TrimRightFunc(s, unicode.IsSpace)) -} - -// Splits a URL of the form sqlserver://username:password@host/instance?param1=value¶m2=value -func splitConnectionStringURL(dsn string) (map[string]string, error) { - res := map[string]string{} - - u, err := url.Parse(dsn) - if err != nil { - return res, err - } - - if u.Scheme != "sqlserver" { - return res, fmt.Errorf("scheme %s is not recognized", u.Scheme) - } - - if u.User != nil { - res["user id"] = u.User.Username() - p, exists := u.User.Password() - if exists { - res["password"] = p - } - } - - host, port, err := net.SplitHostPort(u.Host) - if err != nil { - host = u.Host - } - - if len(u.Path) > 0 { - res["server"] = host + "\\" + u.Path[1:] - } else { - res["server"] = host - } - - if len(port) > 0 { - res["port"] = port - } - - query := u.Query() - for k, v := range query { - if len(v) > 1 { - return res, fmt.Errorf("key %s provided more than once", k) - } - res[strings.ToLower(k)] = v[0] - } - - return res, nil -} - -func parseConnectParams(dsn string) (connectParams, error) { - var p connectParams - - var params map[string]string - if strings.HasPrefix(dsn, "odbc:") { - parameters, err := splitConnectionStringOdbc(dsn[len("odbc:"):]) - if err != nil { - return p, err - } - params = parameters - } else if strings.HasPrefix(dsn, "sqlserver://") { - parameters, err := splitConnectionStringURL(dsn) - if err != nil { - return p, err - } - params = parameters - } else { - params = splitConnectionString(dsn) - } - - strlog, ok := params["log"] - if ok { - var err error - p.logFlags, err = strconv.ParseUint(strlog, 10, 64) - if err != nil { - return p, fmt.Errorf("Invalid log parameter '%s': %s", strlog, err.Error()) - } - } - server := params["server"] - parts := strings.SplitN(server, `\`, 2) - p.host = parts[0] - if p.host == "." || strings.ToUpper(p.host) == "(LOCAL)" || p.host == "" { - p.host = "localhost" - } - if len(parts) > 1 { - p.instance = parts[1] - } - p.database = params["database"] - p.user = params["user id"] - p.password = params["password"] - - p.port = 1433 - strport, ok := params["port"] - if ok { - var err error - p.port, err = strconv.ParseUint(strport, 10, 16) - if err != nil { - f := "Invalid tcp port '%v': %v" - return p, fmt.Errorf(f, strport, err.Error()) - } - } - - // https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option - // Default packet size remains at 4096 bytes - p.packetSize = 4096 - strpsize, ok := params["packet size"] - if ok { - var err error - psize, err := strconv.ParseUint(strpsize, 0, 16) - if err != nil { - f := "Invalid packet size '%v': %v" - return p, fmt.Errorf(f, strpsize, err.Error()) - } - - // Ensure packet size falls within the TDS protocol range of 512 to 32767 bytes - // NOTE: Encrypted connections have a maximum size of 16383 bytes. If you request - // a higher packet size, the server will respond with an ENVCHANGE request to - // alter the packet size to 16383 bytes. - p.packetSize = uint16(psize) - if p.packetSize < 512 { - p.packetSize = 512 - } else if p.packetSize > 32767 { - p.packetSize = 32767 - } - } - - // https://msdn.microsoft.com/en-us/library/dd341108.aspx - // - // Do not set a connection timeout. Use Context to manage such things. - // Default to zero, but still allow it to be set. - if strconntimeout, ok := params["connection timeout"]; ok { - timeout, err := strconv.ParseUint(strconntimeout, 10, 64) - if err != nil { - f := "Invalid connection timeout '%v': %v" - return p, fmt.Errorf(f, strconntimeout, err.Error()) - } - p.conn_timeout = time.Duration(timeout) * time.Second - } - p.dial_timeout = 15 * time.Second - if strdialtimeout, ok := params["dial timeout"]; ok { - timeout, err := strconv.ParseUint(strdialtimeout, 10, 64) - if err != nil { - f := "Invalid dial timeout '%v': %v" - return p, fmt.Errorf(f, strdialtimeout, err.Error()) - } - p.dial_timeout = time.Duration(timeout) * time.Second - } - - // default keep alive should be 30 seconds according to spec: - // https://msdn.microsoft.com/en-us/library/dd341108.aspx - p.keepAlive = 30 * time.Second - if keepAlive, ok := params["keepalive"]; ok { - timeout, err := strconv.ParseUint(keepAlive, 10, 64) - if err != nil { - f := "Invalid keepAlive value '%s': %s" - return p, fmt.Errorf(f, keepAlive, err.Error()) - } - p.keepAlive = time.Duration(timeout) * time.Second - } - encrypt, ok := params["encrypt"] - if ok { - if strings.EqualFold(encrypt, "DISABLE") { - p.disableEncryption = true - } else { - var err error - p.encrypt, err = strconv.ParseBool(encrypt) - if err != nil { - f := "Invalid encrypt '%s': %s" - return p, fmt.Errorf(f, encrypt, err.Error()) - } - } - } else { - p.trustServerCertificate = true - } - trust, ok := params["trustservercertificate"] - if ok { - var err error - p.trustServerCertificate, err = strconv.ParseBool(trust) - if err != nil { - f := "Invalid trust server certificate '%s': %s" - return p, fmt.Errorf(f, trust, err.Error()) - } - } - p.certificate = params["certificate"] - p.hostInCertificate, ok = params["hostnameincertificate"] - if ok { - p.hostInCertificateProvided = true - } else { - p.hostInCertificate = p.host - p.hostInCertificateProvided = false - } - - serverSPN, ok := params["serverspn"] - if ok { - p.serverSPN = serverSPN - } else { - p.serverSPN = fmt.Sprintf("MSSQLSvc/%s:%d", p.host, p.port) - } - - workstation, ok := params["workstation id"] - if ok { - p.workstation = workstation - } else { - workstation, err := os.Hostname() - if err == nil { - p.workstation = workstation - } - } - - appname, ok := params["app name"] - if !ok { - appname = "go-mssqldb" - } - p.appname = appname - - appintent, ok := params["applicationintent"] - if ok { - if appintent == "ReadOnly" { - p.typeFlags |= fReadOnlyIntent - } - } - - failOverPartner, ok := params["failoverpartner"] - if ok { - p.failOverPartner = failOverPartner - } - - failOverPort, ok := params["failoverport"] - if ok { - var err error - p.failOverPort, err = strconv.ParseUint(failOverPort, 0, 16) - if err != nil { - f := "Invalid tcp port '%v': %v" - return p, fmt.Errorf(f, failOverPort, err.Error()) - } - } - - return p, nil -} - type auth interface { InitialBytes() ([]byte, error) NextBytes([]byte) ([]byte, error) @@ -1127,14 +780,14 @@ func dialConnection(ctx context.Context, c *Connector, p connectParams) (conn ne } if len(ips) == 1 { d := c.getDialer(&p) - addr := net.JoinHostPort(ips[0].String(), strconv.Itoa(int(p.port))) + addr := net.JoinHostPort(ips[0].String(), strconv.Itoa(int(resolveServerPort(p.port)))) conn, err = d.DialContext(ctx, "tcp", addr) } else { //Try Dials in parallel to avoid waiting for timeouts. connChan := make(chan net.Conn, len(ips)) errChan := make(chan error, len(ips)) - portStr := strconv.Itoa(int(p.port)) + portStr := strconv.Itoa(int(resolveServerPort(p.port))) for _, ip := range ips { go func(ip net.IP) { d := c.getDialer(&p) @@ -1172,7 +825,7 @@ func dialConnection(ctx context.Context, c *Connector, p connectParams) (conn ne // Can't do the usual err != nil check, as it is possible to have gotten an error before a successful connection if conn == nil { f := "Unable to open tcp connection with host '%v:%v': %v" - return nil, fmt.Errorf(f, p.host, p.port, err.Error()) + return nil, fmt.Errorf(f, p.host, resolveServerPort(p.port), err.Error()) } return conn, err } @@ -1185,7 +838,7 @@ func connect(ctx context.Context, c *Connector, log optionalLogger, p connectPar defer cancel() } // if instance is specified use instance resolution service - if p.instance != "" { + if p.instance != "" && p.port == 0 { p.instance = strings.ToUpper(p.instance) d := c.getDialer(&p) instances, err := getInstances(dialCtx, d, p.host) @@ -1198,11 +851,12 @@ func connect(ctx context.Context, c *Connector, log optionalLogger, p connectPar f := "No instance matching '%v' returned from host '%v'" return nil, fmt.Errorf(f, p.instance, p.host) } - p.port, err = strconv.ParseUint(strport, 0, 16) + port, err := strconv.ParseUint(strport, 0, 16) if err != nil { f := "Invalid tcp port returned from Sql Server Browser '%v': %v" return nil, fmt.Errorf(f, strport, err.Error()) } + p.port = port } initiate_connection: @@ -1277,12 +931,12 @@ initiate_connection: // while SQL Server seems to expect one TCP segment per encrypted TDS package. // Setting DynamicRecordSizingDisabled to true disables that algorithm and uses 16384 bytes per TLS package config.DynamicRecordSizingDisabled = true - outbuf.transport = conn - toconn.buf = outbuf - tlsConn := tls.Client(toconn, &config) + // setting up connection handler which will allow wrapping of TLS handshake packets inside TDS stream + handshakeConn := tlsHandshakeConn{buf: outbuf} + passthrough := passthroughConn{c: &handshakeConn} + tlsConn := tls.Client(&passthrough, &config) err = tlsConn.Handshake() - - toconn.buf = nil + passthrough.c = toconn outbuf.transport = tlsConn if err != nil { return nil, fmt.Errorf("TLS Handshake failed: %v", err) @@ -1304,15 +958,23 @@ initiate_connection: AppName: p.appname, TypeFlags: p.typeFlags, } - auth, auth_ok := getAuth(p.user, p.password, p.serverSPN, p.workstation) - if auth_ok { + auth, authOk := getAuth(p.user, p.password, p.serverSPN, p.workstation) + switch { + case p.fedAuthAccessToken != "": // accesstoken ignores user/password + featurext := &featureExtFedAuthSTS{ + FedAuthEcho: len(fields[preloginFEDAUTHREQUIRED]) > 0 && fields[preloginFEDAUTHREQUIRED][0] == 1, + FedAuthToken: p.fedAuthAccessToken, + Nonce: fields[preloginNONCEOPT], + } + login.FeatureExt.Add(featurext) + case authOk: login.SSPI, err = auth.InitialBytes() if err != nil { return nil, err } login.OptionFlags2 |= fIntSecurity defer auth.Free() - } else { + default: login.UserName = p.user login.Password = p.password } diff --git a/vendor/github.com/denisenkom/go-mssqldb/token.go b/vendor/github.com/denisenkom/go-mssqldb/token.go index 1acac8a5..25385e89 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/token.go +++ b/vendor/github.com/denisenkom/go-mssqldb/token.go @@ -17,20 +17,21 @@ type token byte // token ids const ( - tokenReturnStatus token = 121 // 0x79 - tokenColMetadata token = 129 // 0x81 - tokenOrder token = 169 // 0xA9 - tokenError token = 170 // 0xAA - tokenInfo token = 171 // 0xAB - tokenReturnValue token = 0xAC - tokenLoginAck token = 173 // 0xad - tokenRow token = 209 // 0xd1 - tokenNbcRow token = 210 // 0xd2 - tokenEnvChange token = 227 // 0xE3 - tokenSSPI token = 237 // 0xED - tokenDone token = 253 // 0xFD - tokenDoneProc token = 254 - tokenDoneInProc token = 255 + tokenReturnStatus token = 121 // 0x79 + tokenColMetadata token = 129 // 0x81 + tokenOrder token = 169 // 0xA9 + tokenError token = 170 // 0xAA + tokenInfo token = 171 // 0xAB + tokenReturnValue token = 0xAC + tokenLoginAck token = 173 // 0xad + tokenFeatureExtAck token = 174 // 0xae + tokenRow token = 209 // 0xd1 + tokenNbcRow token = 210 // 0xd2 + tokenEnvChange token = 227 // 0xE3 + tokenSSPI token = 237 // 0xED + tokenDone token = 253 // 0xFD + tokenDoneProc token = 254 + tokenDoneInProc token = 255 ) // done flags @@ -447,6 +448,22 @@ func parseLoginAck(r *tdsBuffer) loginAckStruct { return res } +// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/2eb82f8e-11f0-46dc-b42d-27302fa4701a +func parseFeatureExtAck(r *tdsBuffer) { + // at most 1 featureAck per feature in featureExt + // go-mssqldb will add at most 1 feature, the spec defines 7 different features + for i := 0; i < 8; i++ { + featureID := r.byte() // FeatureID + if featureID == 0xff { + return + } + size := r.uint32() // FeatureAckDataLen + d := make([]byte, size) + r.ReadFull(d) + } + panic("parsed more than 7 featureAck's, protocol implementation error?") +} + // http://msdn.microsoft.com/en-us/library/dd357363.aspx func parseColMetadata72(r *tdsBuffer) (columns []columnStruct) { count := r.uint16() @@ -577,6 +594,8 @@ func processSingleResponse(sess *tdsSession, ch chan tokenStruct, outs map[strin case tokenLoginAck: loginAck := parseLoginAck(sess.buf) ch <- loginAck + case tokenFeatureExtAck: + parseFeatureExtAck(sess.buf) case tokenOrder: order := parseOrder(sess.buf) ch <- order diff --git a/vendor/github.com/denisenkom/go-mssqldb/types.go b/vendor/github.com/denisenkom/go-mssqldb/types.go index c9f17b9e..b6e7fb2b 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/types.go +++ b/vendor/github.com/denisenkom/go-mssqldb/types.go @@ -11,6 +11,7 @@ import ( "time" "github.com/denisenkom/go-mssqldb/internal/cp" + "github.com/denisenkom/go-mssqldb/internal/decimal" ) // fixed-length data types @@ -818,12 +819,12 @@ func decodeMoney(buf []byte) []byte { uint64(buf[1])<<40 | uint64(buf[2])<<48 | uint64(buf[3])<<56) - return scaleBytes(strconv.FormatInt(money, 10), 4) + return decimal.ScaleBytes(strconv.FormatInt(money, 10), 4) } func decodeMoney4(buf []byte) []byte { money := int32(binary.LittleEndian.Uint32(buf[0:4])) - return scaleBytes(strconv.FormatInt(int64(money), 10), 4) + return decimal.ScaleBytes(strconv.FormatInt(int64(money), 10), 4) } func decodeGuid(buf []byte) []byte { @@ -835,15 +836,14 @@ func decodeGuid(buf []byte) []byte { func decodeDecimal(prec uint8, scale uint8, buf []byte) []byte { var sign uint8 sign = buf[0] - dec := Decimal{ - positive: sign != 0, - prec: prec, - scale: scale, - } + var dec decimal.Decimal + dec.SetPositive(sign != 0) + dec.SetPrec(prec) + dec.SetScale(scale) buf = buf[1:] l := len(buf) / 4 for i := 0; i < l; i++ { - dec.integer[i] = binary.LittleEndian.Uint32(buf[0:4]) + dec.SetInteger(binary.LittleEndian.Uint32(buf[0:4]), uint8(i)) buf = buf[4:] } return dec.Bytes() @@ -1186,7 +1186,7 @@ func makeDecl(ti typeInfo) string { case typeBigChar, typeChar: return fmt.Sprintf("char(%d)", ti.Size) case typeBigVarChar, typeVarChar: - if ti.Size > 4000 || ti.Size == 0 { + if ti.Size > 8000 || ti.Size == 0 { return fmt.Sprintf("varchar(max)") } else { return fmt.Sprintf("varchar(%d)", ti.Size) diff --git a/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go b/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go index c8ef3149..3ad6f863 100644 --- a/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go +++ b/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go @@ -72,3 +72,9 @@ func (u UniqueIdentifier) Value() (driver.Value, error) { func (u UniqueIdentifier) String() string { return fmt.Sprintf("%X-%X-%X-%X-%X", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) } + +// MarshalText converts Uniqueidentifier to bytes corresponding to the stringified hexadecimal representation of the Uniqueidentifier +// e.g., "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" -> [65 65 65 65 65 65 65 65 45 65 65 65 65 45 65 65 65 65 45 65 65 65 65 65 65 65 65 65 65 65 65] +func (u UniqueIdentifier) MarshalText() []byte { + return []byte(u.String()) +} diff --git a/vendor/github.com/dgrijalva/jwt-go/README.md b/vendor/github.com/dgrijalva/jwt-go/README.md index 25aec486..d358d881 100644 --- a/vendor/github.com/dgrijalva/jwt-go/README.md +++ b/vendor/github.com/dgrijalva/jwt-go/README.md @@ -1,11 +1,15 @@ -A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) +# jwt-go [![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go) +[![GoDoc](https://godoc.org/github.com/dgrijalva/jwt-go?status.svg)](https://godoc.org/github.com/dgrijalva/jwt-go) -**BREAKING CHANGES:*** Version 3.0.0 is here. It includes _a lot_ of changes including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. +A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) -**NOTICE:** It's important that you [validate the `alg` presented is what you expect](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). This library attempts to make it easy to do the right thing by requiring key types match the expected alg, but you should take the extra step to verify it in your usage. See the examples provided. +**NEW VERSION COMING:** There have been a lot of improvements suggested since the version 3.0.0 released in 2016. I'm working now on cutting two different releases: 3.2.0 will contain any non-breaking changes or enhancements. 4.0.0 will follow shortly which will include breaking changes. See the 4.0.0 milestone to get an idea of what's coming. If you have other ideas, or would like to participate in 4.0.0, now's the time. If you depend on this library and don't want to be interrupted, I recommend you use your dependency mangement tool to pin to version 3. +**SECURITY NOTICE:** Some older versions of Go have a security issue in the cryotp/elliptic. Recommendation is to upgrade to at least 1.8.3. See issue #216 for more detail. + +**SECURITY NOTICE:** It's important that you [validate the `alg` presented is what you expect](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). This library attempts to make it easy to do the right thing by requiring key types match the expected alg, but you should take the extra step to verify it in your usage. See the examples provided. ## What the heck is a JWT? @@ -37,7 +41,7 @@ Here's an example of an extension that integrates with the Google App Engine sig ## Compliance -This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: +This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: * In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key. @@ -47,7 +51,10 @@ This library is considered production ready. Feedback and feature requests are This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull requests will land on `master`. Periodically, versions will be tagged from `master`. You can find all the releases on [the project releases page](https://github.com/dgrijalva/jwt-go/releases). -While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v2`. It will do the right thing WRT semantic versioning. +While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v3`. It will do the right thing WRT semantic versioning. + +**BREAKING CHANGES:*** +* Version 3.0.0 includes _a lot_ of changes from the 2.x line, including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. ## Usage Tips @@ -68,6 +75,14 @@ Symmetric signing methods, such as HSA, use only a single secret. This is probab Asymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification. +### Signing Methods and Key Types + +Each signing method expects a different object type for its signing keys. See the package documentation for details. Here are the most common ones: + +* The [HMAC signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodHMAC) (`HS256`,`HS384`,`HS512`) expect `[]byte` values for signing and validation +* The [RSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodRSA) (`RS256`,`RS384`,`RS512`) expect `*rsa.PrivateKey` for signing and `*rsa.PublicKey` for validation +* The [ECDSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodECDSA) (`ES256`,`ES384`,`ES512`) expect `*ecdsa.PrivateKey` for signing and `*ecdsa.PublicKey` for validation + ### JWT and OAuth It's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication. @@ -77,7 +92,7 @@ Without going too far down the rabbit hole, here's a description of the interact * OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth. * OAuth defines several options for passing around authentication data. One popular method is called a "bearer token". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token. * Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL. - + ## More Documentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go). diff --git a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md index c21551f6..63702983 100644 --- a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md +++ b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md @@ -1,5 +1,12 @@ ## `jwt-go` Version History +#### 3.2.0 + +* Added method `ParseUnverified` to allow users to split up the tasks of parsing and validation +* HMAC signing method returns `ErrInvalidKeyType` instead of `ErrInvalidKey` where appropriate +* Added options to `request.ParseFromRequest`, which allows for an arbitrary list of modifiers to parsing behavior. Initial set include `WithClaims` and `WithParser`. Existing usage of this function will continue to work as before. +* Deprecated `ParseFromRequestWithClaims` to simplify API in the future. + #### 3.1.0 * Improvements to `jwt` command line tool diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go index 2f59a222..f9773812 100644 --- a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go +++ b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go @@ -14,6 +14,7 @@ var ( ) // Implements the ECDSA family of signing methods signing methods +// Expects *ecdsa.PrivateKey for signing and *ecdsa.PublicKey for verification type SigningMethodECDSA struct { Name string Hash crypto.Hash diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac.go b/vendor/github.com/dgrijalva/jwt-go/hmac.go index c2299192..addbe5d4 100644 --- a/vendor/github.com/dgrijalva/jwt-go/hmac.go +++ b/vendor/github.com/dgrijalva/jwt-go/hmac.go @@ -7,6 +7,7 @@ import ( ) // Implements the HMAC-SHA family of signing methods signing methods +// Expects key type of []byte for both signing and validation type SigningMethodHMAC struct { Name string Hash crypto.Hash @@ -90,5 +91,5 @@ func (m *SigningMethodHMAC) Sign(signingString string, key interface{}) (string, return EncodeSegment(hasher.Sum(nil)), nil } - return "", ErrInvalidKey + return "", ErrInvalidKeyType } diff --git a/vendor/github.com/dgrijalva/jwt-go/parser.go b/vendor/github.com/dgrijalva/jwt-go/parser.go index 7bf1c4ea..d6901d9a 100644 --- a/vendor/github.com/dgrijalva/jwt-go/parser.go +++ b/vendor/github.com/dgrijalva/jwt-go/parser.go @@ -21,55 +21,9 @@ func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { } func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - parts := strings.Split(tokenString, ".") - if len(parts) != 3 { - return nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - var err error - token := &Token{Raw: tokenString} - - // parse Header - var headerBytes []byte - if headerBytes, err = DecodeSegment(parts[0]); err != nil { - if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { - return token, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) - } - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - if err = json.Unmarshal(headerBytes, &token.Header); err != nil { - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // parse Claims - var claimBytes []byte - token.Claims = claims - - if claimBytes, err = DecodeSegment(parts[1]); err != nil { - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) - if p.UseJSONNumber { - dec.UseNumber() - } - // JSON Decode. Special case for map type to avoid weird pointer behavior - if c, ok := token.Claims.(MapClaims); ok { - err = dec.Decode(&c) - } else { - err = dec.Decode(&claims) - } - // Handle decode error + token, parts, err := p.ParseUnverified(tokenString, claims) if err != nil { - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // Lookup signature method - if method, ok := token.Header["alg"].(string); ok { - if token.Method = GetSigningMethod(method); token.Method == nil { - return token, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) - } - } else { - return token, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) + return token, err } // Verify signing method is in the required set @@ -96,6 +50,9 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf } if key, err = keyFunc(token); err != nil { // keyFunc returned an error + if ve, ok := err.(*ValidationError); ok { + return token, ve + } return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} } @@ -129,3 +86,63 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf return token, vErr } + +// WARNING: Don't use this method unless you know what you're doing +// +// This method parses the token but doesn't validate the signature. It's only +// ever useful in cases where you know the signature is valid (because it has +// been checked previously in the stack) and you want to extract values from +// it. +func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { + parts = strings.Split(tokenString, ".") + if len(parts) != 3 { + return nil, parts, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) + } + + token = &Token{Raw: tokenString} + + // parse Header + var headerBytes []byte + if headerBytes, err = DecodeSegment(parts[0]); err != nil { + if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { + return token, parts, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) + } + return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + if err = json.Unmarshal(headerBytes, &token.Header); err != nil { + return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + + // parse Claims + var claimBytes []byte + token.Claims = claims + + if claimBytes, err = DecodeSegment(parts[1]); err != nil { + return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) + if p.UseJSONNumber { + dec.UseNumber() + } + // JSON Decode. Special case for map type to avoid weird pointer behavior + if c, ok := token.Claims.(MapClaims); ok { + err = dec.Decode(&c) + } else { + err = dec.Decode(&claims) + } + // Handle decode error + if err != nil { + return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + + // Lookup signature method + if method, ok := token.Header["alg"].(string); ok { + if token.Method = GetSigningMethod(method); token.Method == nil { + return token, parts, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) + } + } else { + return token, parts, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) + } + + return token, parts, nil +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa.go b/vendor/github.com/dgrijalva/jwt-go/rsa.go index 0ae0b198..e4caf1ca 100644 --- a/vendor/github.com/dgrijalva/jwt-go/rsa.go +++ b/vendor/github.com/dgrijalva/jwt-go/rsa.go @@ -7,6 +7,7 @@ import ( ) // Implements the RSA family of signing methods signing methods +// Expects *rsa.PrivateKey for signing and *rsa.PublicKey for validation type SigningMethodRSA struct { Name string Hash crypto.Hash @@ -44,7 +45,7 @@ func (m *SigningMethodRSA) Alg() string { } // Implements the Verify method from SigningMethod -// For this signing method, must be an rsa.PublicKey structure. +// For this signing method, must be an *rsa.PublicKey structure. func (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error { var err error @@ -73,7 +74,7 @@ func (m *SigningMethodRSA) Verify(signingString, signature string, key interface } // Implements the Sign method from SigningMethod -// For this signing method, must be an rsa.PrivateKey structure. +// For this signing method, must be an *rsa.PrivateKey structure. func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) { var rsaKey *rsa.PrivateKey var ok bool diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go index 213a90db..a5ababf9 100644 --- a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go @@ -39,6 +39,38 @@ func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { return pkey, nil } +// Parse PEM encoded PKCS1 or PKCS8 private key protected with password +func ParseRSAPrivateKeyFromPEMWithPassword(key []byte, password string) (*rsa.PrivateKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + var parsedKey interface{} + + var blockDecrypted []byte + if blockDecrypted, err = x509.DecryptPEMBlock(block, []byte(password)); err != nil { + return nil, err + } + + if parsedKey, err = x509.ParsePKCS1PrivateKey(blockDecrypted); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(blockDecrypted); err != nil { + return nil, err + } + } + + var pkey *rsa.PrivateKey + var ok bool + if pkey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, ErrNotRSAPrivateKey + } + + return pkey, nil +} + // Parse PEM encoded PKCS1 or PKCS8 public key func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { var err error diff --git a/vendor/github.com/go-sql-driver/mysql/.travis.yml b/vendor/github.com/go-sql-driver/mysql/.travis.yml index cc1268c3..56fcf25f 100644 --- a/vendor/github.com/go-sql-driver/mysql/.travis.yml +++ b/vendor/github.com/go-sql-driver/mysql/.travis.yml @@ -1,10 +1,10 @@ sudo: false language: go go: - - 1.7.x - - 1.8.x - - 1.9.x - 1.10.x + - 1.11.x + - 1.12.x + - 1.13.x - master before_install: @@ -99,6 +99,28 @@ matrix: - export MYSQL_TEST_ADDR=127.0.0.1:3307 - export MYSQL_TEST_CONCURRENT=1 + - os: osx + osx_image: xcode10.1 + addons: + homebrew: + packages: + - mysql + update: true + go: 1.12.x + before_install: + - go get golang.org/x/tools/cmd/cover + - go get github.com/mattn/goveralls + before_script: + - echo -e "[server]\ninnodb_log_file_size=256MB\ninnodb_buffer_pool_size=512MB\nmax_allowed_packet=16MB\nlocal_infile=1" >> /usr/local/etc/my.cnf + - mysql.server start + - mysql -uroot -e 'CREATE USER gotest IDENTIFIED BY "secret"' + - mysql -uroot -e 'GRANT ALL ON *.* TO gotest' + - mysql -uroot -e 'create database gotest;' + - export MYSQL_TEST_USER=gotest + - export MYSQL_TEST_PASS=secret + - export MYSQL_TEST_ADDR=127.0.0.1:3306 + - export MYSQL_TEST_CONCURRENT=1 + script: - go test -v -covermode=count -coverprofile=coverage.out - go vet ./... diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS index 73ff68fb..ad598980 100644 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ b/vendor/github.com/go-sql-driver/mysql/AUTHORS @@ -27,6 +27,7 @@ Daniël van Eeden Dave Protasowski DisposaBoy Egor Smolyakov +Erwan Martin Evan Shaw Frederick Mayle Gustavo Kristic @@ -34,12 +35,16 @@ Hajime Nakagami Hanno Braun Henri Yandell Hirotaka Yamamoto +Huyiguang ICHINOSE Shogo +Ilia Cimpoes INADA Naoki Jacek Szwec James Harr Jeff Hodges Jeffrey Charles +Jerome Meyer +Jiajia Zhong Jian Zhen Joshua Prunier Julien Lefevre @@ -58,6 +63,7 @@ Lucas Liu Luke Scott Maciej Zimnoch Michael Woolnough +Nathanial Murphy Nicola Peduzzi Olivier Mengué oscarzhao @@ -69,9 +75,15 @@ Richard Wilkes Robert Russell Runrioter Wung Shuode Li +Simon J Mudd Soroush Pour Stan Putrya Stanley Gunawan +Steven Hartland +Thomas Wodarek +Tim Ruffles +Tom Jenkinson +Vladimir Kovpak Xiangyu Hu Xiaobing Jiang Xiuming Chen @@ -81,9 +93,13 @@ Zhenye Xie Barracuda Networks, Inc. Counting Ltd. +DigitalOcean Inc. +Facebook Inc. +GitHub Inc. Google Inc. InfoSum Ltd. Keybase Inc. +Multiplay Ltd. Percona LLC Pivotal Inc. Stripe Inc. diff --git a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md index ce1b5330..9cb97b38 100644 --- a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md +++ b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md @@ -1,3 +1,31 @@ +## Version 1.5 (2020-01-07) + +Changes: + + - Dropped support Go 1.9 and lower (#823, #829, #886, #1016, #1017) + - Improve buffer handling (#890) + - Document potentially insecure TLS configs (#901) + - Use a double-buffering scheme to prevent data races (#943) + - Pass uint64 values without converting them to string (#838, #955) + - Update collations and make utf8mb4 default (#877, #1054) + - Make NullTime compatible with sql.NullTime in Go 1.13+ (#995) + - Removed CloudSQL support (#993, #1007) + - Add Go Module support (#1003) + +New Features: + + - Implement support of optional TLS (#900) + - Check connection liveness (#934, #964, #997, #1048, #1051, #1052) + - Implement Connector Interface (#941, #958, #1020, #1035) + +Bugfixes: + + - Mark connections as bad on error during ping (#875) + - Mark connections as bad on error during dial (#867) + - Fix connection leak caused by rapid context cancellation (#1024) + - Mark connections as bad on error during Conn.Prepare (#1030) + + ## Version 1.4.1 (2018-11-14) Bugfixes: diff --git a/vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md b/vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md deleted file mode 100644 index 8fe16bcb..00000000 --- a/vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -# Contributing Guidelines - -## Reporting Issues - -Before creating a new Issue, please check first if a similar Issue [already exists](https://github.com/go-sql-driver/mysql/issues?state=open) or was [recently closed](https://github.com/go-sql-driver/mysql/issues?direction=desc&page=1&sort=updated&state=closed). - -## Contributing Code - -By contributing to this project, you share your code under the Mozilla Public License 2, as specified in the LICENSE file. -Don't forget to add yourself to the AUTHORS file. - -### Code Review - -Everyone is invited to review and comment on pull requests. -If it looks fine to you, comment with "LGTM" (Looks good to me). - -If changes are required, notice the reviewers with "PTAL" (Please take another look) after committing the fixes. - -Before merging the Pull Request, at least one [team member](https://github.com/go-sql-driver?tab=members) must have commented with "LGTM". - -## Development Ideas - -If you are looking for ideas for code contributions, please check our [Development Ideas](https://github.com/go-sql-driver/mysql/wiki/Development-Ideas) Wiki page. diff --git a/vendor/github.com/go-sql-driver/mysql/README.md b/vendor/github.com/go-sql-driver/mysql/README.md index 2e9b07ee..d2627a41 100644 --- a/vendor/github.com/go-sql-driver/mysql/README.md +++ b/vendor/github.com/go-sql-driver/mysql/README.md @@ -40,7 +40,7 @@ A MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) pac * Optional placeholder interpolation ## Requirements - * Go 1.7 or higher. We aim to support the 3 latest versions of Go. + * Go 1.10 or higher. We aim to support the 3 latest versions of Go. * MySQL (4.1+), MariaDB, Percona Server, Google CloudSQL or Sphinx (2.2.3+) --------------------------------------- @@ -166,18 +166,34 @@ Sets the charset used for client-server interaction (`"SET NAMES "`). If Usage of the `charset` parameter is discouraged because it issues additional queries to the server. Unless you need the fallback behavior, please use `collation` instead. +##### `checkConnLiveness` + +``` +Type: bool +Valid Values: true, false +Default: true +``` + +On supported platforms connections retrieved from the connection pool are checked for liveness before using them. If the check fails, the respective connection is marked as bad and the query retried with another connection. +`checkConnLiveness=false` disables this liveness check of connections. + ##### `collation` ``` Type: string Valid Values: -Default: utf8_general_ci +Default: utf8mb4_general_ci ``` Sets the collation used for client-server interaction on connection. In contrast to `charset`, `collation` does not issue additional queries. If the specified collation is unavailable on the target server, the connection will fail. A list of valid charsets for a server is retrievable with `SHOW COLLATION`. +The default collation (`utf8mb4_general_ci`) is supported from MySQL 5.5. You should use an older collation (e.g. `utf8_general_ci`) for older MySQL. + +Collations for charset "ucs2", "utf16", "utf16le", and "utf32" can not be used ([ref](https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset)). + + ##### `clientFoundRows` ``` @@ -328,11 +344,11 @@ Timeout for establishing connections, aka dial timeout. The value must be a deci ``` Type: bool / string -Valid Values: true, false, skip-verify, +Valid Values: true, false, skip-verify, preferred, Default: false ``` -`tls=true` enables TLS / SSL encrypted connection to the server. Use `skip-verify` if you want to use a self-signed or invalid certificate (server side). Use a custom value registered with [`mysql.RegisterTLSConfig`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterTLSConfig). +`tls=true` enables TLS / SSL encrypted connection to the server. Use `skip-verify` if you want to use a self-signed or invalid certificate (server side) or use `preferred` to use TLS only when advertised by the server. This is similar to `skip-verify`, but additionally allows a fallback to a connection which is not encrypted. Neither `skip-verify` nor `preferred` add any reliable security. You can use a custom TLS config after registering it with [`mysql.RegisterTLSConfig`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterTLSConfig). ##### `writeTimeout` @@ -391,14 +407,9 @@ TCP on a remote host, e.g. Amazon RDS: id:password@tcp(your-amazonaws-uri.com:3306)/dbname ``` -Google Cloud SQL on App Engine (First Generation MySQL Server): +Google Cloud SQL on App Engine: ``` -user@cloudsql(project-id:instance-name)/dbname -``` - -Google Cloud SQL on App Engine (Second Generation MySQL Server): -``` -user@cloudsql(project-id:regionname:instance-name)/dbname +user:password@unix(/cloudsql/project-id:region-name:instance-name)/dbname ``` TCP using default port (3306) on localhost: @@ -444,7 +455,7 @@ See the [godoc of Go-MySQL-Driver](https://godoc.org/github.com/go-sql-driver/my ### `time.Time` support The default internal output type of MySQL `DATE` and `DATETIME` values is `[]byte` which allows you to scan the value into a `[]byte`, `string` or `sql.RawBytes` variable in your program. -However, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` variables, which is the logical opposite in Go to `DATE` and `DATETIME` in MySQL. You can do that by changing the internal output type from `[]byte` to `time.Time` with the DSN parameter `parseTime=true`. You can set the default [`time.Time` location](https://golang.org/pkg/time/#Location) with the `loc` DSN parameter. +However, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` variables, which is the logical equivalent in Go to `DATE` and `DATETIME` in MySQL. You can do that by changing the internal output type from `[]byte` to `time.Time` with the DSN parameter `parseTime=true`. You can set the default [`time.Time` location](https://golang.org/pkg/time/#Location) with the `loc` DSN parameter. **Caution:** As of Go 1.1, this makes `time.Time` the only variable type you can scan `DATE` and `DATETIME` values into. This breaks for example [`sql.RawBytes` support](https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes). @@ -452,13 +463,13 @@ Alternatively you can use the [`NullTime`](https://godoc.org/github.com/go-sql-d ### Unicode support -Since version 1.1 Go-MySQL-Driver automatically uses the collation `utf8_general_ci` by default. +Since version 1.5 Go-MySQL-Driver automatically uses the collation ` utf8mb4_general_ci` by default. Other collations / charsets can be set using the [`collation`](#collation) DSN parameter. Version 1.0 of the driver recommended adding `&charset=utf8` (alias for `SET NAMES utf8`) to the DSN to enable proper UTF-8 support. This is not necessary anymore. The [`collation`](#collation) parameter should be preferred to set another collation / charset than the default. -See http://dev.mysql.com/doc/refman/5.7/en/charset-unicode.html for more details on MySQL's Unicode support. +See http://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html for more details on MySQL's Unicode support. ## Testing / Development To run the driver tests you may need to adjust the configuration. See the [Testing Wiki-Page](https://github.com/go-sql-driver/mysql/wiki/Testing "Testing") for details. diff --git a/vendor/github.com/go-sql-driver/mysql/auth.go b/vendor/github.com/go-sql-driver/mysql/auth.go index 14f678a8..fec7040d 100644 --- a/vendor/github.com/go-sql-driver/mysql/auth.go +++ b/vendor/github.com/go-sql-driver/mysql/auth.go @@ -360,13 +360,15 @@ func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { pubKey := mc.cfg.pubKey if pubKey == nil { // request public key from server - data := mc.buf.takeSmallBuffer(4 + 1) + data, err := mc.buf.takeSmallBuffer(4 + 1) + if err != nil { + return err + } data[4] = cachingSha2PasswordRequestPublicKey mc.writePacket(data) // parse public key - data, err := mc.readPacket() - if err != nil { + if data, err = mc.readPacket(); err != nil { return err } diff --git a/vendor/github.com/go-sql-driver/mysql/buffer.go b/vendor/github.com/go-sql-driver/mysql/buffer.go index eb4748bf..0774c5c8 100644 --- a/vendor/github.com/go-sql-driver/mysql/buffer.go +++ b/vendor/github.com/go-sql-driver/mysql/buffer.go @@ -15,47 +15,69 @@ import ( ) const defaultBufSize = 4096 +const maxCachedBufSize = 256 * 1024 // A buffer which is used for both reading and writing. // This is possible since communication on each connection is synchronous. // In other words, we can't write and read simultaneously on the same connection. // The buffer is similar to bufio.Reader / Writer but zero-copy-ish // Also highly optimized for this particular use case. +// This buffer is backed by two byte slices in a double-buffering scheme type buffer struct { - buf []byte + buf []byte // buf is a byte buffer who's length and capacity are equal. nc net.Conn idx int length int timeout time.Duration + dbuf [2][]byte // dbuf is an array with the two byte slices that back this buffer + flipcnt uint // flipccnt is the current buffer counter for double-buffering } +// newBuffer allocates and returns a new buffer. func newBuffer(nc net.Conn) buffer { - var b [defaultBufSize]byte + fg := make([]byte, defaultBufSize) return buffer{ - buf: b[:], - nc: nc, + buf: fg, + nc: nc, + dbuf: [2][]byte{fg, nil}, } } +// flip replaces the active buffer with the background buffer +// this is a delayed flip that simply increases the buffer counter; +// the actual flip will be performed the next time we call `buffer.fill` +func (b *buffer) flip() { + b.flipcnt += 1 +} + // fill reads into the buffer until at least _need_ bytes are in it func (b *buffer) fill(need int) error { n := b.length + // fill data into its double-buffering target: if we've called + // flip on this buffer, we'll be copying to the background buffer, + // and then filling it with network data; otherwise we'll just move + // the contents of the current buffer to the front before filling it + dest := b.dbuf[b.flipcnt&1] - // move existing data to the beginning - if n > 0 && b.idx > 0 { - copy(b.buf[0:n], b.buf[b.idx:]) - } - - // grow buffer if necessary - // TODO: let the buffer shrink again at some point - // Maybe keep the org buf slice and swap back? - if need > len(b.buf) { + // grow buffer if necessary to fit the whole packet. + if need > len(dest) { // Round up to the next multiple of the default size - newBuf := make([]byte, ((need/defaultBufSize)+1)*defaultBufSize) - copy(newBuf, b.buf) - b.buf = newBuf + dest = make([]byte, ((need/defaultBufSize)+1)*defaultBufSize) + + // if the allocated buffer is not too large, move it to backing storage + // to prevent extra allocations on applications that perform large reads + if len(dest) <= maxCachedBufSize { + b.dbuf[b.flipcnt&1] = dest + } } + // if we're filling the fg buffer, move the existing data to the start of it. + // if we're filling the bg buffer, copy over the data + if n > 0 { + copy(dest[:n], b.buf[b.idx:]) + } + + b.buf = dest b.idx = 0 for { @@ -105,43 +127,56 @@ func (b *buffer) readNext(need int) ([]byte, error) { return b.buf[offset:b.idx], nil } -// returns a buffer with the requested size. +// takeBuffer returns a buffer with the requested size. // If possible, a slice from the existing buffer is returned. // Otherwise a bigger buffer is made. // Only one buffer (total) can be used at a time. -func (b *buffer) takeBuffer(length int) []byte { +func (b *buffer) takeBuffer(length int) ([]byte, error) { if b.length > 0 { - return nil + return nil, ErrBusyBuffer } // test (cheap) general case first - if length <= defaultBufSize || length <= cap(b.buf) { - return b.buf[:length] + if length <= cap(b.buf) { + return b.buf[:length], nil } if length < maxPacketSize { b.buf = make([]byte, length) - return b.buf + return b.buf, nil } - return make([]byte, length) + + // buffer is larger than we want to store. + return make([]byte, length), nil } -// shortcut which can be used if the requested buffer is guaranteed to be -// smaller than defaultBufSize +// takeSmallBuffer is shortcut which can be used if length is +// known to be smaller than defaultBufSize. // Only one buffer (total) can be used at a time. -func (b *buffer) takeSmallBuffer(length int) []byte { +func (b *buffer) takeSmallBuffer(length int) ([]byte, error) { if b.length > 0 { - return nil + return nil, ErrBusyBuffer } - return b.buf[:length] + return b.buf[:length], nil } // takeCompleteBuffer returns the complete existing buffer. // This can be used if the necessary buffer size is unknown. +// cap and len of the returned buffer will be equal. // Only one buffer (total) can be used at a time. -func (b *buffer) takeCompleteBuffer() []byte { +func (b *buffer) takeCompleteBuffer() ([]byte, error) { if b.length > 0 { - return nil + return nil, ErrBusyBuffer } - return b.buf + return b.buf, nil +} + +// store stores buf, an updated buffer, if its suitable to do so. +func (b *buffer) store(buf []byte) error { + if b.length > 0 { + return ErrBusyBuffer + } else if cap(buf) <= maxPacketSize && cap(buf) > cap(b.buf) { + b.buf = buf[:cap(buf)] + } + return nil } diff --git a/vendor/github.com/go-sql-driver/mysql/collations.go b/vendor/github.com/go-sql-driver/mysql/collations.go index 136c9e4d..8d2b5567 100644 --- a/vendor/github.com/go-sql-driver/mysql/collations.go +++ b/vendor/github.com/go-sql-driver/mysql/collations.go @@ -8,183 +8,190 @@ package mysql -const defaultCollation = "utf8_general_ci" +const defaultCollation = "utf8mb4_general_ci" const binaryCollation = "binary" // A list of available collations mapped to the internal ID. // To update this map use the following MySQL query: -// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS +// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS WHERE ID<256 ORDER BY ID +// +// Handshake packet have only 1 byte for collation_id. So we can't use collations with ID > 255. +// +// ucs2, utf16, and utf32 can't be used for connection charset. +// https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset +// They are commented out to reduce this map. var collations = map[string]byte{ - "big5_chinese_ci": 1, - "latin2_czech_cs": 2, - "dec8_swedish_ci": 3, - "cp850_general_ci": 4, - "latin1_german1_ci": 5, - "hp8_english_ci": 6, - "koi8r_general_ci": 7, - "latin1_swedish_ci": 8, - "latin2_general_ci": 9, - "swe7_swedish_ci": 10, - "ascii_general_ci": 11, - "ujis_japanese_ci": 12, - "sjis_japanese_ci": 13, - "cp1251_bulgarian_ci": 14, - "latin1_danish_ci": 15, - "hebrew_general_ci": 16, - "tis620_thai_ci": 18, - "euckr_korean_ci": 19, - "latin7_estonian_cs": 20, - "latin2_hungarian_ci": 21, - "koi8u_general_ci": 22, - "cp1251_ukrainian_ci": 23, - "gb2312_chinese_ci": 24, - "greek_general_ci": 25, - "cp1250_general_ci": 26, - "latin2_croatian_ci": 27, - "gbk_chinese_ci": 28, - "cp1257_lithuanian_ci": 29, - "latin5_turkish_ci": 30, - "latin1_german2_ci": 31, - "armscii8_general_ci": 32, - "utf8_general_ci": 33, - "cp1250_czech_cs": 34, - "ucs2_general_ci": 35, - "cp866_general_ci": 36, - "keybcs2_general_ci": 37, - "macce_general_ci": 38, - "macroman_general_ci": 39, - "cp852_general_ci": 40, - "latin7_general_ci": 41, - "latin7_general_cs": 42, - "macce_bin": 43, - "cp1250_croatian_ci": 44, - "utf8mb4_general_ci": 45, - "utf8mb4_bin": 46, - "latin1_bin": 47, - "latin1_general_ci": 48, - "latin1_general_cs": 49, - "cp1251_bin": 50, - "cp1251_general_ci": 51, - "cp1251_general_cs": 52, - "macroman_bin": 53, - "utf16_general_ci": 54, - "utf16_bin": 55, - "utf16le_general_ci": 56, - "cp1256_general_ci": 57, - "cp1257_bin": 58, - "cp1257_general_ci": 59, - "utf32_general_ci": 60, - "utf32_bin": 61, - "utf16le_bin": 62, - "binary": 63, - "armscii8_bin": 64, - "ascii_bin": 65, - "cp1250_bin": 66, - "cp1256_bin": 67, - "cp866_bin": 68, - "dec8_bin": 69, - "greek_bin": 70, - "hebrew_bin": 71, - "hp8_bin": 72, - "keybcs2_bin": 73, - "koi8r_bin": 74, - "koi8u_bin": 75, - "latin2_bin": 77, - "latin5_bin": 78, - "latin7_bin": 79, - "cp850_bin": 80, - "cp852_bin": 81, - "swe7_bin": 82, - "utf8_bin": 83, - "big5_bin": 84, - "euckr_bin": 85, - "gb2312_bin": 86, - "gbk_bin": 87, - "sjis_bin": 88, - "tis620_bin": 89, - "ucs2_bin": 90, - "ujis_bin": 91, - "geostd8_general_ci": 92, - "geostd8_bin": 93, - "latin1_spanish_ci": 94, - "cp932_japanese_ci": 95, - "cp932_bin": 96, - "eucjpms_japanese_ci": 97, - "eucjpms_bin": 98, - "cp1250_polish_ci": 99, - "utf16_unicode_ci": 101, - "utf16_icelandic_ci": 102, - "utf16_latvian_ci": 103, - "utf16_romanian_ci": 104, - "utf16_slovenian_ci": 105, - "utf16_polish_ci": 106, - "utf16_estonian_ci": 107, - "utf16_spanish_ci": 108, - "utf16_swedish_ci": 109, - "utf16_turkish_ci": 110, - "utf16_czech_ci": 111, - "utf16_danish_ci": 112, - "utf16_lithuanian_ci": 113, - "utf16_slovak_ci": 114, - "utf16_spanish2_ci": 115, - "utf16_roman_ci": 116, - "utf16_persian_ci": 117, - "utf16_esperanto_ci": 118, - "utf16_hungarian_ci": 119, - "utf16_sinhala_ci": 120, - "utf16_german2_ci": 121, - "utf16_croatian_ci": 122, - "utf16_unicode_520_ci": 123, - "utf16_vietnamese_ci": 124, - "ucs2_unicode_ci": 128, - "ucs2_icelandic_ci": 129, - "ucs2_latvian_ci": 130, - "ucs2_romanian_ci": 131, - "ucs2_slovenian_ci": 132, - "ucs2_polish_ci": 133, - "ucs2_estonian_ci": 134, - "ucs2_spanish_ci": 135, - "ucs2_swedish_ci": 136, - "ucs2_turkish_ci": 137, - "ucs2_czech_ci": 138, - "ucs2_danish_ci": 139, - "ucs2_lithuanian_ci": 140, - "ucs2_slovak_ci": 141, - "ucs2_spanish2_ci": 142, - "ucs2_roman_ci": 143, - "ucs2_persian_ci": 144, - "ucs2_esperanto_ci": 145, - "ucs2_hungarian_ci": 146, - "ucs2_sinhala_ci": 147, - "ucs2_german2_ci": 148, - "ucs2_croatian_ci": 149, - "ucs2_unicode_520_ci": 150, - "ucs2_vietnamese_ci": 151, - "ucs2_general_mysql500_ci": 159, - "utf32_unicode_ci": 160, - "utf32_icelandic_ci": 161, - "utf32_latvian_ci": 162, - "utf32_romanian_ci": 163, - "utf32_slovenian_ci": 164, - "utf32_polish_ci": 165, - "utf32_estonian_ci": 166, - "utf32_spanish_ci": 167, - "utf32_swedish_ci": 168, - "utf32_turkish_ci": 169, - "utf32_czech_ci": 170, - "utf32_danish_ci": 171, - "utf32_lithuanian_ci": 172, - "utf32_slovak_ci": 173, - "utf32_spanish2_ci": 174, - "utf32_roman_ci": 175, - "utf32_persian_ci": 176, - "utf32_esperanto_ci": 177, - "utf32_hungarian_ci": 178, - "utf32_sinhala_ci": 179, - "utf32_german2_ci": 180, - "utf32_croatian_ci": 181, - "utf32_unicode_520_ci": 182, - "utf32_vietnamese_ci": 183, + "big5_chinese_ci": 1, + "latin2_czech_cs": 2, + "dec8_swedish_ci": 3, + "cp850_general_ci": 4, + "latin1_german1_ci": 5, + "hp8_english_ci": 6, + "koi8r_general_ci": 7, + "latin1_swedish_ci": 8, + "latin2_general_ci": 9, + "swe7_swedish_ci": 10, + "ascii_general_ci": 11, + "ujis_japanese_ci": 12, + "sjis_japanese_ci": 13, + "cp1251_bulgarian_ci": 14, + "latin1_danish_ci": 15, + "hebrew_general_ci": 16, + "tis620_thai_ci": 18, + "euckr_korean_ci": 19, + "latin7_estonian_cs": 20, + "latin2_hungarian_ci": 21, + "koi8u_general_ci": 22, + "cp1251_ukrainian_ci": 23, + "gb2312_chinese_ci": 24, + "greek_general_ci": 25, + "cp1250_general_ci": 26, + "latin2_croatian_ci": 27, + "gbk_chinese_ci": 28, + "cp1257_lithuanian_ci": 29, + "latin5_turkish_ci": 30, + "latin1_german2_ci": 31, + "armscii8_general_ci": 32, + "utf8_general_ci": 33, + "cp1250_czech_cs": 34, + //"ucs2_general_ci": 35, + "cp866_general_ci": 36, + "keybcs2_general_ci": 37, + "macce_general_ci": 38, + "macroman_general_ci": 39, + "cp852_general_ci": 40, + "latin7_general_ci": 41, + "latin7_general_cs": 42, + "macce_bin": 43, + "cp1250_croatian_ci": 44, + "utf8mb4_general_ci": 45, + "utf8mb4_bin": 46, + "latin1_bin": 47, + "latin1_general_ci": 48, + "latin1_general_cs": 49, + "cp1251_bin": 50, + "cp1251_general_ci": 51, + "cp1251_general_cs": 52, + "macroman_bin": 53, + //"utf16_general_ci": 54, + //"utf16_bin": 55, + //"utf16le_general_ci": 56, + "cp1256_general_ci": 57, + "cp1257_bin": 58, + "cp1257_general_ci": 59, + //"utf32_general_ci": 60, + //"utf32_bin": 61, + //"utf16le_bin": 62, + "binary": 63, + "armscii8_bin": 64, + "ascii_bin": 65, + "cp1250_bin": 66, + "cp1256_bin": 67, + "cp866_bin": 68, + "dec8_bin": 69, + "greek_bin": 70, + "hebrew_bin": 71, + "hp8_bin": 72, + "keybcs2_bin": 73, + "koi8r_bin": 74, + "koi8u_bin": 75, + "utf8_tolower_ci": 76, + "latin2_bin": 77, + "latin5_bin": 78, + "latin7_bin": 79, + "cp850_bin": 80, + "cp852_bin": 81, + "swe7_bin": 82, + "utf8_bin": 83, + "big5_bin": 84, + "euckr_bin": 85, + "gb2312_bin": 86, + "gbk_bin": 87, + "sjis_bin": 88, + "tis620_bin": 89, + //"ucs2_bin": 90, + "ujis_bin": 91, + "geostd8_general_ci": 92, + "geostd8_bin": 93, + "latin1_spanish_ci": 94, + "cp932_japanese_ci": 95, + "cp932_bin": 96, + "eucjpms_japanese_ci": 97, + "eucjpms_bin": 98, + "cp1250_polish_ci": 99, + //"utf16_unicode_ci": 101, + //"utf16_icelandic_ci": 102, + //"utf16_latvian_ci": 103, + //"utf16_romanian_ci": 104, + //"utf16_slovenian_ci": 105, + //"utf16_polish_ci": 106, + //"utf16_estonian_ci": 107, + //"utf16_spanish_ci": 108, + //"utf16_swedish_ci": 109, + //"utf16_turkish_ci": 110, + //"utf16_czech_ci": 111, + //"utf16_danish_ci": 112, + //"utf16_lithuanian_ci": 113, + //"utf16_slovak_ci": 114, + //"utf16_spanish2_ci": 115, + //"utf16_roman_ci": 116, + //"utf16_persian_ci": 117, + //"utf16_esperanto_ci": 118, + //"utf16_hungarian_ci": 119, + //"utf16_sinhala_ci": 120, + //"utf16_german2_ci": 121, + //"utf16_croatian_ci": 122, + //"utf16_unicode_520_ci": 123, + //"utf16_vietnamese_ci": 124, + //"ucs2_unicode_ci": 128, + //"ucs2_icelandic_ci": 129, + //"ucs2_latvian_ci": 130, + //"ucs2_romanian_ci": 131, + //"ucs2_slovenian_ci": 132, + //"ucs2_polish_ci": 133, + //"ucs2_estonian_ci": 134, + //"ucs2_spanish_ci": 135, + //"ucs2_swedish_ci": 136, + //"ucs2_turkish_ci": 137, + //"ucs2_czech_ci": 138, + //"ucs2_danish_ci": 139, + //"ucs2_lithuanian_ci": 140, + //"ucs2_slovak_ci": 141, + //"ucs2_spanish2_ci": 142, + //"ucs2_roman_ci": 143, + //"ucs2_persian_ci": 144, + //"ucs2_esperanto_ci": 145, + //"ucs2_hungarian_ci": 146, + //"ucs2_sinhala_ci": 147, + //"ucs2_german2_ci": 148, + //"ucs2_croatian_ci": 149, + //"ucs2_unicode_520_ci": 150, + //"ucs2_vietnamese_ci": 151, + //"ucs2_general_mysql500_ci": 159, + //"utf32_unicode_ci": 160, + //"utf32_icelandic_ci": 161, + //"utf32_latvian_ci": 162, + //"utf32_romanian_ci": 163, + //"utf32_slovenian_ci": 164, + //"utf32_polish_ci": 165, + //"utf32_estonian_ci": 166, + //"utf32_spanish_ci": 167, + //"utf32_swedish_ci": 168, + //"utf32_turkish_ci": 169, + //"utf32_czech_ci": 170, + //"utf32_danish_ci": 171, + //"utf32_lithuanian_ci": 172, + //"utf32_slovak_ci": 173, + //"utf32_spanish2_ci": 174, + //"utf32_roman_ci": 175, + //"utf32_persian_ci": 176, + //"utf32_esperanto_ci": 177, + //"utf32_hungarian_ci": 178, + //"utf32_sinhala_ci": 179, + //"utf32_german2_ci": 180, + //"utf32_croatian_ci": 181, + //"utf32_unicode_520_ci": 182, + //"utf32_vietnamese_ci": 183, "utf8_unicode_ci": 192, "utf8_icelandic_ci": 193, "utf8_latvian_ci": 194, @@ -234,18 +241,25 @@ var collations = map[string]byte{ "utf8mb4_croatian_ci": 245, "utf8mb4_unicode_520_ci": 246, "utf8mb4_vietnamese_ci": 247, + "gb18030_chinese_ci": 248, + "gb18030_bin": 249, + "gb18030_unicode_520_ci": 250, + "utf8mb4_0900_ai_ci": 255, } // A blacklist of collations which is unsafe to interpolate parameters. // These multibyte encodings may contains 0x5c (`\`) in their trailing bytes. var unsafeCollations = map[string]bool{ - "big5_chinese_ci": true, - "sjis_japanese_ci": true, - "gbk_chinese_ci": true, - "big5_bin": true, - "gb2312_bin": true, - "gbk_bin": true, - "sjis_bin": true, - "cp932_japanese_ci": true, - "cp932_bin": true, + "big5_chinese_ci": true, + "sjis_japanese_ci": true, + "gbk_chinese_ci": true, + "big5_bin": true, + "gb2312_bin": true, + "gbk_bin": true, + "sjis_bin": true, + "cp932_japanese_ci": true, + "cp932_bin": true, + "gb18030_chinese_ci": true, + "gb18030_bin": true, + "gb18030_unicode_520_ci": true, } diff --git a/vendor/github.com/go-sql-driver/mysql/conncheck.go b/vendor/github.com/go-sql-driver/mysql/conncheck.go new file mode 100644 index 00000000..024eb285 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/conncheck.go @@ -0,0 +1,54 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build linux darwin dragonfly freebsd netbsd openbsd solaris illumos + +package mysql + +import ( + "errors" + "io" + "net" + "syscall" +) + +var errUnexpectedRead = errors.New("unexpected read from socket") + +func connCheck(conn net.Conn) error { + var sysErr error + + sysConn, ok := conn.(syscall.Conn) + if !ok { + return nil + } + rawConn, err := sysConn.SyscallConn() + if err != nil { + return err + } + + err = rawConn.Read(func(fd uintptr) bool { + var buf [1]byte + n, err := syscall.Read(int(fd), buf[:]) + switch { + case n == 0 && err == nil: + sysErr = io.EOF + case n > 0: + sysErr = errUnexpectedRead + case err == syscall.EAGAIN || err == syscall.EWOULDBLOCK: + sysErr = nil + default: + sysErr = err + } + return true + }) + if err != nil { + return err + } + + return sysErr +} diff --git a/vendor/github.com/go-sql-driver/mysql/appengine.go b/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go similarity index 59% rename from vendor/github.com/go-sql-driver/mysql/appengine.go rename to vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go index be41f2ee..ea7fb607 100644 --- a/vendor/github.com/go-sql-driver/mysql/appengine.go +++ b/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go @@ -1,19 +1,17 @@ // Go MySQL Driver - A MySQL-Driver for Go's database/sql package // -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. +// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved. // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -// +build appengine +// +build !linux,!darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!illumos package mysql -import ( - "google.golang.org/appengine/cloudsql" -) +import "net" -func init() { - RegisterDial("cloudsql", cloudsql.Dial) +func connCheck(conn net.Conn) error { + return nil } diff --git a/vendor/github.com/go-sql-driver/mysql/connection.go b/vendor/github.com/go-sql-driver/mysql/connection.go index e5706141..e4bb59e6 100644 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ b/vendor/github.com/go-sql-driver/mysql/connection.go @@ -9,6 +9,8 @@ package mysql import ( + "context" + "database/sql" "database/sql/driver" "io" "net" @@ -17,19 +19,10 @@ import ( "time" ) -// a copy of context.Context for Go 1.7 and earlier -type mysqlContext interface { - Done() <-chan struct{} - Err() error - - // defined in context.Context, but not used in this driver: - // Deadline() (deadline time.Time, ok bool) - // Value(key interface{}) interface{} -} - type mysqlConn struct { buf buffer netConn net.Conn + rawConn net.Conn // underlying connection when netConn is TLS connection. affectedRows uint64 insertId uint64 cfg *Config @@ -40,10 +33,11 @@ type mysqlConn struct { status statusFlag sequence uint8 parseTime bool + reset bool // set when the Go SQL package calls ResetSession // for context support (Go 1.8+) watching bool - watcher chan<- mysqlContext + watcher chan<- context.Context closech chan struct{} finished chan<- struct{} canceled atomicError // set non-nil if conn is canceled @@ -160,7 +154,9 @@ func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) { // Send command err := mc.writeCommandPacketStr(comStmtPrepare, query) if err != nil { - return nil, mc.markBadConn(err) + // STMT_PREPARE is safe to retry. So we can return ErrBadConn here. + errLog.Print(err) + return nil, driver.ErrBadConn } stmt := &mysqlStmt{ @@ -190,10 +186,10 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin return "", driver.ErrSkip } - buf := mc.buf.takeCompleteBuffer() - if buf == nil { + buf, err := mc.buf.takeCompleteBuffer() + if err != nil { // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return "", ErrInvalidConn } buf = buf[:0] @@ -219,6 +215,9 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin switch v := arg.(type) { case int64: buf = strconv.AppendInt(buf, v, 10) + case uint64: + // Handle uint64 explicitly because our custom ConvertValue emits unsigned values + buf = strconv.AppendUint(buf, v, 10) case float64: buf = strconv.AppendFloat(buf, v, 'g', -1, 64) case bool: @@ -459,3 +458,194 @@ func (mc *mysqlConn) finish() { case <-mc.closech: } } + +// Ping implements driver.Pinger interface +func (mc *mysqlConn) Ping(ctx context.Context) (err error) { + if mc.closed.IsSet() { + errLog.Print(ErrInvalidConn) + return driver.ErrBadConn + } + + if err = mc.watchCancel(ctx); err != nil { + return + } + defer mc.finish() + + if err = mc.writeCommandPacket(comPing); err != nil { + return mc.markBadConn(err) + } + + return mc.readResultOK() +} + +// BeginTx implements driver.ConnBeginTx interface +func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + defer mc.finish() + + if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { + level, err := mapIsolationLevel(opts.Isolation) + if err != nil { + return nil, err + } + err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) + if err != nil { + return nil, err + } + } + + return mc.begin(opts.ReadOnly) +} + +func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + + rows, err := mc.query(query, dargs) + if err != nil { + mc.finish() + return nil, err + } + rows.finish = mc.finish + return rows, err +} + +func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + defer mc.finish() + + return mc.Exec(query, dargs) +} + +func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + + stmt, err := mc.Prepare(query) + mc.finish() + if err != nil { + return nil, err + } + + select { + default: + case <-ctx.Done(): + stmt.Close() + return nil, ctx.Err() + } + return stmt, nil +} + +func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := stmt.mc.watchCancel(ctx); err != nil { + return nil, err + } + + rows, err := stmt.query(dargs) + if err != nil { + stmt.mc.finish() + return nil, err + } + rows.finish = stmt.mc.finish + return rows, err +} + +func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := stmt.mc.watchCancel(ctx); err != nil { + return nil, err + } + defer stmt.mc.finish() + + return stmt.Exec(dargs) +} + +func (mc *mysqlConn) watchCancel(ctx context.Context) error { + if mc.watching { + // Reach here if canceled, + // so the connection is already invalid + mc.cleanup() + return nil + } + // When ctx is already cancelled, don't watch it. + if err := ctx.Err(); err != nil { + return err + } + // When ctx is not cancellable, don't watch it. + if ctx.Done() == nil { + return nil + } + // When watcher is not alive, can't watch it. + if mc.watcher == nil { + return nil + } + + mc.watching = true + mc.watcher <- ctx + return nil +} + +func (mc *mysqlConn) startWatcher() { + watcher := make(chan context.Context, 1) + mc.watcher = watcher + finished := make(chan struct{}) + mc.finished = finished + go func() { + for { + var ctx context.Context + select { + case ctx = <-watcher: + case <-mc.closech: + return + } + + select { + case <-ctx.Done(): + mc.cancel(ctx.Err()) + case <-finished: + case <-mc.closech: + return + } + } + }() +} + +func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { + nv.Value, err = converter{}.ConvertValue(nv.Value) + return +} + +// ResetSession implements driver.SessionResetter. +// (From Go 1.10) +func (mc *mysqlConn) ResetSession(ctx context.Context) error { + if mc.closed.IsSet() { + return driver.ErrBadConn + } + mc.reset = true + return nil +} diff --git a/vendor/github.com/go-sql-driver/mysql/connection_go18.go b/vendor/github.com/go-sql-driver/mysql/connection_go18.go deleted file mode 100644 index ce52c7d1..00000000 --- a/vendor/github.com/go-sql-driver/mysql/connection_go18.go +++ /dev/null @@ -1,207 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.8 - -package mysql - -import ( - "context" - "database/sql" - "database/sql/driver" -) - -// Ping implements driver.Pinger interface -func (mc *mysqlConn) Ping(ctx context.Context) (err error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return driver.ErrBadConn - } - - if err = mc.watchCancel(ctx); err != nil { - return - } - defer mc.finish() - - if err = mc.writeCommandPacket(comPing); err != nil { - return - } - - return mc.readResultOK() -} - -// BeginTx implements driver.ConnBeginTx interface -func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { - level, err := mapIsolationLevel(opts.Isolation) - if err != nil { - return nil, err - } - err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) - if err != nil { - return nil, err - } - } - - return mc.begin(opts.ReadOnly) -} - -func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - - rows, err := mc.query(query, dargs) - if err != nil { - mc.finish() - return nil, err - } - rows.finish = mc.finish - return rows, err -} - -func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - return mc.Exec(query, dargs) -} - -func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - - stmt, err := mc.Prepare(query) - mc.finish() - if err != nil { - return nil, err - } - - select { - default: - case <-ctx.Done(): - stmt.Close() - return nil, ctx.Err() - } - return stmt, nil -} - -func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := stmt.mc.watchCancel(ctx); err != nil { - return nil, err - } - - rows, err := stmt.query(dargs) - if err != nil { - stmt.mc.finish() - return nil, err - } - rows.finish = stmt.mc.finish - return rows, err -} - -func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := stmt.mc.watchCancel(ctx); err != nil { - return nil, err - } - defer stmt.mc.finish() - - return stmt.Exec(dargs) -} - -func (mc *mysqlConn) watchCancel(ctx context.Context) error { - if mc.watching { - // Reach here if canceled, - // so the connection is already invalid - mc.cleanup() - return nil - } - // When ctx is already cancelled, don't watch it. - if err := ctx.Err(); err != nil { - return err - } - // When ctx is not cancellable, don't watch it. - if ctx.Done() == nil { - return nil - } - // When watcher is not alive, can't watch it. - if mc.watcher == nil { - return nil - } - - mc.watching = true - mc.watcher <- ctx - return nil -} - -func (mc *mysqlConn) startWatcher() { - watcher := make(chan mysqlContext, 1) - mc.watcher = watcher - finished := make(chan struct{}) - mc.finished = finished - go func() { - for { - var ctx mysqlContext - select { - case ctx = <-watcher: - case <-mc.closech: - return - } - - select { - case <-ctx.Done(): - mc.cancel(ctx.Err()) - case <-finished: - case <-mc.closech: - return - } - } - }() -} - -func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { - nv.Value, err = converter{}.ConvertValue(nv.Value) - return -} - -// ResetSession implements driver.SessionResetter. -// (From Go 1.10) -func (mc *mysqlConn) ResetSession(ctx context.Context) error { - if mc.closed.IsSet() { - return driver.ErrBadConn - } - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/connector.go b/vendor/github.com/go-sql-driver/mysql/connector.go new file mode 100644 index 00000000..d567b4e4 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/connector.go @@ -0,0 +1,146 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +package mysql + +import ( + "context" + "database/sql/driver" + "net" +) + +type connector struct { + cfg *Config // immutable private copy. +} + +// Connect implements driver.Connector interface. +// Connect returns a connection to the database. +func (c *connector) Connect(ctx context.Context) (driver.Conn, error) { + var err error + + // New mysqlConn + mc := &mysqlConn{ + maxAllowedPacket: maxPacketSize, + maxWriteSize: maxPacketSize - 1, + closech: make(chan struct{}), + cfg: c.cfg, + } + mc.parseTime = mc.cfg.ParseTime + + // Connect to Server + dialsLock.RLock() + dial, ok := dials[mc.cfg.Net] + dialsLock.RUnlock() + if ok { + dctx := ctx + if mc.cfg.Timeout > 0 { + var cancel context.CancelFunc + dctx, cancel = context.WithTimeout(ctx, c.cfg.Timeout) + defer cancel() + } + mc.netConn, err = dial(dctx, mc.cfg.Addr) + } else { + nd := net.Dialer{Timeout: mc.cfg.Timeout} + mc.netConn, err = nd.DialContext(ctx, mc.cfg.Net, mc.cfg.Addr) + } + + if err != nil { + return nil, err + } + + // Enable TCP Keepalives on TCP connections + if tc, ok := mc.netConn.(*net.TCPConn); ok { + if err := tc.SetKeepAlive(true); err != nil { + // Don't send COM_QUIT before handshake. + mc.netConn.Close() + mc.netConn = nil + return nil, err + } + } + + // Call startWatcher for context support (From Go 1.8) + mc.startWatcher() + if err := mc.watchCancel(ctx); err != nil { + mc.cleanup() + return nil, err + } + defer mc.finish() + + mc.buf = newBuffer(mc.netConn) + + // Set I/O timeouts + mc.buf.timeout = mc.cfg.ReadTimeout + mc.writeTimeout = mc.cfg.WriteTimeout + + // Reading Handshake Initialization Packet + authData, plugin, err := mc.readHandshakePacket() + if err != nil { + mc.cleanup() + return nil, err + } + + if plugin == "" { + plugin = defaultAuthPlugin + } + + // Send Client Authentication Packet + authResp, err := mc.auth(authData, plugin) + if err != nil { + // try the default auth plugin, if using the requested plugin failed + errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) + plugin = defaultAuthPlugin + authResp, err = mc.auth(authData, plugin) + if err != nil { + mc.cleanup() + return nil, err + } + } + if err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil { + mc.cleanup() + return nil, err + } + + // Handle response to auth packet, switch methods if possible + if err = mc.handleAuthResult(authData, plugin); err != nil { + // Authentication failed and MySQL has already closed the connection + // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). + // Do not send COM_QUIT, just cleanup and return the error. + mc.cleanup() + return nil, err + } + + if mc.cfg.MaxAllowedPacket > 0 { + mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket + } else { + // Get max allowed packet size + maxap, err := mc.getSystemVar("max_allowed_packet") + if err != nil { + mc.Close() + return nil, err + } + mc.maxAllowedPacket = stringToInt(maxap) - 1 + } + if mc.maxAllowedPacket < maxPacketSize { + mc.maxWriteSize = mc.maxAllowedPacket + } + + // Handle DSN Params + err = mc.handleParams() + if err != nil { + mc.Close() + return nil, err + } + + return mc, nil +} + +// Driver implements driver.Connector interface. +// Driver returns &MySQLDriver{}. +func (c *connector) Driver() driver.Driver { + return &MySQLDriver{} +} diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go index e9ede2c8..c1bdf119 100644 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ b/vendor/github.com/go-sql-driver/mysql/driver.go @@ -17,156 +17,91 @@ package mysql import ( + "context" "database/sql" "database/sql/driver" "net" "sync" ) -// watcher interface is used for context support (From Go 1.8) -type watcher interface { - startWatcher() -} - // MySQLDriver is exported to make the driver directly accessible. // In general the driver is used via the database/sql package. type MySQLDriver struct{} // DialFunc is a function which can be used to establish the network connection. // Custom dial functions must be registered with RegisterDial +// +// Deprecated: users should register a DialContextFunc instead type DialFunc func(addr string) (net.Conn, error) +// DialContextFunc is a function which can be used to establish the network connection. +// Custom dial functions must be registered with RegisterDialContext +type DialContextFunc func(ctx context.Context, addr string) (net.Conn, error) + var ( dialsLock sync.RWMutex - dials map[string]DialFunc + dials map[string]DialContextFunc ) -// RegisterDial registers a custom dial function. It can then be used by the +// RegisterDialContext registers a custom dial function. It can then be used by the // network address mynet(addr), where mynet is the registered new network. -// addr is passed as a parameter to the dial function. -func RegisterDial(net string, dial DialFunc) { +// The current context for the connection and its address is passed to the dial function. +func RegisterDialContext(net string, dial DialContextFunc) { dialsLock.Lock() defer dialsLock.Unlock() if dials == nil { - dials = make(map[string]DialFunc) + dials = make(map[string]DialContextFunc) } dials[net] = dial } +// RegisterDial registers a custom dial function. It can then be used by the +// network address mynet(addr), where mynet is the registered new network. +// addr is passed as a parameter to the dial function. +// +// Deprecated: users should call RegisterDialContext instead +func RegisterDial(network string, dial DialFunc) { + RegisterDialContext(network, func(_ context.Context, addr string) (net.Conn, error) { + return dial(addr) + }) +} + // Open new Connection. // See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how -// the DSN string is formated +// the DSN string is formatted func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { - var err error - - // New mysqlConn - mc := &mysqlConn{ - maxAllowedPacket: maxPacketSize, - maxWriteSize: maxPacketSize - 1, - closech: make(chan struct{}), - } - mc.cfg, err = ParseDSN(dsn) + cfg, err := ParseDSN(dsn) if err != nil { return nil, err } - mc.parseTime = mc.cfg.ParseTime - - // Connect to Server - dialsLock.RLock() - dial, ok := dials[mc.cfg.Net] - dialsLock.RUnlock() - if ok { - mc.netConn, err = dial(mc.cfg.Addr) - } else { - nd := net.Dialer{Timeout: mc.cfg.Timeout} - mc.netConn, err = nd.Dial(mc.cfg.Net, mc.cfg.Addr) + c := &connector{ + cfg: cfg, } - if err != nil { - return nil, err - } - - // Enable TCP Keepalives on TCP connections - if tc, ok := mc.netConn.(*net.TCPConn); ok { - if err := tc.SetKeepAlive(true); err != nil { - // Don't send COM_QUIT before handshake. - mc.netConn.Close() - mc.netConn = nil - return nil, err - } - } - - // Call startWatcher for context support (From Go 1.8) - if s, ok := interface{}(mc).(watcher); ok { - s.startWatcher() - } - - mc.buf = newBuffer(mc.netConn) - - // Set I/O timeouts - mc.buf.timeout = mc.cfg.ReadTimeout - mc.writeTimeout = mc.cfg.WriteTimeout - - // Reading Handshake Initialization Packet - authData, plugin, err := mc.readHandshakePacket() - if err != nil { - mc.cleanup() - return nil, err - } - if plugin == "" { - plugin = defaultAuthPlugin - } - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - // try the default auth plugin, if using the requested plugin failed - errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) - plugin = defaultAuthPlugin - authResp, err = mc.auth(authData, plugin) - if err != nil { - mc.cleanup() - return nil, err - } - } - if err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil { - mc.cleanup() - return nil, err - } - - // Handle response to auth packet, switch methods if possible - if err = mc.handleAuthResult(authData, plugin); err != nil { - // Authentication failed and MySQL has already closed the connection - // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). - // Do not send COM_QUIT, just cleanup and return the error. - mc.cleanup() - return nil, err - } - - if mc.cfg.MaxAllowedPacket > 0 { - mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket - } else { - // Get max allowed packet size - maxap, err := mc.getSystemVar("max_allowed_packet") - if err != nil { - mc.Close() - return nil, err - } - mc.maxAllowedPacket = stringToInt(maxap) - 1 - } - if mc.maxAllowedPacket < maxPacketSize { - mc.maxWriteSize = mc.maxAllowedPacket - } - - // Handle DSN Params - err = mc.handleParams() - if err != nil { - mc.Close() - return nil, err - } - - return mc, nil + return c.Connect(context.Background()) } func init() { sql.Register("mysql", &MySQLDriver{}) } + +// NewConnector returns new driver.Connector. +func NewConnector(cfg *Config) (driver.Connector, error) { + cfg = cfg.Clone() + // normalize the contents of cfg so calls to NewConnector have the same + // behavior as MySQLDriver.OpenConnector + if err := cfg.normalize(); err != nil { + return nil, err + } + return &connector{cfg: cfg}, nil +} + +// OpenConnector implements driver.DriverContext. +func (d MySQLDriver) OpenConnector(dsn string) (driver.Connector, error) { + cfg, err := ParseDSN(dsn) + if err != nil { + return nil, err + } + return &connector{ + cfg: cfg, + }, nil +} diff --git a/vendor/github.com/go-sql-driver/mysql/dsn.go b/vendor/github.com/go-sql-driver/mysql/dsn.go index be014bab..75c8c248 100644 --- a/vendor/github.com/go-sql-driver/mysql/dsn.go +++ b/vendor/github.com/go-sql-driver/mysql/dsn.go @@ -14,6 +14,7 @@ import ( "crypto/tls" "errors" "fmt" + "math/big" "net" "net/url" "sort" @@ -54,6 +55,7 @@ type Config struct { AllowCleartextPasswords bool // Allows the cleartext client side plugin AllowNativePasswords bool // Allows the native password authentication method AllowOldPasswords bool // Allows the old insecure password method + CheckConnLiveness bool // Check connections for liveness before using them ClientFoundRows bool // Return number of matching rows instead of rows changed ColumnsWithAlias bool // Prepend table alias to column names InterpolateParams bool // Interpolate placeholders into query string @@ -69,9 +71,30 @@ func NewConfig() *Config { Loc: time.UTC, MaxAllowedPacket: defaultMaxAllowedPacket, AllowNativePasswords: true, + CheckConnLiveness: true, } } +func (cfg *Config) Clone() *Config { + cp := *cfg + if cp.tls != nil { + cp.tls = cfg.tls.Clone() + } + if len(cp.Params) > 0 { + cp.Params = make(map[string]string, len(cfg.Params)) + for k, v := range cfg.Params { + cp.Params[k] = v + } + } + if cfg.pubKey != nil { + cp.pubKey = &rsa.PublicKey{ + N: new(big.Int).Set(cfg.pubKey.N), + E: cfg.pubKey.E, + } + } + return &cp +} + func (cfg *Config) normalize() error { if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { return errInvalidDSNUnsafeCollation @@ -92,23 +115,54 @@ func (cfg *Config) normalize() error { default: return errors.New("default addr for network '" + cfg.Net + "' unknown") } - } else if cfg.Net == "tcp" { cfg.Addr = ensureHavePort(cfg.Addr) } - if cfg.tls != nil { - if cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { - host, _, err := net.SplitHostPort(cfg.Addr) - if err == nil { - cfg.tls.ServerName = host - } + switch cfg.TLSConfig { + case "false", "": + // don't set anything + case "true": + cfg.tls = &tls.Config{} + case "skip-verify", "preferred": + cfg.tls = &tls.Config{InsecureSkipVerify: true} + default: + cfg.tls = getTLSConfigClone(cfg.TLSConfig) + if cfg.tls == nil { + return errors.New("invalid value / unknown config name: " + cfg.TLSConfig) + } + } + + if cfg.tls != nil && cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { + host, _, err := net.SplitHostPort(cfg.Addr) + if err == nil { + cfg.tls.ServerName = host + } + } + + if cfg.ServerPubKey != "" { + cfg.pubKey = getServerPubKey(cfg.ServerPubKey) + if cfg.pubKey == nil { + return errors.New("invalid value / unknown server pub key name: " + cfg.ServerPubKey) } } return nil } +func writeDSNParam(buf *bytes.Buffer, hasParam *bool, name, value string) { + buf.Grow(1 + len(name) + 1 + len(value)) + if !*hasParam { + *hasParam = true + buf.WriteByte('?') + } else { + buf.WriteByte('&') + } + buf.WriteString(name) + buf.WriteByte('=') + buf.WriteString(value) +} + // FormatDSN formats the given Config into a DSN string which can be passed to // the driver. func (cfg *Config) FormatDSN() string { @@ -147,165 +201,75 @@ func (cfg *Config) FormatDSN() string { } if cfg.AllowCleartextPasswords { - if hasParam { - buf.WriteString("&allowCleartextPasswords=true") - } else { - hasParam = true - buf.WriteString("?allowCleartextPasswords=true") - } + writeDSNParam(&buf, &hasParam, "allowCleartextPasswords", "true") } if !cfg.AllowNativePasswords { - if hasParam { - buf.WriteString("&allowNativePasswords=false") - } else { - hasParam = true - buf.WriteString("?allowNativePasswords=false") - } + writeDSNParam(&buf, &hasParam, "allowNativePasswords", "false") } if cfg.AllowOldPasswords { - if hasParam { - buf.WriteString("&allowOldPasswords=true") - } else { - hasParam = true - buf.WriteString("?allowOldPasswords=true") - } + writeDSNParam(&buf, &hasParam, "allowOldPasswords", "true") + } + + if !cfg.CheckConnLiveness { + writeDSNParam(&buf, &hasParam, "checkConnLiveness", "false") } if cfg.ClientFoundRows { - if hasParam { - buf.WriteString("&clientFoundRows=true") - } else { - hasParam = true - buf.WriteString("?clientFoundRows=true") - } + writeDSNParam(&buf, &hasParam, "clientFoundRows", "true") } if col := cfg.Collation; col != defaultCollation && len(col) > 0 { - if hasParam { - buf.WriteString("&collation=") - } else { - hasParam = true - buf.WriteString("?collation=") - } - buf.WriteString(col) + writeDSNParam(&buf, &hasParam, "collation", col) } if cfg.ColumnsWithAlias { - if hasParam { - buf.WriteString("&columnsWithAlias=true") - } else { - hasParam = true - buf.WriteString("?columnsWithAlias=true") - } + writeDSNParam(&buf, &hasParam, "columnsWithAlias", "true") } if cfg.InterpolateParams { - if hasParam { - buf.WriteString("&interpolateParams=true") - } else { - hasParam = true - buf.WriteString("?interpolateParams=true") - } + writeDSNParam(&buf, &hasParam, "interpolateParams", "true") } if cfg.Loc != time.UTC && cfg.Loc != nil { - if hasParam { - buf.WriteString("&loc=") - } else { - hasParam = true - buf.WriteString("?loc=") - } - buf.WriteString(url.QueryEscape(cfg.Loc.String())) + writeDSNParam(&buf, &hasParam, "loc", url.QueryEscape(cfg.Loc.String())) } if cfg.MultiStatements { - if hasParam { - buf.WriteString("&multiStatements=true") - } else { - hasParam = true - buf.WriteString("?multiStatements=true") - } + writeDSNParam(&buf, &hasParam, "multiStatements", "true") } if cfg.ParseTime { - if hasParam { - buf.WriteString("&parseTime=true") - } else { - hasParam = true - buf.WriteString("?parseTime=true") - } + writeDSNParam(&buf, &hasParam, "parseTime", "true") } if cfg.ReadTimeout > 0 { - if hasParam { - buf.WriteString("&readTimeout=") - } else { - hasParam = true - buf.WriteString("?readTimeout=") - } - buf.WriteString(cfg.ReadTimeout.String()) + writeDSNParam(&buf, &hasParam, "readTimeout", cfg.ReadTimeout.String()) } if cfg.RejectReadOnly { - if hasParam { - buf.WriteString("&rejectReadOnly=true") - } else { - hasParam = true - buf.WriteString("?rejectReadOnly=true") - } + writeDSNParam(&buf, &hasParam, "rejectReadOnly", "true") } if len(cfg.ServerPubKey) > 0 { - if hasParam { - buf.WriteString("&serverPubKey=") - } else { - hasParam = true - buf.WriteString("?serverPubKey=") - } - buf.WriteString(url.QueryEscape(cfg.ServerPubKey)) + writeDSNParam(&buf, &hasParam, "serverPubKey", url.QueryEscape(cfg.ServerPubKey)) } if cfg.Timeout > 0 { - if hasParam { - buf.WriteString("&timeout=") - } else { - hasParam = true - buf.WriteString("?timeout=") - } - buf.WriteString(cfg.Timeout.String()) + writeDSNParam(&buf, &hasParam, "timeout", cfg.Timeout.String()) } if len(cfg.TLSConfig) > 0 { - if hasParam { - buf.WriteString("&tls=") - } else { - hasParam = true - buf.WriteString("?tls=") - } - buf.WriteString(url.QueryEscape(cfg.TLSConfig)) + writeDSNParam(&buf, &hasParam, "tls", url.QueryEscape(cfg.TLSConfig)) } if cfg.WriteTimeout > 0 { - if hasParam { - buf.WriteString("&writeTimeout=") - } else { - hasParam = true - buf.WriteString("?writeTimeout=") - } - buf.WriteString(cfg.WriteTimeout.String()) + writeDSNParam(&buf, &hasParam, "writeTimeout", cfg.WriteTimeout.String()) } if cfg.MaxAllowedPacket != defaultMaxAllowedPacket { - if hasParam { - buf.WriteString("&maxAllowedPacket=") - } else { - hasParam = true - buf.WriteString("?maxAllowedPacket=") - } - buf.WriteString(strconv.Itoa(cfg.MaxAllowedPacket)) - + writeDSNParam(&buf, &hasParam, "maxAllowedPacket", strconv.Itoa(cfg.MaxAllowedPacket)) } // other params @@ -316,16 +280,7 @@ func (cfg *Config) FormatDSN() string { } sort.Strings(params) for _, param := range params { - if hasParam { - buf.WriteByte('&') - } else { - hasParam = true - buf.WriteByte('?') - } - - buf.WriteString(param) - buf.WriteByte('=') - buf.WriteString(url.QueryEscape(cfg.Params[param])) + writeDSNParam(&buf, &hasParam, param, url.QueryEscape(cfg.Params[param])) } } @@ -452,6 +407,14 @@ func parseDSNParams(cfg *Config, params string) (err error) { return errors.New("invalid bool value: " + value) } + // Check connections for Liveness before using them + case "checkConnLiveness": + var isBool bool + cfg.CheckConnLiveness, isBool = readBool(value) + if !isBool { + return errors.New("invalid bool value: " + value) + } + // Switch "rowsAffected" mode case "clientFoundRows": var isBool bool @@ -531,13 +494,7 @@ func parseDSNParams(cfg *Config, params string) (err error) { if err != nil { return fmt.Errorf("invalid value for server pub key name: %v", err) } - - if pubKey := getServerPubKey(name); pubKey != nil { - cfg.ServerPubKey = name - cfg.pubKey = pubKey - } else { - return errors.New("invalid value / unknown server pub key name: " + name) - } + cfg.ServerPubKey = name // Strict mode case "strict": @@ -556,25 +513,17 @@ func parseDSNParams(cfg *Config, params string) (err error) { if isBool { if boolValue { cfg.TLSConfig = "true" - cfg.tls = &tls.Config{} } else { cfg.TLSConfig = "false" } - } else if vl := strings.ToLower(value); vl == "skip-verify" { + } else if vl := strings.ToLower(value); vl == "skip-verify" || vl == "preferred" { cfg.TLSConfig = vl - cfg.tls = &tls.Config{InsecureSkipVerify: true} } else { name, err := url.QueryUnescape(value) if err != nil { return fmt.Errorf("invalid value for TLS config name: %v", err) } - - if tlsConfig := getTLSConfigClone(name); tlsConfig != nil { - cfg.TLSConfig = name - cfg.tls = tlsConfig - } else { - return errors.New("invalid value / unknown config name: " + name) - } + cfg.TLSConfig = name } // I/O write Timeout diff --git a/vendor/github.com/go-sql-driver/mysql/go.mod b/vendor/github.com/go-sql-driver/mysql/go.mod new file mode 100644 index 00000000..fffbf6a9 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/go.mod @@ -0,0 +1,3 @@ +module github.com/go-sql-driver/mysql + +go 1.10 diff --git a/vendor/github.com/go-sql-driver/mysql/nulltime.go b/vendor/github.com/go-sql-driver/mysql/nulltime.go new file mode 100644 index 00000000..afa8a89e --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/nulltime.go @@ -0,0 +1,50 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +package mysql + +import ( + "database/sql/driver" + "fmt" + "time" +) + +// Scan implements the Scanner interface. +// The value type must be time.Time or string / []byte (formatted time-string), +// otherwise Scan fails. +func (nt *NullTime) Scan(value interface{}) (err error) { + if value == nil { + nt.Time, nt.Valid = time.Time{}, false + return + } + + switch v := value.(type) { + case time.Time: + nt.Time, nt.Valid = v, true + return + case []byte: + nt.Time, err = parseDateTime(string(v), time.UTC) + nt.Valid = (err == nil) + return + case string: + nt.Time, err = parseDateTime(v, time.UTC) + nt.Valid = (err == nil) + return + } + + nt.Valid = false + return fmt.Errorf("Can't convert %T to time.Time", value) +} + +// Value implements the driver Valuer interface. +func (nt NullTime) Value() (driver.Value, error) { + if !nt.Valid { + return nil, nil + } + return nt.Time, nil +} diff --git a/vendor/github.com/go-sql-driver/mysql/nulltime_go113.go b/vendor/github.com/go-sql-driver/mysql/nulltime_go113.go new file mode 100644 index 00000000..c392594d --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/nulltime_go113.go @@ -0,0 +1,31 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.13 + +package mysql + +import ( + "database/sql" +) + +// NullTime represents a time.Time that may be NULL. +// NullTime implements the Scanner interface so +// it can be used as a scan destination: +// +// var nt NullTime +// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) +// ... +// if nt.Valid { +// // use nt.Time +// } else { +// // NULL value +// } +// +// This NullTime implementation is not driver-specific +type NullTime sql.NullTime diff --git a/vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go b/vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go new file mode 100644 index 00000000..86d159d4 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go @@ -0,0 +1,34 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build !go1.13 + +package mysql + +import ( + "time" +) + +// NullTime represents a time.Time that may be NULL. +// NullTime implements the Scanner interface so +// it can be used as a scan destination: +// +// var nt NullTime +// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) +// ... +// if nt.Valid { +// // use nt.Time +// } else { +// // NULL value +// } +// +// This NullTime implementation is not driver-specific +type NullTime struct { + Time time.Time + Valid bool // Valid is true if Time is not NULL +} diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go index 9ed64085..82ad7a20 100644 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ b/vendor/github.com/go-sql-driver/mysql/packets.go @@ -51,7 +51,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) { mc.sequence++ // packets with length 0 terminate a previous packet which is a - // multiple of (2^24)−1 bytes long + // multiple of (2^24)-1 bytes long if pktLen == 0 { // there was no previous packet if prevData == nil { @@ -96,6 +96,35 @@ func (mc *mysqlConn) writePacket(data []byte) error { return ErrPktTooLarge } + // Perform a stale connection check. We only perform this check for + // the first query on a connection that has been checked out of the + // connection pool: a fresh connection from the pool is more likely + // to be stale, and it has not performed any previous writes that + // could cause data corruption, so it's safe to return ErrBadConn + // if the check fails. + if mc.reset { + mc.reset = false + conn := mc.netConn + if mc.rawConn != nil { + conn = mc.rawConn + } + var err error + // If this connection has a ReadTimeout which we've been setting on + // reads, reset it to its default value before we attempt a non-blocking + // read, otherwise the scheduler will just time us out before we can read + if mc.cfg.ReadTimeout != 0 { + err = conn.SetReadDeadline(time.Time{}) + } + if err == nil && mc.cfg.CheckConnLiveness { + err = connCheck(conn) + } + if err != nil { + errLog.Print("closing bad idle connection: ", err) + mc.Close() + return driver.ErrBadConn + } + } + for { var size int if pktLen >= maxPacketSize { @@ -194,7 +223,11 @@ func (mc *mysqlConn) readHandshakePacket() (data []byte, plugin string, err erro return nil, "", ErrOldProtocol } if mc.flags&clientSSL == 0 && mc.cfg.tls != nil { - return nil, "", ErrNoTLS + if mc.cfg.TLSConfig == "preferred" { + mc.cfg.tls = nil + } else { + return nil, "", ErrNoTLS + } } pos += 2 @@ -286,10 +319,10 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string } // Calculate packet length and get buffer with that size - data := mc.buf.takeSmallBuffer(pktLen + 4) - if data == nil { + data, err := mc.buf.takeSmallBuffer(pktLen + 4) + if err != nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return errBadConnNoWrite } @@ -328,6 +361,7 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string if err := tlsConn.Handshake(); err != nil { return err } + mc.rawConn = mc.netConn mc.netConn = tlsConn mc.buf.nc = tlsConn } @@ -367,10 +401,10 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error { pktLen := 4 + len(authData) - data := mc.buf.takeSmallBuffer(pktLen) - if data == nil { + data, err := mc.buf.takeSmallBuffer(pktLen) + if err != nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return errBadConnNoWrite } @@ -387,10 +421,10 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error { // Reset Packet Sequence mc.sequence = 0 - data := mc.buf.takeSmallBuffer(4 + 1) - if data == nil { + data, err := mc.buf.takeSmallBuffer(4 + 1) + if err != nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return errBadConnNoWrite } @@ -406,10 +440,10 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error { mc.sequence = 0 pktLen := 1 + len(arg) - data := mc.buf.takeBuffer(pktLen + 4) - if data == nil { + data, err := mc.buf.takeBuffer(pktLen + 4) + if err != nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return errBadConnNoWrite } @@ -427,10 +461,10 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error { // Reset Packet Sequence mc.sequence = 0 - data := mc.buf.takeSmallBuffer(4 + 1 + 4) - if data == nil { + data, err := mc.buf.takeSmallBuffer(4 + 1 + 4) + if err != nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return errBadConnNoWrite } @@ -883,7 +917,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { const minPktLen = 4 + 1 + 4 + 1 + 4 mc := stmt.mc - // Determine threshould dynamically to avoid packet size shortage. + // Determine threshold dynamically to avoid packet size shortage. longDataSize := mc.maxAllowedPacket / (stmt.paramCount + 1) if longDataSize < 64 { longDataSize = 64 @@ -893,15 +927,17 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { mc.sequence = 0 var data []byte + var err error if len(args) == 0 { - data = mc.buf.takeBuffer(minPktLen) + data, err = mc.buf.takeBuffer(minPktLen) } else { - data = mc.buf.takeCompleteBuffer() + data, err = mc.buf.takeCompleteBuffer() + // In this case the len(data) == cap(data) which is used to optimise the flow below. } - if data == nil { + if err != nil { // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) + errLog.Print(err) return errBadConnNoWrite } @@ -927,7 +963,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { pos := minPktLen var nullMask []byte - if maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= len(data) { + if maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= cap(data) { // buffer has to be extended but we don't know by how much so // we depend on append after all data with known sizes fit. // We stop at that because we deal with a lot of columns here @@ -936,10 +972,11 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { copy(tmp[:pos], data[:pos]) data = tmp nullMask = data[pos : pos+maskLen] + // No need to clean nullMask as make ensures that. pos += maskLen } else { nullMask = data[pos : pos+maskLen] - for i := 0; i < maskLen; i++ { + for i := range nullMask { nullMask[i] = 0 } pos += maskLen @@ -984,6 +1021,22 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { ) } + case uint64: + paramTypes[i+i] = byte(fieldTypeLongLong) + paramTypes[i+i+1] = 0x80 // type is unsigned + + if cap(paramValues)-len(paramValues)-8 >= 0 { + paramValues = paramValues[:len(paramValues)+8] + binary.LittleEndian.PutUint64( + paramValues[len(paramValues)-8:], + uint64(v), + ) + } else { + paramValues = append(paramValues, + uint64ToBytes(uint64(v))..., + ) + } + case float64: paramTypes[i+i] = byte(fieldTypeDouble) paramTypes[i+i+1] = 0x00 @@ -1076,7 +1129,10 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { // In that case we must build the data packet with the new values buffer if valuesCap != cap(paramValues) { data = append(data[:pos], paramValues...) - mc.buf.buf = data + if err = mc.buf.store(data); err != nil { + errLog.Print(err) + return errBadConnNoWrite + } } pos += len(paramValues) diff --git a/vendor/github.com/go-sql-driver/mysql/rows.go b/vendor/github.com/go-sql-driver/mysql/rows.go index d3b1e282..888bdb5f 100644 --- a/vendor/github.com/go-sql-driver/mysql/rows.go +++ b/vendor/github.com/go-sql-driver/mysql/rows.go @@ -111,6 +111,13 @@ func (rows *mysqlRows) Close() (err error) { return err } + // flip the buffer for this connection if we need to drain it. + // note that for a successful query (i.e. one where rows.next() + // has been called until it returns false), `rows.mc` will be nil + // by the time the user calls `(*Rows).Close`, so we won't reach this + // see: https://github.com/golang/go/commit/651ddbdb5056ded455f47f9c494c67b389622a47 + mc.buf.flip() + // Remove unread packets from stream if !rows.rs.done { err = mc.readUntilEOF() diff --git a/vendor/github.com/go-sql-driver/mysql/statement.go b/vendor/github.com/go-sql-driver/mysql/statement.go index ce7fe4cd..f7e37093 100644 --- a/vendor/github.com/go-sql-driver/mysql/statement.go +++ b/vendor/github.com/go-sql-driver/mysql/statement.go @@ -13,7 +13,6 @@ import ( "fmt" "io" "reflect" - "strconv" ) type mysqlStmt struct { @@ -164,14 +163,8 @@ func (c converter) ConvertValue(v interface{}) (driver.Value, error) { } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return rv.Int(), nil - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: - return int64(rv.Uint()), nil - case reflect.Uint64: - u64 := rv.Uint() - if u64 >= 1<<63 { - return strconv.FormatUint(u64, 10), nil - } - return int64(u64), nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return rv.Uint(), nil case reflect.Float32, reflect.Float64: return rv.Float(), nil case reflect.Bool: diff --git a/vendor/github.com/go-sql-driver/mysql/utils.go b/vendor/github.com/go-sql-driver/mysql/utils.go index ca5d47d8..9552e80b 100644 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ b/vendor/github.com/go-sql-driver/mysql/utils.go @@ -10,8 +10,10 @@ package mysql import ( "crypto/tls" + "database/sql" "database/sql/driver" "encoding/binary" + "errors" "fmt" "io" "strconv" @@ -54,7 +56,7 @@ var ( // db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom") // func RegisterTLSConfig(key string, config *tls.Config) error { - if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" { + if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" || strings.ToLower(key) == "preferred" { return fmt.Errorf("key '%s' is reserved", key) } @@ -80,7 +82,7 @@ func DeregisterTLSConfig(key string) { func getTLSConfigClone(key string) (config *tls.Config) { tlsConfigLock.RLock() if v, ok := tlsConfigRegistry[key]; ok { - config = cloneTLSConfig(v) + config = v.Clone() } tlsConfigLock.RUnlock() return @@ -104,60 +106,6 @@ func readBool(input string) (value bool, valid bool) { * Time related utils * ******************************************************************************/ -// NullTime represents a time.Time that may be NULL. -// NullTime implements the Scanner interface so -// it can be used as a scan destination: -// -// var nt NullTime -// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) -// ... -// if nt.Valid { -// // use nt.Time -// } else { -// // NULL value -// } -// -// This NullTime implementation is not driver-specific -type NullTime struct { - Time time.Time - Valid bool // Valid is true if Time is not NULL -} - -// Scan implements the Scanner interface. -// The value type must be time.Time or string / []byte (formatted time-string), -// otherwise Scan fails. -func (nt *NullTime) Scan(value interface{}) (err error) { - if value == nil { - nt.Time, nt.Valid = time.Time{}, false - return - } - - switch v := value.(type) { - case time.Time: - nt.Time, nt.Valid = v, true - return - case []byte: - nt.Time, err = parseDateTime(string(v), time.UTC) - nt.Valid = (err == nil) - return - case string: - nt.Time, err = parseDateTime(v, time.UTC) - nt.Valid = (err == nil) - return - } - - nt.Valid = false - return fmt.Errorf("Can't convert %T to time.Time", value) -} - -// Value implements the driver Valuer interface. -func (nt NullTime) Value() (driver.Value, error) { - if !nt.Valid { - return nil, nil - } - return nt.Time, nil -} - func parseDateTime(str string, loc *time.Location) (t time.Time, err error) { base := "0000-00-00 00:00:00.0000000" switch len(str) { @@ -682,7 +630,7 @@ type atomicBool struct { value uint32 } -// IsSet returns wether the current boolean value is true +// IsSet returns whether the current boolean value is true func (ab *atomicBool) IsSet() bool { return atomic.LoadUint32(&ab.value) > 0 } @@ -696,7 +644,7 @@ func (ab *atomicBool) Set(value bool) { } } -// TrySet sets the value of the bool and returns wether the value changed +// TrySet sets the value of the bool and returns whether the value changed func (ab *atomicBool) TrySet(value bool) bool { if value { return atomic.SwapUint32(&ab.value, 1) == 0 @@ -724,3 +672,30 @@ func (ae *atomicError) Value() error { } return nil } + +func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { + dargs := make([]driver.Value, len(named)) + for n, param := range named { + if len(param.Name) > 0 { + // TODO: support the use of Named Parameters #561 + return nil, errors.New("mysql: driver does not support the use of Named Parameters") + } + dargs[n] = param.Value + } + return dargs, nil +} + +func mapIsolationLevel(level driver.IsolationLevel) (string, error) { + switch sql.IsolationLevel(level) { + case sql.LevelRepeatableRead: + return "REPEATABLE READ", nil + case sql.LevelReadCommitted: + return "READ COMMITTED", nil + case sql.LevelReadUncommitted: + return "READ UNCOMMITTED", nil + case sql.LevelSerializable: + return "SERIALIZABLE", nil + default: + return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) + } +} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go17.go b/vendor/github.com/go-sql-driver/mysql/utils_go17.go deleted file mode 100644 index f5956345..00000000 --- a/vendor/github.com/go-sql-driver/mysql/utils_go17.go +++ /dev/null @@ -1,40 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.7 -// +build !go1.8 - -package mysql - -import "crypto/tls" - -func cloneTLSConfig(c *tls.Config) *tls.Config { - return &tls.Config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - ClientAuth: c.ClientAuth, - ClientCAs: c.ClientCAs, - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - PreferServerCipherSuites: c.PreferServerCipherSuites, - SessionTicketsDisabled: c.SessionTicketsDisabled, - SessionTicketKey: c.SessionTicketKey, - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, - Renegotiation: c.Renegotiation, - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go18.go b/vendor/github.com/go-sql-driver/mysql/utils_go18.go deleted file mode 100644 index c35c2a6a..00000000 --- a/vendor/github.com/go-sql-driver/mysql/utils_go18.go +++ /dev/null @@ -1,50 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.8 - -package mysql - -import ( - "crypto/tls" - "database/sql" - "database/sql/driver" - "errors" - "fmt" -) - -func cloneTLSConfig(c *tls.Config) *tls.Config { - return c.Clone() -} - -func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { - dargs := make([]driver.Value, len(named)) - for n, param := range named { - if len(param.Name) > 0 { - // TODO: support the use of Named Parameters #561 - return nil, errors.New("mysql: driver does not support the use of Named Parameters") - } - dargs[n] = param.Value - } - return dargs, nil -} - -func mapIsolationLevel(level driver.IsolationLevel) (string, error) { - switch sql.IsolationLevel(level) { - case sql.LevelRepeatableRead: - return "REPEATABLE READ", nil - case sql.LevelReadCommitted: - return "READ COMMITTED", nil - case sql.LevelReadUncommitted: - return "READ UNCOMMITTED", nil - case sql.LevelSerializable: - return "SERIALIZABLE", nil - default: - return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) - } -} diff --git a/vendor/github.com/golang-sql/civil/CONTRIBUTING.md b/vendor/github.com/golang-sql/civil/CONTRIBUTING.md new file mode 100644 index 00000000..d0635c3a --- /dev/null +++ b/vendor/github.com/golang-sql/civil/CONTRIBUTING.md @@ -0,0 +1,73 @@ +# Contributing + +1. Sign one of the contributor license agreements below. + +#### Running + +Once you've done the necessary setup, you can run the integration tests by +running: + +``` sh +$ go test -v github.com/golang-sql/civil +``` + +## Contributor License Agreements + +Before we can accept your pull requests you'll need to sign a Contributor +License Agreement (CLA): + +- **If you are an individual writing original source code** and **you own the +intellectual property**, then you'll need to sign an [individual CLA][indvcla]. +- **If you work for a company that wants to allow you to contribute your +work**, then you'll need to sign a [corporate CLA][corpcla]. + +You can sign these electronically (just scroll to the bottom). After that, +we'll be able to accept your pull requests. + +## Contributor Code of Conduct + +As contributors and maintainers of this project, +and in the interest of fostering an open and welcoming community, +we pledge to respect all people who contribute through reporting issues, +posting feature requests, updating documentation, +submitting pull requests or patches, and other activities. + +We are committed to making participation in this project +a harassment-free experience for everyone, +regardless of level of experience, gender, gender identity and expression, +sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, +such as physical or electronic +addresses, without explicit permission +* Other unethical or unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct. +By adopting this Code of Conduct, +project maintainers commit themselves to fairly and consistently +applying these principles to every aspect of managing this project. +Project maintainers who do not follow or enforce the Code of Conduct +may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior +may be reported by opening an issue +or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, +available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) + +[gcloudcli]: https://developers.google.com/cloud/sdk/gcloud/ +[indvcla]: https://developers.google.com/open-source/cla/individual +[corpcla]: https://developers.google.com/open-source/cla/corporate \ No newline at end of file diff --git a/vendor/cloud.google.com/go/LICENSE b/vendor/github.com/golang-sql/civil/LICENSE similarity index 99% rename from vendor/cloud.google.com/go/LICENSE rename to vendor/github.com/golang-sql/civil/LICENSE index d6456956..7a4a3ea2 100644 --- a/vendor/cloud.google.com/go/LICENSE +++ b/vendor/github.com/golang-sql/civil/LICENSE @@ -199,4 +199,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file diff --git a/vendor/github.com/golang-sql/civil/README.md b/vendor/github.com/golang-sql/civil/README.md new file mode 100644 index 00000000..3a7956ec --- /dev/null +++ b/vendor/github.com/golang-sql/civil/README.md @@ -0,0 +1,15 @@ +# Civil Date and Time + +[![GoDoc](https://godoc.org/github.com/golang-sql/civil?status.svg)](https://godoc.org/github.com/golang-sql/civil) + +Civil provides Date, Time of Day, and DateTime data types. + +While there are many uses, using specific types when working +with databases make is conceptually eaiser to understand what value +is set in the remote system. + +## Source + +This civil package was extracted and forked from `cloud.google.com/go/civil`. +As such the license and contributing requirements remain the same as that +module. diff --git a/vendor/cloud.google.com/go/civil/civil.go b/vendor/github.com/golang-sql/civil/civil.go similarity index 100% rename from vendor/cloud.google.com/go/civil/civil.go rename to vendor/github.com/golang-sql/civil/civil.go diff --git a/vendor/github.com/golang/protobuf/proto/buffer.go b/vendor/github.com/golang/protobuf/proto/buffer.go new file mode 100644 index 00000000..62df7e3b --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/buffer.go @@ -0,0 +1,324 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "errors" + "fmt" + + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + WireVarint = 0 + WireFixed32 = 5 + WireFixed64 = 1 + WireBytes = 2 + WireStartGroup = 3 + WireEndGroup = 4 +) + +// EncodeVarint returns the varint encoded bytes of v. +func EncodeVarint(v uint64) []byte { + return protowire.AppendVarint(nil, v) +} + +// SizeVarint returns the length of the varint encoded bytes of v. +// This is equal to len(EncodeVarint(v)). +func SizeVarint(v uint64) int { + return protowire.SizeVarint(v) +} + +// DecodeVarint parses a varint encoded integer from b, returning the +// integer value and the length of the varint. +// It returns (0, 0) if there is a parse error. +func DecodeVarint(b []byte) (uint64, int) { + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, 0 + } + return v, n +} + +// Buffer is a buffer for encoding and decoding the protobuf wire format. +// It may be reused between invocations to reduce memory usage. +type Buffer struct { + buf []byte + idx int + deterministic bool +} + +// NewBuffer allocates a new Buffer initialized with buf, +// where the contents of buf are considered the unread portion of the buffer. +func NewBuffer(buf []byte) *Buffer { + return &Buffer{buf: buf} +} + +// SetDeterministic specifies whether to use deterministic serialization. +// +// Deterministic serialization guarantees that for a given binary, equal +// messages will always be serialized to the same bytes. This implies: +// +// - Repeated serialization of a message will return the same bytes. +// - Different processes of the same binary (which may be executing on +// different machines) will serialize equal messages to the same bytes. +// +// Note that the deterministic serialization is NOT canonical across +// languages. It is not guaranteed to remain stable over time. It is unstable +// across different builds with schema changes due to unknown fields. +// Users who need canonical serialization (e.g., persistent storage in a +// canonical form, fingerprinting, etc.) should define their own +// canonicalization specification and implement their own serializer rather +// than relying on this API. +// +// If deterministic serialization is requested, map entries will be sorted +// by keys in lexographical order. This is an implementation detail and +// subject to change. +func (b *Buffer) SetDeterministic(deterministic bool) { + b.deterministic = deterministic +} + +// SetBuf sets buf as the internal buffer, +// where the contents of buf are considered the unread portion of the buffer. +func (b *Buffer) SetBuf(buf []byte) { + b.buf = buf + b.idx = 0 +} + +// Reset clears the internal buffer of all written and unread data. +func (b *Buffer) Reset() { + b.buf = b.buf[:0] + b.idx = 0 +} + +// Bytes returns the internal buffer. +func (b *Buffer) Bytes() []byte { + return b.buf +} + +// Unread returns the unread portion of the buffer. +func (b *Buffer) Unread() []byte { + return b.buf[b.idx:] +} + +// Marshal appends the wire-format encoding of m to the buffer. +func (b *Buffer) Marshal(m Message) error { + var err error + b.buf, err = marshalAppend(b.buf, m, b.deterministic) + return err +} + +// Unmarshal parses the wire-format message in the buffer and places the decoded results in m. +// +// Unlike proto.Unmarshal, this does not reset the message before starting to unmarshal. +func (b *Buffer) Unmarshal(m Message) error { + err := UnmarshalMerge(b.Unread(), m) + b.idx = len(b.buf) + return err +} + +type unknownFields struct{ XXX_unrecognized protoimpl.UnknownFields } + +func (m *unknownFields) String() string { panic("not implemented") } +func (m *unknownFields) Reset() { panic("not implemented") } +func (m *unknownFields) ProtoMessage() { panic("not implemented") } + +// DebugPrint dumps the encoded bytes of b with a header and footer including s +// to stdout. This is only intended for debugging. +func (*Buffer) DebugPrint(s string, b []byte) { + m := MessageReflect(new(unknownFields)) + m.SetUnknown(b) + b, _ = prototext.MarshalOptions{AllowPartial: true, Indent: "\t"}.Marshal(m.Interface()) + fmt.Printf("==== %s ====\n%s==== %s ====\n", s, b, s) +} + +// EncodeVarint appends an unsigned varint encoding to the buffer. +func (b *Buffer) EncodeVarint(v uint64) error { + b.buf = protowire.AppendVarint(b.buf, v) + return nil +} + +// EncodeZigzag32 appends a 32-bit zig-zag varint encoding to the buffer. +func (b *Buffer) EncodeZigzag32(v uint64) error { + return b.EncodeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) +} + +// EncodeZigzag64 appends a 64-bit zig-zag varint encoding to the buffer. +func (b *Buffer) EncodeZigzag64(v uint64) error { + return b.EncodeVarint(uint64((uint64(v) << 1) ^ uint64((int64(v) >> 63)))) +} + +// EncodeFixed32 appends a 32-bit little-endian integer to the buffer. +func (b *Buffer) EncodeFixed32(v uint64) error { + b.buf = protowire.AppendFixed32(b.buf, uint32(v)) + return nil +} + +// EncodeFixed64 appends a 64-bit little-endian integer to the buffer. +func (b *Buffer) EncodeFixed64(v uint64) error { + b.buf = protowire.AppendFixed64(b.buf, uint64(v)) + return nil +} + +// EncodeRawBytes appends a length-prefixed raw bytes to the buffer. +func (b *Buffer) EncodeRawBytes(v []byte) error { + b.buf = protowire.AppendBytes(b.buf, v) + return nil +} + +// EncodeStringBytes appends a length-prefixed raw bytes to the buffer. +// It does not validate whether v contains valid UTF-8. +func (b *Buffer) EncodeStringBytes(v string) error { + b.buf = protowire.AppendString(b.buf, v) + return nil +} + +// EncodeMessage appends a length-prefixed encoded message to the buffer. +func (b *Buffer) EncodeMessage(m Message) error { + var err error + b.buf = protowire.AppendVarint(b.buf, uint64(Size(m))) + b.buf, err = marshalAppend(b.buf, m, b.deterministic) + return err +} + +// DecodeVarint consumes an encoded unsigned varint from the buffer. +func (b *Buffer) DecodeVarint() (uint64, error) { + v, n := protowire.ConsumeVarint(b.buf[b.idx:]) + if n < 0 { + return 0, protowire.ParseError(n) + } + b.idx += n + return uint64(v), nil +} + +// DecodeZigzag32 consumes an encoded 32-bit zig-zag varint from the buffer. +func (b *Buffer) DecodeZigzag32() (uint64, error) { + v, err := b.DecodeVarint() + if err != nil { + return 0, err + } + return uint64((uint32(v) >> 1) ^ uint32((int32(v&1)<<31)>>31)), nil +} + +// DecodeZigzag64 consumes an encoded 64-bit zig-zag varint from the buffer. +func (b *Buffer) DecodeZigzag64() (uint64, error) { + v, err := b.DecodeVarint() + if err != nil { + return 0, err + } + return uint64((uint64(v) >> 1) ^ uint64((int64(v&1)<<63)>>63)), nil +} + +// DecodeFixed32 consumes a 32-bit little-endian integer from the buffer. +func (b *Buffer) DecodeFixed32() (uint64, error) { + v, n := protowire.ConsumeFixed32(b.buf[b.idx:]) + if n < 0 { + return 0, protowire.ParseError(n) + } + b.idx += n + return uint64(v), nil +} + +// DecodeFixed64 consumes a 64-bit little-endian integer from the buffer. +func (b *Buffer) DecodeFixed64() (uint64, error) { + v, n := protowire.ConsumeFixed64(b.buf[b.idx:]) + if n < 0 { + return 0, protowire.ParseError(n) + } + b.idx += n + return uint64(v), nil +} + +// DecodeRawBytes consumes a length-prefixed raw bytes from the buffer. +// If alloc is specified, it returns a copy the raw bytes +// rather than a sub-slice of the buffer. +func (b *Buffer) DecodeRawBytes(alloc bool) ([]byte, error) { + v, n := protowire.ConsumeBytes(b.buf[b.idx:]) + if n < 0 { + return nil, protowire.ParseError(n) + } + b.idx += n + if alloc { + v = append([]byte(nil), v...) + } + return v, nil +} + +// DecodeStringBytes consumes a length-prefixed raw bytes from the buffer. +// It does not validate whether the raw bytes contain valid UTF-8. +func (b *Buffer) DecodeStringBytes() (string, error) { + v, n := protowire.ConsumeString(b.buf[b.idx:]) + if n < 0 { + return "", protowire.ParseError(n) + } + b.idx += n + return v, nil +} + +// DecodeMessage consumes a length-prefixed message from the buffer. +// It does not reset m. +func (b *Buffer) DecodeMessage(m Message) error { + v, err := b.DecodeRawBytes(false) + if err != nil { + return err + } + return UnmarshalMerge(v, m) +} + +// DecodeGroup consumes a message group from the buffer. +// It assumes that the start group marker has already been consumed and +// consumes all bytes until (and including the end group marker). +// It does not reset m. +func (b *Buffer) DecodeGroup(m Message) error { + v, n, err := consumeGroup(b.buf[b.idx:]) + if err != nil { + return err + } + b.idx += n + return UnmarshalMerge(v, m) +} + +// consumeGroup parses b until it finds an end group marker, returning +// the raw bytes of the message (excluding the end group marker) and the +// the total length of the message (including the end group marker). +func consumeGroup(b []byte) ([]byte, int, error) { + b0 := b + depth := 1 // assume this follows a start group marker + for { + _, wtyp, tagLen := protowire.ConsumeTag(b) + if tagLen < 0 { + return nil, 0, protowire.ParseError(tagLen) + } + b = b[tagLen:] + + var valLen int + switch wtyp { + case protowire.VarintType: + _, valLen = protowire.ConsumeVarint(b) + case protowire.Fixed32Type: + _, valLen = protowire.ConsumeFixed32(b) + case protowire.Fixed64Type: + _, valLen = protowire.ConsumeFixed64(b) + case protowire.BytesType: + _, valLen = protowire.ConsumeBytes(b) + case protowire.StartGroupType: + depth++ + case protowire.EndGroupType: + depth-- + default: + return nil, 0, errors.New("proto: cannot parse reserved wire type") + } + if valLen < 0 { + return nil, 0, protowire.ParseError(valLen) + } + b = b[valLen:] + + if depth == 0 { + return b0[:len(b0)-len(b)-tagLen], len(b0) - len(b), nil + } + } +} diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go deleted file mode 100644 index 3cd3249f..00000000 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ /dev/null @@ -1,253 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Protocol buffer deep copy and merge. -// TODO: RawMessage. - -package proto - -import ( - "fmt" - "log" - "reflect" - "strings" -) - -// Clone returns a deep copy of a protocol buffer. -func Clone(src Message) Message { - in := reflect.ValueOf(src) - if in.IsNil() { - return src - } - out := reflect.New(in.Type().Elem()) - dst := out.Interface().(Message) - Merge(dst, src) - return dst -} - -// Merger is the interface representing objects that can merge messages of the same type. -type Merger interface { - // Merge merges src into this message. - // Required and optional fields that are set in src will be set to that value in dst. - // Elements of repeated fields will be appended. - // - // Merge may panic if called with a different argument type than the receiver. - Merge(src Message) -} - -// generatedMerger is the custom merge method that generated protos will have. -// We must add this method since a generate Merge method will conflict with -// many existing protos that have a Merge data field already defined. -type generatedMerger interface { - XXX_Merge(src Message) -} - -// Merge merges src into dst. -// Required and optional fields that are set in src will be set to that value in dst. -// Elements of repeated fields will be appended. -// Merge panics if src and dst are not the same type, or if dst is nil. -func Merge(dst, src Message) { - if m, ok := dst.(Merger); ok { - m.Merge(src) - return - } - - in := reflect.ValueOf(src) - out := reflect.ValueOf(dst) - if out.IsNil() { - panic("proto: nil destination") - } - if in.Type() != out.Type() { - panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) - } - if in.IsNil() { - return // Merge from nil src is a noop - } - if m, ok := dst.(generatedMerger); ok { - m.XXX_Merge(src) - return - } - mergeStruct(out.Elem(), in.Elem()) -} - -func mergeStruct(out, in reflect.Value) { - sprop := GetProperties(in.Type()) - for i := 0; i < in.NumField(); i++ { - f := in.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) - } - - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - uf := in.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return - } - uin := uf.Bytes() - if len(uin) > 0 { - out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) - } -} - -// mergeAny performs a merge between two values of the same type. -// viaPtr indicates whether the values were indirected through a pointer (implying proto2). -// prop is set if this is a struct field (it may be nil). -func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { - if in.Type() == protoMessageType { - if !in.IsNil() { - if out.IsNil() { - out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) - } else { - Merge(out.Interface().(Message), in.Interface().(Message)) - } - } - return - } - switch in.Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, - reflect.String, reflect.Uint32, reflect.Uint64: - if !viaPtr && isProto3Zero(in) { - return - } - out.Set(in) - case reflect.Interface: - // Probably a oneof field; copy non-nil values. - if in.IsNil() { - return - } - // Allocate destination if it is not set, or set to a different type. - // Otherwise we will merge as normal. - if out.IsNil() || out.Elem().Type() != in.Elem().Type() { - out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) - } - mergeAny(out.Elem(), in.Elem(), false, nil) - case reflect.Map: - if in.Len() == 0 { - return - } - if out.IsNil() { - out.Set(reflect.MakeMap(in.Type())) - } - // For maps with value types of *T or []byte we need to deep copy each value. - elemKind := in.Type().Elem().Kind() - for _, key := range in.MapKeys() { - var val reflect.Value - switch elemKind { - case reflect.Ptr: - val = reflect.New(in.Type().Elem().Elem()) - mergeAny(val, in.MapIndex(key), false, nil) - case reflect.Slice: - val = in.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - default: - val = in.MapIndex(key) - } - out.SetMapIndex(key, val) - } - case reflect.Ptr: - if in.IsNil() { - return - } - if out.IsNil() { - out.Set(reflect.New(in.Elem().Type())) - } - mergeAny(out.Elem(), in.Elem(), true, nil) - case reflect.Slice: - if in.IsNil() { - return - } - if in.Type().Elem().Kind() == reflect.Uint8 { - // []byte is a scalar bytes field, not a repeated field. - - // Edge case: if this is in a proto3 message, a zero length - // bytes field is considered the zero value, and should not - // be merged. - if prop != nil && prop.proto3 && in.Len() == 0 { - return - } - - // Make a deep copy. - // Append to []byte{} instead of []byte(nil) so that we never end up - // with a nil result. - out.SetBytes(append([]byte{}, in.Bytes()...)) - return - } - n := in.Len() - if out.IsNil() { - out.Set(reflect.MakeSlice(in.Type(), 0, n)) - } - switch in.Type().Elem().Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, - reflect.String, reflect.Uint32, reflect.Uint64: - out.Set(reflect.AppendSlice(out, in)) - default: - for i := 0; i < n; i++ { - x := reflect.Indirect(reflect.New(in.Type().Elem())) - mergeAny(x, in.Index(i), false, nil) - out.Set(reflect.Append(out, x)) - } - } - case reflect.Struct: - mergeStruct(out, in) - default: - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to copy %v", in) - } -} - -func mergeExtension(out, in map[int32]Extension) { - for extNum, eIn := range in { - eOut := Extension{desc: eIn.desc} - if eIn.value != nil { - v := reflect.New(reflect.TypeOf(eIn.value)).Elem() - mergeAny(v, reflect.ValueOf(eIn.value), false, nil) - eOut.value = v.Interface() - } - if eIn.enc != nil { - eOut.enc = make([]byte, len(eIn.enc)) - copy(eOut.enc, eIn.enc) - } - - out[extNum] = eOut - } -} diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go deleted file mode 100644 index d9aa3c42..00000000 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ /dev/null @@ -1,428 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for decoding protocol buffer data to construct in-memory representations. - */ - -import ( - "errors" - "fmt" - "io" -) - -// errOverflow is returned when an integer is too large to be represented. -var errOverflow = errors.New("proto: integer overflow") - -// ErrInternalBadWireType is returned by generated code when an incorrect -// wire type is encountered. It does not get returned to user code. -var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") - -// DecodeVarint reads a varint-encoded integer from the slice. -// It returns the integer and the number of bytes consumed, or -// zero if there is not enough. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func DecodeVarint(buf []byte) (x uint64, n int) { - for shift := uint(0); shift < 64; shift += 7 { - if n >= len(buf) { - return 0, 0 - } - b := uint64(buf[n]) - n++ - x |= (b & 0x7F) << shift - if (b & 0x80) == 0 { - return x, n - } - } - - // The number is too large to represent in a 64-bit value. - return 0, 0 -} - -func (p *Buffer) decodeVarintSlow() (x uint64, err error) { - i := p.index - l := len(p.buf) - - for shift := uint(0); shift < 64; shift += 7 { - if i >= l { - err = io.ErrUnexpectedEOF - return - } - b := p.buf[i] - i++ - x |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - p.index = i - return - } - } - - // The number is too large to represent in a 64-bit value. - err = errOverflow - return -} - -// DecodeVarint reads a varint-encoded integer from the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) DecodeVarint() (x uint64, err error) { - i := p.index - buf := p.buf - - if i >= len(buf) { - return 0, io.ErrUnexpectedEOF - } else if buf[i] < 0x80 { - p.index++ - return uint64(buf[i]), nil - } else if len(buf)-i < 10 { - return p.decodeVarintSlow() - } - - var b uint64 - // we already checked the first byte - x = uint64(buf[i]) - 0x80 - i++ - - b = uint64(buf[i]) - i++ - x += b << 7 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 7 - - b = uint64(buf[i]) - i++ - x += b << 14 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 14 - - b = uint64(buf[i]) - i++ - x += b << 21 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 21 - - b = uint64(buf[i]) - i++ - x += b << 28 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 28 - - b = uint64(buf[i]) - i++ - x += b << 35 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 35 - - b = uint64(buf[i]) - i++ - x += b << 42 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 42 - - b = uint64(buf[i]) - i++ - x += b << 49 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 49 - - b = uint64(buf[i]) - i++ - x += b << 56 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 56 - - b = uint64(buf[i]) - i++ - x += b << 63 - if b&0x80 == 0 { - goto done - } - // x -= 0x80 << 63 // Always zero. - - return 0, errOverflow - -done: - p.index = i - return x, nil -} - -// DecodeFixed64 reads a 64-bit integer from the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) DecodeFixed64() (x uint64, err error) { - // x, err already 0 - i := p.index + 8 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-8]) - x |= uint64(p.buf[i-7]) << 8 - x |= uint64(p.buf[i-6]) << 16 - x |= uint64(p.buf[i-5]) << 24 - x |= uint64(p.buf[i-4]) << 32 - x |= uint64(p.buf[i-3]) << 40 - x |= uint64(p.buf[i-2]) << 48 - x |= uint64(p.buf[i-1]) << 56 - return -} - -// DecodeFixed32 reads a 32-bit integer from the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) DecodeFixed32() (x uint64, err error) { - // x, err already 0 - i := p.index + 4 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-4]) - x |= uint64(p.buf[i-3]) << 8 - x |= uint64(p.buf[i-2]) << 16 - x |= uint64(p.buf[i-1]) << 24 - return -} - -// DecodeZigzag64 reads a zigzag-encoded 64-bit integer -// from the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) DecodeZigzag64() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) - return -} - -// DecodeZigzag32 reads a zigzag-encoded 32-bit integer -// from the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) DecodeZigzag32() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) - return -} - -// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { - n, err := p.DecodeVarint() - if err != nil { - return nil, err - } - - nb := int(n) - if nb < 0 { - return nil, fmt.Errorf("proto: bad byte length %d", nb) - } - end := p.index + nb - if end < p.index || end > len(p.buf) { - return nil, io.ErrUnexpectedEOF - } - - if !alloc { - // todo: check if can get more uses of alloc=false - buf = p.buf[p.index:end] - p.index += nb - return - } - - buf = make([]byte, nb) - copy(buf, p.buf[p.index:]) - p.index += nb - return -} - -// DecodeStringBytes reads an encoded string from the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) DecodeStringBytes() (s string, err error) { - buf, err := p.DecodeRawBytes(false) - if err != nil { - return - } - return string(buf), nil -} - -// Unmarshaler is the interface representing objects that can -// unmarshal themselves. The argument points to data that may be -// overwritten, so implementations should not keep references to the -// buffer. -// Unmarshal implementations should not clear the receiver. -// Any unmarshaled data should be merged into the receiver. -// Callers of Unmarshal that do not want to retain existing data -// should Reset the receiver before calling Unmarshal. -type Unmarshaler interface { - Unmarshal([]byte) error -} - -// newUnmarshaler is the interface representing objects that can -// unmarshal themselves. The semantics are identical to Unmarshaler. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newUnmarshaler interface { - XXX_Unmarshal([]byte) error -} - -// Unmarshal parses the protocol buffer representation in buf and places the -// decoded result in pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// Unmarshal resets pb before starting to unmarshal, so any -// existing data in pb is always removed. Use UnmarshalMerge -// to preserve and append to existing data. -func Unmarshal(buf []byte, pb Message) error { - pb.Reset() - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// UnmarshalMerge parses the protocol buffer representation in buf and -// writes the decoded result to pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// UnmarshalMerge merges into existing data in pb. -// Most code should use Unmarshal instead. -func UnmarshalMerge(buf []byte, pb Message) error { - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// DecodeMessage reads a count-delimited message from the Buffer. -func (p *Buffer) DecodeMessage(pb Message) error { - enc, err := p.DecodeRawBytes(false) - if err != nil { - return err - } - return NewBuffer(enc).Unmarshal(pb) -} - -// DecodeGroup reads a tag-delimited group from the Buffer. -// StartGroup tag is already consumed. This function consumes -// EndGroup tag. -func (p *Buffer) DecodeGroup(pb Message) error { - b := p.buf[p.index:] - x, y := findEndGroup(b) - if x < 0 { - return io.ErrUnexpectedEOF - } - err := Unmarshal(b[:x], pb) - p.index += y - return err -} - -// Unmarshal parses the protocol buffer representation in the -// Buffer and places the decoded result in pb. If the struct -// underlying pb does not match the data in the buffer, the results can be -// unpredictable. -// -// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. -func (p *Buffer) Unmarshal(pb Message) error { - // If the object can unmarshal itself, let it. - if u, ok := pb.(newUnmarshaler); ok { - err := u.XXX_Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 - err := u.Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - - // Slow workaround for messages that aren't Unmarshalers. - // This includes some hand-coded .pb.go files and - // bootstrap protos. - // TODO: fix all of those and then add Unmarshal to - // the Message interface. Then: - // The cast above and code below can be deleted. - // The old unmarshaler can be deleted. - // Clients can call Unmarshal directly (can already do that, actually). - var info InternalMessageInfo - err := info.Unmarshal(pb, p.buf[p.index:]) - p.index = len(p.buf) - return err -} diff --git a/vendor/github.com/golang/protobuf/proto/defaults.go b/vendor/github.com/golang/protobuf/proto/defaults.go new file mode 100644 index 00000000..d399bf06 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/defaults.go @@ -0,0 +1,63 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" +) + +// SetDefaults sets unpopulated scalar fields to their default values. +// Fields within a oneof are not set even if they have a default value. +// SetDefaults is recursively called upon any populated message fields. +func SetDefaults(m Message) { + if m != nil { + setDefaults(MessageReflect(m)) + } +} + +func setDefaults(m protoreflect.Message) { + fds := m.Descriptor().Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + if !m.Has(fd) { + if fd.HasDefault() && fd.ContainingOneof() == nil { + v := fd.Default() + if fd.Kind() == protoreflect.BytesKind { + v = protoreflect.ValueOf(append([]byte(nil), v.Bytes()...)) // copy the default bytes + } + m.Set(fd, v) + } + continue + } + } + + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + // Handle singular message. + case fd.Cardinality() != protoreflect.Repeated: + if fd.Message() != nil { + setDefaults(m.Get(fd).Message()) + } + // Handle list of messages. + case fd.IsList(): + if fd.Message() != nil { + ls := m.Get(fd).List() + for i := 0; i < ls.Len(); i++ { + setDefaults(ls.Get(i).Message()) + } + } + // Handle map of messages. + case fd.IsMap(): + if fd.MapValue().Message() != nil { + ms := m.Get(fd).Map() + ms.Range(func(_ protoreflect.MapKey, v protoreflect.Value) bool { + setDefaults(v.Message()) + return true + }) + } + } + return true + }) +} diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go new file mode 100644 index 00000000..a205482a --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/deprecated.go @@ -0,0 +1,92 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "encoding/json" + "errors" + "fmt" + "strconv" +) + +var ( + // Deprecated: No longer returned. + ErrNil = errors.New("proto: Marshal called with nil") + + // Deprecated: No longer returned. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") + + // Deprecated: No longer returned. + ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") +) + +// Deprecated: Do not use. +type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } + +// Deprecated: Do not use. +func GetStats() Stats { return Stats{} } + +// Deprecated: Do not use. +func MarshalMessageSet(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: Do not use. +func UnmarshalMessageSet([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: Do not use. +func MarshalMessageSetJSON(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: Do not use. +func UnmarshalMessageSetJSON([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: Do not use. +func RegisterMessageSetType(Message, int32, string) {} + +// Deprecated: Do not use. +func EnumName(m map[int32]string, v int32) string { + s, ok := m[v] + if ok { + return s + } + return strconv.Itoa(int(v)) +} + +// Deprecated: Do not use. +func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { + if data[0] == '"' { + // New style: enums are strings. + var repr string + if err := json.Unmarshal(data, &repr); err != nil { + return -1, err + } + val, ok := m[repr] + if !ok { + return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) + } + return val, nil + } + // Old style: enums are ints. + var val int32 + if err := json.Unmarshal(data, &val); err != nil { + return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) + } + return val, nil +} + +// Deprecated: Do not use. +type InternalMessageInfo struct{} + +func (*InternalMessageInfo) DiscardUnknown(Message) { panic("not implemented") } +func (*InternalMessageInfo) Marshal([]byte, Message, bool) ([]byte, error) { panic("not implemented") } +func (*InternalMessageInfo) Merge(Message, Message) { panic("not implemented") } +func (*InternalMessageInfo) Size(Message) int { panic("not implemented") } +func (*InternalMessageInfo) Unmarshal(Message, []byte) error { panic("not implemented") } diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go index dea2617c..2187e877 100644 --- a/vendor/github.com/golang/protobuf/proto/discard.go +++ b/vendor/github.com/golang/protobuf/proto/discard.go @@ -1,48 +1,13 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2017 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. package proto import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" + "google.golang.org/protobuf/reflect/protoreflect" ) -type generatedDiscarder interface { - XXX_DiscardUnknown() -} - // DiscardUnknown recursively discards all unknown fields from this message // and all embedded messages. // @@ -51,300 +16,43 @@ type generatedDiscarder interface { // marshal to be able to produce a message that continues to have those // unrecognized fields. To avoid this, DiscardUnknown is used to // explicitly clear the unknown fields after unmarshaling. -// -// For proto2 messages, the unknown fields of message extensions are only -// discarded from messages that have been accessed via GetExtension. func DiscardUnknown(m Message) { - if m, ok := m.(generatedDiscarder); ok { - m.XXX_DiscardUnknown() - return + if m != nil { + discardUnknown(MessageReflect(m)) } - // TODO: Dynamically populate a InternalMessageInfo for legacy messages, - // but the master branch has no implementation for InternalMessageInfo, - // so it would be more work to replicate that approach. - discardLegacy(m) } -// DiscardUnknown recursively discards all unknown fields. -func (a *InternalMessageInfo) DiscardUnknown(m Message) { - di := atomicLoadDiscardInfo(&a.discard) - if di == nil { - di = getDiscardInfo(reflect.TypeOf(m).Elem()) - atomicStoreDiscardInfo(&a.discard, di) - } - di.discard(toPointer(&m)) -} - -type discardInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []discardFieldInfo - unrecognized field -} - -type discardFieldInfo struct { - field field // Offset of field, guaranteed to be valid - discard func(src pointer) -} - -var ( - discardInfoMap = map[reflect.Type]*discardInfo{} - discardInfoLock sync.Mutex -) - -func getDiscardInfo(t reflect.Type) *discardInfo { - discardInfoLock.Lock() - defer discardInfoLock.Unlock() - di := discardInfoMap[t] - if di == nil { - di = &discardInfo{typ: t} - discardInfoMap[t] = di - } - return di -} - -func (di *discardInfo) discard(src pointer) { - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&di.initialized) == 0 { - di.computeDiscardInfo() - } - - for _, fi := range di.fields { - sfp := src.offset(fi.field) - fi.discard(sfp) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { - // Ignore lock since DiscardUnknown is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - DiscardUnknown(m) +func discardUnknown(m protoreflect.Message) { + m.Range(func(fd protoreflect.FieldDescriptor, val protoreflect.Value) bool { + switch { + // Handle singular message. + case fd.Cardinality() != protoreflect.Repeated: + if fd.Message() != nil { + discardUnknown(m.Get(fd).Message()) } - } - } - - if di.unrecognized.IsValid() { - *src.offset(di.unrecognized).toBytes() = nil - } -} - -func (di *discardInfo) computeDiscardInfo() { - di.lock.Lock() - defer di.lock.Unlock() - if di.initialized != 0 { - return - } - t := di.typ - n := t.NumField() - - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - dfi := discardFieldInfo{field: toField(&f)} - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) - case isSlice: // E.g., []*pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sps := src.getPointerSlice() - for _, sp := range sps { - if !sp.isNil() { - di.discard(sp) - } - } - } - default: // E.g., *pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sp := src.getPointer() - if !sp.isNil() { - di.discard(sp) - } + // Handle list of messages. + case fd.IsList(): + if fd.Message() != nil { + ls := m.Get(fd).List() + for i := 0; i < ls.Len(); i++ { + discardUnknown(ls.Get(i).Message()) } } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) - default: // E.g., map[K]V - if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) - dfi.discard = func(src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - DiscardUnknown(val.Interface().(Message)) - } - } - } else { - dfi.discard = func(pointer) {} // Noop - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) - default: // E.g., interface{} - // TODO: Make this faster? - dfi.discard = func(src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - DiscardUnknown(sv.Interface().(Message)) - } - } - } - } - default: - continue - } - di.fields = append(di.fields, dfi) - } - - di.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - di.unrecognized = toField(&f) - } - - atomic.StoreInt32(&di.initialized, 1) -} - -func discardLegacy(m Message) { - v := reflect.ValueOf(m) - if v.Kind() != reflect.Ptr || v.IsNil() { - return - } - v = v.Elem() - if v.Kind() != reflect.Struct { - return - } - t := v.Type() - - for i := 0; i < v.NumField(); i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - vf := v.Field(i) - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) - case isSlice: // E.g., []*pb.T - for j := 0; j < vf.Len(); j++ { - discardLegacy(vf.Index(j).Interface().(Message)) - } - default: // E.g., *pb.T - discardLegacy(vf.Interface().(Message)) - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) - default: // E.g., map[K]V - tv := vf.Type().Elem() - if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) - for _, key := range vf.MapKeys() { - val := vf.MapIndex(key) - discardLegacy(val.Interface().(Message)) - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) - default: // E.g., test_proto.isCommunique_Union interface - if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { - vf = vf.Elem() // E.g., *test_proto.Communique_Msg - if !vf.IsNil() { - vf = vf.Elem() // E.g., test_proto.Communique_Msg - vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value - if vf.Kind() == reflect.Ptr { - discardLegacy(vf.Interface().(Message)) - } - } - } + // Handle map of messages. + case fd.IsMap(): + if fd.MapValue().Message() != nil { + ms := m.Get(fd).Map() + ms.Range(func(_ protoreflect.MapKey, v protoreflect.Value) bool { + discardUnknown(v.Message()) + return true + }) } } - } + return true + }) - if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { - if vf.Type() != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - vf.Set(reflect.ValueOf([]byte(nil))) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(m); err == nil { - // Ignore lock since discardLegacy is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - discardLegacy(m) - } - } + // Discard unknown fields. + if len(m.GetUnknown()) > 0 { + m.SetUnknown(nil) } } diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go deleted file mode 100644 index 3abfed2c..00000000 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ /dev/null @@ -1,203 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - -import ( - "errors" - "reflect" -) - -var ( - // errRepeatedHasNil is the error returned if Marshal is called with - // a struct with a repeated field containing a nil element. - errRepeatedHasNil = errors.New("proto: repeated field has nil element") - - // errOneofHasNil is the error returned if Marshal is called with - // a struct with a oneof field containing a nil element. - errOneofHasNil = errors.New("proto: oneof field has nil value") - - // ErrNil is the error returned if Marshal is called with nil. - ErrNil = errors.New("proto: Marshal called with nil") - - // ErrTooLarge is the error returned if Marshal is called with a - // message that encodes to >2GB. - ErrTooLarge = errors.New("proto: message encodes to over 2 GB") -) - -// The fundamental encoders that put bytes on the wire. -// Those that take integer types all accept uint64 and are -// therefore of type valueEncoder. - -const maxVarintBytes = 10 // maximum length of a varint - -// EncodeVarint returns the varint encoding of x. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -// Not used by the package itself, but helpful to clients -// wishing to use the same encoding. -func EncodeVarint(x uint64) []byte { - var buf [maxVarintBytes]byte - var n int - for n = 0; x > 127; n++ { - buf[n] = 0x80 | uint8(x&0x7F) - x >>= 7 - } - buf[n] = uint8(x) - n++ - return buf[0:n] -} - -// EncodeVarint writes a varint-encoded integer to the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) EncodeVarint(x uint64) error { - for x >= 1<<7 { - p.buf = append(p.buf, uint8(x&0x7f|0x80)) - x >>= 7 - } - p.buf = append(p.buf, uint8(x)) - return nil -} - -// SizeVarint returns the varint encoding size of an integer. -func SizeVarint(x uint64) int { - switch { - case x < 1<<7: - return 1 - case x < 1<<14: - return 2 - case x < 1<<21: - return 3 - case x < 1<<28: - return 4 - case x < 1<<35: - return 5 - case x < 1<<42: - return 6 - case x < 1<<49: - return 7 - case x < 1<<56: - return 8 - case x < 1<<63: - return 9 - } - return 10 -} - -// EncodeFixed64 writes a 64-bit integer to the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) EncodeFixed64(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24), - uint8(x>>32), - uint8(x>>40), - uint8(x>>48), - uint8(x>>56)) - return nil -} - -// EncodeFixed32 writes a 32-bit integer to the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) EncodeFixed32(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24)) - return nil -} - -// EncodeZigzag64 writes a zigzag-encoded 64-bit integer -// to the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) EncodeZigzag64(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} - -// EncodeZigzag32 writes a zigzag-encoded 32-bit integer -// to the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) EncodeZigzag32(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) -} - -// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) EncodeRawBytes(b []byte) error { - p.EncodeVarint(uint64(len(b))) - p.buf = append(p.buf, b...) - return nil -} - -// EncodeStringBytes writes an encoded string to the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) EncodeStringBytes(s string) error { - p.EncodeVarint(uint64(len(s))) - p.buf = append(p.buf, s...) - return nil -} - -// Marshaler is the interface representing objects that can marshal themselves. -type Marshaler interface { - Marshal() ([]byte, error) -} - -// EncodeMessage writes the protocol buffer to the Buffer, -// prefixed by a varint-encoded length. -func (p *Buffer) EncodeMessage(pb Message) error { - siz := Size(pb) - p.EncodeVarint(uint64(siz)) - return p.Marshal(pb) -} - -// All protocol buffer fields are nillable, but be careful. -func isNil(v reflect.Value) bool { - switch v.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return v.IsNil() - } - return false -} diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go deleted file mode 100644 index d4db5a1c..00000000 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ /dev/null @@ -1,300 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Protocol buffer comparison. - -package proto - -import ( - "bytes" - "log" - "reflect" - "strings" -) - -/* -Equal returns true iff protocol buffers a and b are equal. -The arguments must both be pointers to protocol buffer structs. - -Equality is defined in this way: - - Two messages are equal iff they are the same type, - corresponding fields are equal, unknown field sets - are equal, and extensions sets are equal. - - Two set scalar fields are equal iff their values are equal. - If the fields are of a floating-point type, remember that - NaN != x for all x, including NaN. If the message is defined - in a proto3 .proto file, fields are not "set"; specifically, - zero length proto3 "bytes" fields are equal (nil == {}). - - Two repeated fields are equal iff their lengths are the same, - and their corresponding elements are equal. Note a "bytes" field, - although represented by []byte, is not a repeated field and the - rule for the scalar fields described above applies. - - Two unset fields are equal. - - Two unknown field sets are equal if their current - encoded state is equal. - - Two extension sets are equal iff they have corresponding - elements that are pairwise equal. - - Two map fields are equal iff their lengths are the same, - and they contain the same set of elements. Zero-length map - fields are equal. - - Every other combination of things are not equal. - -The return value is undefined if a and b are not protocol buffers. -*/ -func Equal(a, b Message) bool { - if a == nil || b == nil { - return a == b - } - v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) - if v1.Type() != v2.Type() { - return false - } - if v1.Kind() == reflect.Ptr { - if v1.IsNil() { - return v2.IsNil() - } - if v2.IsNil() { - return false - } - v1, v2 = v1.Elem(), v2.Elem() - } - if v1.Kind() != reflect.Struct { - return false - } - return equalStruct(v1, v2) -} - -// v1 and v2 are known to have the same type. -func equalStruct(v1, v2 reflect.Value) bool { - sprop := GetProperties(v1.Type()) - for i := 0; i < v1.NumField(); i++ { - f := v1.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - f1, f2 := v1.Field(i), v2.Field(i) - if f.Type.Kind() == reflect.Ptr { - if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { - // both unset - continue - } else if n1 != n2 { - // set/unset mismatch - return false - } - f1, f2 = f1.Elem(), f2.Elem() - } - if !equalAny(f1, f2, sprop.Prop[i]) { - return false - } - } - - if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_InternalExtensions") - if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { - return false - } - } - - if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_extensions") - if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { - return false - } - } - - uf := v1.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return true - } - - u1 := uf.Bytes() - u2 := v2.FieldByName("XXX_unrecognized").Bytes() - return bytes.Equal(u1, u2) -} - -// v1 and v2 are known to have the same type. -// prop may be nil. -func equalAny(v1, v2 reflect.Value, prop *Properties) bool { - if v1.Type() == protoMessageType { - m1, _ := v1.Interface().(Message) - m2, _ := v2.Interface().(Message) - return Equal(m1, m2) - } - switch v1.Kind() { - case reflect.Bool: - return v1.Bool() == v2.Bool() - case reflect.Float32, reflect.Float64: - return v1.Float() == v2.Float() - case reflect.Int32, reflect.Int64: - return v1.Int() == v2.Int() - case reflect.Interface: - // Probably a oneof field; compare the inner values. - n1, n2 := v1.IsNil(), v2.IsNil() - if n1 || n2 { - return n1 == n2 - } - e1, e2 := v1.Elem(), v2.Elem() - if e1.Type() != e2.Type() { - return false - } - return equalAny(e1, e2, nil) - case reflect.Map: - if v1.Len() != v2.Len() { - return false - } - for _, key := range v1.MapKeys() { - val2 := v2.MapIndex(key) - if !val2.IsValid() { - // This key was not found in the second map. - return false - } - if !equalAny(v1.MapIndex(key), val2, nil) { - return false - } - } - return true - case reflect.Ptr: - // Maps may have nil values in them, so check for nil. - if v1.IsNil() && v2.IsNil() { - return true - } - if v1.IsNil() != v2.IsNil() { - return false - } - return equalAny(v1.Elem(), v2.Elem(), prop) - case reflect.Slice: - if v1.Type().Elem().Kind() == reflect.Uint8 { - // short circuit: []byte - - // Edge case: if this is in a proto3 message, a zero length - // bytes field is considered the zero value. - if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { - return true - } - if v1.IsNil() != v2.IsNil() { - return false - } - return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) - } - - if v1.Len() != v2.Len() { - return false - } - for i := 0; i < v1.Len(); i++ { - if !equalAny(v1.Index(i), v2.Index(i), prop) { - return false - } - } - return true - case reflect.String: - return v1.Interface().(string) == v2.Interface().(string) - case reflect.Struct: - return equalStruct(v1, v2) - case reflect.Uint32, reflect.Uint64: - return v1.Uint() == v2.Uint() - } - - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to compare %v", v1) - return false -} - -// base is the struct type that the extensions are based on. -// x1 and x2 are InternalExtensions. -func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { - em1, _ := x1.extensionsRead() - em2, _ := x2.extensionsRead() - return equalExtMap(base, em1, em2) -} - -func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { - if len(em1) != len(em2) { - return false - } - - for extNum, e1 := range em1 { - e2, ok := em2[extNum] - if !ok { - return false - } - - m1, m2 := e1.value, e2.value - - if m1 == nil && m2 == nil { - // Both have only encoded form. - if bytes.Equal(e1.enc, e2.enc) { - continue - } - // The bytes are different, but the extensions might still be - // equal. We need to decode them to compare. - } - - if m1 != nil && m2 != nil { - // Both are unencoded. - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { - return false - } - continue - } - - // At least one is encoded. To do a semantically correct comparison - // we need to unmarshal them first. - var desc *ExtensionDesc - if m := extensionMaps[base]; m != nil { - desc = m[extNum] - } - if desc == nil { - // If both have only encoded form and the bytes are the same, - // it is handled above. We get here when the bytes are different. - // We don't know how to decode it, so just compare them as byte - // slices. - log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) - return false - } - var err error - if m1 == nil { - m1, err = decodeExtension(e1.enc, desc) - } - if m2 == nil && err == nil { - m2, err = decodeExtension(e2.enc, desc) - } - if err != nil { - // The encoded form is invalid. - log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) - return false - } - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { - return false - } - } - - return true -} diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go index 816a3b9d..5ed131c5 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ b/vendor/github.com/golang/protobuf/proto/extensions.go @@ -1,294 +1,111 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. package proto -/* - * Types and routines for supporting protocol buffer extensions. - */ - import ( "errors" "fmt" - "io" "reflect" - "strconv" - "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" + "google.golang.org/protobuf/runtime/protoimpl" ) -// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. +type ( + // ExtensionDesc represents an extension descriptor and + // is used to interact with an extension field in a message. + // + // Variables of this type are generated in code by protoc-gen-go. + ExtensionDesc = protoimpl.ExtensionInfo + + // ExtensionRange represents a range of message extensions. + // Used in code generated by protoc-gen-go. + ExtensionRange = protoiface.ExtensionRangeV1 + + // Deprecated: Do not use; this is an internal type. + Extension = protoimpl.ExtensionFieldV1 + + // Deprecated: Do not use; this is an internal type. + XXX_InternalExtensions = protoimpl.ExtensionFields +) + +// ErrMissingExtension reports whether the extension was not present. var ErrMissingExtension = errors.New("proto: missing extension") -// ExtensionRange represents a range of message extensions for a protocol buffer. -// Used in code generated by the protocol compiler. -type ExtensionRange struct { - Start, End int32 // both inclusive -} - -// extendableProto is an interface implemented by any protocol buffer generated by the current -// proto compiler that may be extended. -type extendableProto interface { - Message - ExtensionRangeArray() []ExtensionRange - extensionsWrite() map[int32]Extension - extensionsRead() (map[int32]Extension, sync.Locker) -} - -// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous -// version of the proto compiler that may be extended. -type extendableProtoV1 interface { - Message - ExtensionRangeArray() []ExtensionRange - ExtensionMap() map[int32]Extension -} - -// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. -type extensionAdapter struct { - extendableProtoV1 -} - -func (e extensionAdapter) extensionsWrite() map[int32]Extension { - return e.ExtensionMap() -} - -func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { - return e.ExtensionMap(), notLocker{} -} - -// notLocker is a sync.Locker whose Lock and Unlock methods are nops. -type notLocker struct{} - -func (n notLocker) Lock() {} -func (n notLocker) Unlock() {} - -// extendable returns the extendableProto interface for the given generated proto message. -// If the proto message has the old extension format, it returns a wrapper that implements -// the extendableProto interface. -func extendable(p interface{}) (extendableProto, error) { - switch p := p.(type) { - case extendableProto: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return p, nil - case extendableProtoV1: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return extensionAdapter{p}, nil - } - // Don't allocate a specific error containing %T: - // this is the hot path for Clone and MarshalText. - return nil, errNotExtendable -} - var errNotExtendable = errors.New("proto: not an extendable proto.Message") -func isNilPtr(x interface{}) bool { - v := reflect.ValueOf(x) - return v.Kind() == reflect.Ptr && v.IsNil() -} - -// XXX_InternalExtensions is an internal representation of proto extensions. -// -// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, -// thus gaining the unexported 'extensions' method, which can be called only from the proto package. -// -// The methods of XXX_InternalExtensions are not concurrency safe in general, -// but calls to logically read-only methods such as has and get may be executed concurrently. -type XXX_InternalExtensions struct { - // The struct must be indirect so that if a user inadvertently copies a - // generated message and its embedded XXX_InternalExtensions, they - // avoid the mayhem of a copied mutex. - // - // The mutex serializes all logically read-only operations to p.extensionMap. - // It is up to the client to ensure that write operations to p.extensionMap are - // mutually exclusive with other accesses. - p *struct { - mu sync.Mutex - extensionMap map[int32]Extension +// HasExtension reports whether the extension field is present in m +// either as an explicitly populated field or as an unknown field. +func HasExtension(m Message, xt *ExtensionDesc) (has bool) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() { + return false } -} -// extensionsWrite returns the extension map, creating it on first use. -func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { - if e.p == nil { - e.p = new(struct { - mu sync.Mutex - extensionMap map[int32]Extension + // Check whether any populated known field matches the field number. + xtd := xt.TypeDescriptor() + if isValidExtension(mr.Descriptor(), xtd) { + has = mr.Has(xtd) + } else { + mr.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { + has = int32(fd.Number()) == xt.Field + return !has }) - e.p.extensionMap = make(map[int32]Extension) } - return e.p.extensionMap -} -// extensionsRead returns the extensions map for read-only use. It may be nil. -// The caller must hold the returned mutex's lock when accessing Elements within the map. -func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { - if e.p == nil { - return nil, nil + // Check whether any unknown field matches the field number. + for b := mr.GetUnknown(); !has && len(b) > 0; { + num, _, n := protowire.ConsumeField(b) + has = int32(num) == xt.Field + b = b[n:] } - return e.p.extensionMap, &e.p.mu + return has } -// ExtensionDesc represents an extension specification. -// Used in generated code from the protocol compiler. -type ExtensionDesc struct { - ExtendedType Message // nil pointer to the type that is being extended - ExtensionType interface{} // nil pointer to the extension type - Field int32 // field number - Name string // fully-qualified name of extension, for text formatting - Tag string // protobuf tag style - Filename string // name of the file in which the extension is defined -} - -func (ed *ExtensionDesc) repeated() bool { - t := reflect.TypeOf(ed.ExtensionType) - return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 -} - -// Extension represents an extension in a message. -type Extension struct { - // When an extension is stored in a message using SetExtension - // only desc and value are set. When the message is marshaled - // enc will be set to the encoded form of the message. - // - // When a message is unmarshaled and contains extensions, each - // extension will have only enc set. When such an extension is - // accessed using GetExtension (or GetExtensions) desc and value - // will be set. - desc *ExtensionDesc - value interface{} - enc []byte -} - -// SetRawExtension is for testing only. -func SetRawExtension(base Message, id int32, b []byte) { - epb, err := extendable(base) - if err != nil { +// ClearExtension removes the the exntesion field from m +// either as an explicitly populated field or as an unknown field. +func ClearExtension(m Message, xt *ExtensionDesc) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() { return } - extmap := epb.extensionsWrite() - extmap[id] = Extension{enc: b} -} -// isExtensionField returns true iff the given field number is in an extension range. -func isExtensionField(pb extendableProto, field int32) bool { - for _, er := range pb.ExtensionRangeArray() { - if er.Start <= field && field <= er.End { + xtd := xt.TypeDescriptor() + if isValidExtension(mr.Descriptor(), xtd) { + mr.Clear(xtd) + } else { + mr.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { + if int32(fd.Number()) == xt.Field { + mr.Clear(fd) + return false + } return true - } + }) } - return false + clearUnknown(mr, fieldNum(xt.Field)) } -// checkExtensionTypes checks that the given extension is valid for pb. -func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { - var pbi interface{} = pb - // Check the extended type. - if ea, ok := pbi.(extensionAdapter); ok { - pbi = ea.extendableProtoV1 - } - if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { - return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) - } - // Check the range. - if !isExtensionField(pb, extension.Field) { - return errors.New("proto: bad extension number; not in declared ranges") - } - return nil -} - -// extPropKey is sufficient to uniquely identify an extension. -type extPropKey struct { - base reflect.Type - field int32 -} - -var extProp = struct { - sync.RWMutex - m map[extPropKey]*Properties -}{ - m: make(map[extPropKey]*Properties), -} - -func extensionProperties(ed *ExtensionDesc) *Properties { - key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} - - extProp.RLock() - if prop, ok := extProp.m[key]; ok { - extProp.RUnlock() - return prop - } - extProp.RUnlock() - - extProp.Lock() - defer extProp.Unlock() - // Check again. - if prop, ok := extProp.m[key]; ok { - return prop - } - - prop := new(Properties) - prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) - extProp.m[key] = prop - return prop -} - -// HasExtension returns whether the given extension is present in pb. -func HasExtension(pb Message, extension *ExtensionDesc) bool { - // TODO: Check types, field numbers, etc.? - epb, err := extendable(pb) - if err != nil { - return false - } - extmap, mu := epb.extensionsRead() - if extmap == nil { - return false - } - mu.Lock() - _, ok := extmap[extension.Field] - mu.Unlock() - return ok -} - -// ClearExtension removes the given extension from pb. -func ClearExtension(pb Message, extension *ExtensionDesc) { - epb, err := extendable(pb) - if err != nil { +// ClearAllExtensions clears all extensions from m. +// This includes populated fields and unknown fields in the extension range. +func ClearAllExtensions(m Message) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() { return } - // TODO: Check types, field numbers, etc.? - extmap := epb.extensionsWrite() - delete(extmap, extension.Field) + + mr.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { + if fd.IsExtension() { + mr.Clear(fd) + } + return true + }) + clearUnknown(mr, mr.Descriptor().ExtensionRanges()) } // GetExtension retrieves a proto2 extended field from pb. @@ -298,246 +115,242 @@ func ClearExtension(pb Message, extension *ExtensionDesc) { // If the field is not present, then the default value is returned (if one is specified), // otherwise ErrMissingExtension is reported. // -// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), -// then GetExtension returns the raw encoded bytes of the field extension. -func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err +// If the descriptor is type incomplete (i.e., ExtensionDesc.ExtensionType is nil), +// then GetExtension returns the raw encoded bytes for the extension field. +func GetExtension(m Message, xt *ExtensionDesc) (interface{}, error) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 { + return nil, errNotExtendable } - if extension.ExtendedType != nil { - // can only check type if this is a complete descriptor - if err := checkExtensionTypes(epb, extension); err != nil { + // Retrieve the unknown fields for this extension field. + var bo protoreflect.RawFields + for bi := mr.GetUnknown(); len(bi) > 0; { + num, _, n := protowire.ConsumeField(bi) + if int32(num) == xt.Field { + bo = append(bo, bi[:n]...) + } + bi = bi[n:] + } + + // For type incomplete descriptors, only retrieve the unknown fields. + if xt.ExtensionType == nil { + return []byte(bo), nil + } + + // If the extension field only exists as unknown fields, unmarshal it. + // This is rarely done since proto.Unmarshal eagerly unmarshals extensions. + xtd := xt.TypeDescriptor() + if !isValidExtension(mr.Descriptor(), xtd) { + return nil, fmt.Errorf("proto: bad extended type; %T does not extend %T", xt.ExtendedType, m) + } + if !mr.Has(xtd) && len(bo) > 0 { + m2 := mr.New() + if err := (proto.UnmarshalOptions{ + Resolver: extensionResolver{xt}, + }.Unmarshal(bo, m2.Interface())); err != nil { return nil, err } - } - - emap, mu := epb.extensionsRead() - if emap == nil { - return defaultExtensionValue(extension) - } - mu.Lock() - defer mu.Unlock() - e, ok := emap[extension.Field] - if !ok { - // defaultExtensionValue returns the default value or - // ErrMissingExtension if there is no default. - return defaultExtensionValue(extension) - } - - if e.value != nil { - // Already decoded. Check the descriptor, though. - if e.desc != extension { - // This shouldn't happen. If it does, it means that - // GetExtension was called twice with two different - // descriptors with the same field number. - return nil, errors.New("proto: descriptor conflict") + if m2.Has(xtd) { + mr.Set(xtd, m2.Get(xtd)) + clearUnknown(mr, fieldNum(xt.Field)) } - return e.value, nil } - if extension.ExtensionType == nil { - // incomplete descriptor - return e.enc, nil - } - - v, err := decodeExtension(e.enc, extension) - if err != nil { - return nil, err - } - - // Remember the decoded version and drop the encoded version. - // That way it is safe to mutate what we return. - e.value = v - e.desc = extension - e.enc = nil - emap[extension.Field] = e - return e.value, nil -} - -// defaultExtensionValue returns the default value for extension. -// If no default for an extension is defined ErrMissingExtension is returned. -func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { - if extension.ExtensionType == nil { - // incomplete descriptor, so no default + // Check whether the message has the extension field set or a default. + var pv protoreflect.Value + switch { + case mr.Has(xtd): + pv = mr.Get(xtd) + case xtd.HasDefault(): + pv = xtd.Default() + default: return nil, ErrMissingExtension } - t := reflect.TypeOf(extension.ExtensionType) - props := extensionProperties(extension) - - sf, _, err := fieldDefault(t, props) - if err != nil { - return nil, err + v := xt.InterfaceOf(pv) + rv := reflect.ValueOf(v) + if isScalarKind(rv.Kind()) { + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() } - - if sf == nil || sf.value == nil { - // There is no default value. - return nil, ErrMissingExtension - } - - if t.Kind() != reflect.Ptr { - // We do not need to return a Ptr, we can directly return sf.value. - return sf.value, nil - } - - // We need to return an interface{} that is a pointer to sf.value. - value := reflect.New(t).Elem() - value.Set(reflect.New(value.Type().Elem())) - if sf.kind == reflect.Int32 { - // We may have an int32 or an enum, but the underlying data is int32. - // Since we can't set an int32 into a non int32 reflect.value directly - // set it as a int32. - value.Elem().SetInt(int64(sf.value.(int32))) - } else { - value.Elem().Set(reflect.ValueOf(sf.value)) - } - return value.Interface(), nil + return v, nil } -// decodeExtension decodes an extension encoded in b. -func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { - t := reflect.TypeOf(extension.ExtensionType) - unmarshal := typeUnmarshaler(t, extension.Tag) +// extensionResolver is a custom extension resolver that stores a single +// extension type that takes precedence over the global registry. +type extensionResolver struct{ xt protoreflect.ExtensionType } - // t is a pointer to a struct, pointer to basic type or a slice. - // Allocate space to store the pointer/slice. - value := reflect.New(t).Elem() +func (r extensionResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { + if xtd := r.xt.TypeDescriptor(); xtd.FullName() == field { + return r.xt, nil + } + return protoregistry.GlobalTypes.FindExtensionByName(field) +} - var err error - for { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - wire := int(x) & 7 +func (r extensionResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { + if xtd := r.xt.TypeDescriptor(); xtd.ContainingMessage().FullName() == message && xtd.Number() == field { + return r.xt, nil + } + return protoregistry.GlobalTypes.FindExtensionByNumber(message, field) +} - b, err = unmarshal(b, valToPointer(value.Addr()), wire) +// GetExtensions returns a list of the extensions values present in m, +// corresponding with the provided list of extension descriptors, xts. +// If an extension is missing in m, the corresponding value is nil. +func GetExtensions(m Message, xts []*ExtensionDesc) ([]interface{}, error) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() { + return nil, errNotExtendable + } + + vs := make([]interface{}, len(xts)) + for i, xt := range xts { + v, err := GetExtension(m, xt) if err != nil { - return nil, err - } - - if len(b) == 0 { - break - } - } - return value.Interface(), nil -} - -// GetExtensions returns a slice of the extensions present in pb that are also listed in es. -// The returned slice has the same length as es; missing extensions will appear as nil elements. -func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - extensions = make([]interface{}, len(es)) - for i, e := range es { - extensions[i], err = GetExtension(epb, e) - if err == ErrMissingExtension { - err = nil - } - if err != nil { - return - } - } - return -} - -// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. -// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing -// just the Field field, which defines the extension's field number. -func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - registeredExtensions := RegisteredExtensions(pb) - - emap, mu := epb.extensionsRead() - if emap == nil { - return nil, nil - } - mu.Lock() - defer mu.Unlock() - extensions := make([]*ExtensionDesc, 0, len(emap)) - for extid, e := range emap { - desc := e.desc - if desc == nil { - desc = registeredExtensions[extid] - if desc == nil { - desc = &ExtensionDesc{Field: extid} + if err == ErrMissingExtension { + continue } + return vs, err } - - extensions = append(extensions, desc) + vs[i] = v } - return extensions, nil + return vs, nil } -// SetExtension sets the specified extension of pb to the specified value. -func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { - epb, err := extendable(pb) - if err != nil { - return err - } - if err := checkExtensionTypes(epb, extension); err != nil { - return err - } - typ := reflect.TypeOf(extension.ExtensionType) - if typ != reflect.TypeOf(value) { - return errors.New("proto: bad extension value type") - } - // nil extension values need to be caught early, because the - // encoder can't distinguish an ErrNil due to a nil extension - // from an ErrNil due to a missing field. Extensions are - // always optional, so the encoder would just swallow the error - // and drop all the extensions from the encoded message. - if reflect.ValueOf(value).IsNil() { - return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) +// SetExtension sets an extension field in m to the provided value. +func SetExtension(m Message, xt *ExtensionDesc, v interface{}) error { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 { + return errNotExtendable } - extmap := epb.extensionsWrite() - extmap[extension.Field] = Extension{desc: extension, value: value} + rv := reflect.ValueOf(v) + if reflect.TypeOf(v) != reflect.TypeOf(xt.ExtensionType) { + return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", v, xt.ExtensionType) + } + if rv.Kind() == reflect.Ptr { + if rv.IsNil() { + return fmt.Errorf("proto: SetExtension called with nil value of type %T", v) + } + if isScalarKind(rv.Elem().Kind()) { + v = rv.Elem().Interface() + } + } + + xtd := xt.TypeDescriptor() + if !isValidExtension(mr.Descriptor(), xtd) { + return fmt.Errorf("proto: bad extended type; %T does not extend %T", xt.ExtendedType, m) + } + mr.Set(xtd, xt.ValueOf(v)) + clearUnknown(mr, fieldNum(xt.Field)) return nil } -// ClearAllExtensions clears all extensions from pb. -func ClearAllExtensions(pb Message) { - epb, err := extendable(pb) - if err != nil { +// SetRawExtension inserts b into the unknown fields of m. +// +// Deprecated: Use Message.ProtoReflect.SetUnknown instead. +func SetRawExtension(m Message, fnum int32, b []byte) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() { return } - m := epb.extensionsWrite() - for k := range m { - delete(m, k) + + // Verify that the raw field is valid. + for b0 := b; len(b0) > 0; { + num, _, n := protowire.ConsumeField(b0) + if int32(num) != fnum { + panic(fmt.Sprintf("mismatching field number: got %d, want %d", num, fnum)) + } + b0 = b0[n:] + } + + ClearExtension(m, &ExtensionDesc{Field: fnum}) + mr.SetUnknown(append(mr.GetUnknown(), b...)) +} + +// ExtensionDescs returns a list of extension descriptors found in m, +// containing descriptors for both populated extension fields in m and +// also unknown fields of m that are in the extension range. +// For the later case, an type incomplete descriptor is provided where only +// the ExtensionDesc.Field field is populated. +// The order of the extension descriptors is undefined. +func ExtensionDescs(m Message) ([]*ExtensionDesc, error) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 { + return nil, errNotExtendable + } + + // Collect a set of known extension descriptors. + extDescs := make(map[protoreflect.FieldNumber]*ExtensionDesc) + mr.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if fd.IsExtension() { + xt := fd.(protoreflect.ExtensionTypeDescriptor) + if xd, ok := xt.Type().(*ExtensionDesc); ok { + extDescs[fd.Number()] = xd + } + } + return true + }) + + // Collect a set of unknown extension descriptors. + extRanges := mr.Descriptor().ExtensionRanges() + for b := mr.GetUnknown(); len(b) > 0; { + num, _, n := protowire.ConsumeField(b) + if extRanges.Has(num) && extDescs[num] == nil { + extDescs[num] = nil + } + b = b[n:] + } + + // Transpose the set of descriptors into a list. + var xts []*ExtensionDesc + for num, xt := range extDescs { + if xt == nil { + xt = &ExtensionDesc{Field: int32(num)} + } + xts = append(xts, xt) + } + return xts, nil +} + +// isValidExtension reports whether xtd is a valid extension descriptor for md. +func isValidExtension(md protoreflect.MessageDescriptor, xtd protoreflect.ExtensionTypeDescriptor) bool { + return xtd.ContainingMessage() == md && md.ExtensionRanges().Has(xtd.Number()) +} + +// isScalarKind reports whether k is a protobuf scalar kind (except bytes). +// This function exists for historical reasons since the representation of +// scalars differs between v1 and v2, where v1 uses *T and v2 uses T. +func isScalarKind(k reflect.Kind) bool { + switch k { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + return true + default: + return false } } -// A global registry of extensions. -// The generated code will register the generated descriptors by calling RegisterExtension. - -var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) - -// RegisterExtension is called from the generated code. -func RegisterExtension(desc *ExtensionDesc) { - st := reflect.TypeOf(desc.ExtendedType).Elem() - m := extensionMaps[st] - if m == nil { - m = make(map[int32]*ExtensionDesc) - extensionMaps[st] = m +// clearUnknown removes unknown fields from m where remover.Has reports true. +func clearUnknown(m protoreflect.Message, remover interface { + Has(protoreflect.FieldNumber) bool +}) { + var bo protoreflect.RawFields + for bi := m.GetUnknown(); len(bi) > 0; { + num, _, n := protowire.ConsumeField(bi) + if !remover.Has(num) { + bo = append(bo, bi[:n]...) + } + bi = bi[n:] } - if _, ok := m[desc.Field]; ok { - panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) + if bi := m.GetUnknown(); len(bi) != len(bo) { + m.SetUnknown(bo) } - m[desc.Field] = desc } -// RegisteredExtensions returns a map of the registered extensions of a -// protocol buffer struct, indexed by the extension number. -// The argument pb should be a nil pointer to the struct type. -func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { - return extensionMaps[reflect.TypeOf(pb).Elem()] +type fieldNum protoreflect.FieldNumber + +func (n1 fieldNum) Has(n2 protoreflect.FieldNumber) bool { + return protoreflect.FieldNumber(n1) == n2 } diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go deleted file mode 100644 index 75565cc6..00000000 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ /dev/null @@ -1,979 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* -Package proto converts data structures to and from the wire format of -protocol buffers. It works in concert with the Go source code generated -for .proto files by the protocol compiler. - -A summary of the properties of the protocol buffer interface -for a protocol buffer variable v: - - - Names are turned from camel_case to CamelCase for export. - - There are no methods on v to set fields; just treat - them as structure fields. - - There are getters that return a field's value if set, - and return the field's default value if unset. - The getters work even if the receiver is a nil message. - - The zero value for a struct is its correct initialization state. - All desired fields must be set before marshaling. - - A Reset() method will restore a protobuf struct to its zero state. - - Non-repeated fields are pointers to the values; nil means unset. - That is, optional or required field int32 f becomes F *int32. - - Repeated fields are slices. - - Helper functions are available to aid the setting of fields. - msg.Foo = proto.String("hello") // set field - - Constants are defined to hold the default values of all fields that - have them. They have the form Default_StructName_FieldName. - Because the getter methods handle defaulted values, - direct use of these constants should be rare. - - Enums are given type names and maps from names to values. - Enum values are prefixed by the enclosing message's name, or by the - enum's type name if it is a top-level enum. Enum types have a String - method, and a Enum method to assist in message construction. - - Nested messages, groups and enums have type names prefixed with the name of - the surrounding message type. - - Extensions are given descriptor names that start with E_, - followed by an underscore-delimited list of the nested messages - that contain it (if any) followed by the CamelCased name of the - extension field itself. HasExtension, ClearExtension, GetExtension - and SetExtension are functions for manipulating extensions. - - Oneof field sets are given a single field in their message, - with distinguished wrapper types for each possible field value. - - Marshal and Unmarshal are functions to encode and decode the wire format. - -When the .proto file specifies `syntax="proto3"`, there are some differences: - - - Non-repeated fields of non-message type are values instead of pointers. - - Enum types do not get an Enum method. - -The simplest way to describe this is to see an example. -Given file test.proto, containing - - package example; - - enum FOO { X = 17; } - - message Test { - required string label = 1; - optional int32 type = 2 [default=77]; - repeated int64 reps = 3; - optional group OptionalGroup = 4 { - required string RequiredField = 5; - } - oneof union { - int32 number = 6; - string name = 7; - } - } - -The resulting file, test.pb.go, is: - - package example - - import proto "github.com/golang/protobuf/proto" - import math "math" - - type FOO int32 - const ( - FOO_X FOO = 17 - ) - var FOO_name = map[int32]string{ - 17: "X", - } - var FOO_value = map[string]int32{ - "X": 17, - } - - func (x FOO) Enum() *FOO { - p := new(FOO) - *p = x - return p - } - func (x FOO) String() string { - return proto.EnumName(FOO_name, int32(x)) - } - func (x *FOO) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FOO_value, data) - if err != nil { - return err - } - *x = FOO(value) - return nil - } - - type Test struct { - Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` - Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` - Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` - Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - // Types that are valid to be assigned to Union: - // *Test_Number - // *Test_Name - Union isTest_Union `protobuf_oneof:"union"` - XXX_unrecognized []byte `json:"-"` - } - func (m *Test) Reset() { *m = Test{} } - func (m *Test) String() string { return proto.CompactTextString(m) } - func (*Test) ProtoMessage() {} - - type isTest_Union interface { - isTest_Union() - } - - type Test_Number struct { - Number int32 `protobuf:"varint,6,opt,name=number"` - } - type Test_Name struct { - Name string `protobuf:"bytes,7,opt,name=name"` - } - - func (*Test_Number) isTest_Union() {} - func (*Test_Name) isTest_Union() {} - - func (m *Test) GetUnion() isTest_Union { - if m != nil { - return m.Union - } - return nil - } - const Default_Test_Type int32 = 77 - - func (m *Test) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" - } - - func (m *Test) GetType() int32 { - if m != nil && m.Type != nil { - return *m.Type - } - return Default_Test_Type - } - - func (m *Test) GetOptionalgroup() *Test_OptionalGroup { - if m != nil { - return m.Optionalgroup - } - return nil - } - - type Test_OptionalGroup struct { - RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` - } - func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } - func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } - - func (m *Test_OptionalGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" - } - - func (m *Test) GetNumber() int32 { - if x, ok := m.GetUnion().(*Test_Number); ok { - return x.Number - } - return 0 - } - - func (m *Test) GetName() string { - if x, ok := m.GetUnion().(*Test_Name); ok { - return x.Name - } - return "" - } - - func init() { - proto.RegisterEnum("example.FOO", FOO_name, FOO_value) - } - -To create and play with a Test object: - - package main - - import ( - "log" - - "github.com/golang/protobuf/proto" - pb "./example.pb" - ) - - func main() { - test := &pb.Test{ - Label: proto.String("hello"), - Type: proto.Int32(17), - Reps: []int64{1, 2, 3}, - Optionalgroup: &pb.Test_OptionalGroup{ - RequiredField: proto.String("good bye"), - }, - Union: &pb.Test_Name{"fred"}, - } - data, err := proto.Marshal(test) - if err != nil { - log.Fatal("marshaling error: ", err) - } - newTest := &pb.Test{} - err = proto.Unmarshal(data, newTest) - if err != nil { - log.Fatal("unmarshaling error: ", err) - } - // Now test and newTest contain the same data. - if test.GetLabel() != newTest.GetLabel() { - log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) - } - // Use a type switch to determine which oneof was set. - switch u := test.Union.(type) { - case *pb.Test_Number: // u.Number contains the number. - case *pb.Test_Name: // u.Name contains the string. - } - // etc. - } -*/ -package proto - -import ( - "encoding/json" - "fmt" - "log" - "reflect" - "sort" - "strconv" - "sync" -) - -// RequiredNotSetError is an error type returned by either Marshal or Unmarshal. -// Marshal reports this when a required field is not initialized. -// Unmarshal reports this when a required field is missing from the wire data. -type RequiredNotSetError struct{ field string } - -func (e *RequiredNotSetError) Error() string { - if e.field == "" { - return fmt.Sprintf("proto: required field not set") - } - return fmt.Sprintf("proto: required field %q not set", e.field) -} -func (e *RequiredNotSetError) RequiredNotSet() bool { - return true -} - -type invalidUTF8Error struct{ field string } - -func (e *invalidUTF8Error) Error() string { - if e.field == "" { - return "proto: invalid UTF-8 detected" - } - return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field) -} -func (e *invalidUTF8Error) InvalidUTF8() bool { - return true -} - -// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8. -// This error should not be exposed to the external API as such errors should -// be recreated with the field information. -var errInvalidUTF8 = &invalidUTF8Error{} - -// isNonFatal reports whether the error is either a RequiredNotSet error -// or a InvalidUTF8 error. -func isNonFatal(err error) bool { - if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() { - return true - } - if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() { - return true - } - return false -} - -type nonFatal struct{ E error } - -// Merge merges err into nf and reports whether it was successful. -// Otherwise it returns false for any fatal non-nil errors. -func (nf *nonFatal) Merge(err error) (ok bool) { - if err == nil { - return true // not an error - } - if !isNonFatal(err) { - return false // fatal error - } - if nf.E == nil { - nf.E = err // store first instance of non-fatal error - } - return true -} - -// Message is implemented by generated protocol buffer messages. -type Message interface { - Reset() - String() string - ProtoMessage() -} - -// Stats records allocation details about the protocol buffer encoders -// and decoders. Useful for tuning the library itself. -type Stats struct { - Emalloc uint64 // mallocs in encode - Dmalloc uint64 // mallocs in decode - Encode uint64 // number of encodes - Decode uint64 // number of decodes - Chit uint64 // number of cache hits - Cmiss uint64 // number of cache misses - Size uint64 // number of sizes -} - -// Set to true to enable stats collection. -const collectStats = false - -var stats Stats - -// GetStats returns a copy of the global Stats structure. -func GetStats() Stats { return stats } - -// A Buffer is a buffer manager for marshaling and unmarshaling -// protocol buffers. It may be reused between invocations to -// reduce memory usage. It is not necessary to use a Buffer; -// the global functions Marshal and Unmarshal create a -// temporary Buffer and are fine for most applications. -type Buffer struct { - buf []byte // encode/decode byte stream - index int // read point - - deterministic bool -} - -// NewBuffer allocates a new Buffer and initializes its internal data to -// the contents of the argument slice. -func NewBuffer(e []byte) *Buffer { - return &Buffer{buf: e} -} - -// Reset resets the Buffer, ready for marshaling a new protocol buffer. -func (p *Buffer) Reset() { - p.buf = p.buf[0:0] // for reading/writing - p.index = 0 // for reading -} - -// SetBuf replaces the internal buffer with the slice, -// ready for unmarshaling the contents of the slice. -func (p *Buffer) SetBuf(s []byte) { - p.buf = s - p.index = 0 -} - -// Bytes returns the contents of the Buffer. -func (p *Buffer) Bytes() []byte { return p.buf } - -// SetDeterministic sets whether to use deterministic serialization. -// -// Deterministic serialization guarantees that for a given binary, equal -// messages will always be serialized to the same bytes. This implies: -// -// - Repeated serialization of a message will return the same bytes. -// - Different processes of the same binary (which may be executing on -// different machines) will serialize equal messages to the same bytes. -// -// Note that the deterministic serialization is NOT canonical across -// languages. It is not guaranteed to remain stable over time. It is unstable -// across different builds with schema changes due to unknown fields. -// Users who need canonical serialization (e.g., persistent storage in a -// canonical form, fingerprinting, etc.) should define their own -// canonicalization specification and implement their own serializer rather -// than relying on this API. -// -// If deterministic serialization is requested, map entries will be sorted -// by keys in lexographical order. This is an implementation detail and -// subject to change. -func (p *Buffer) SetDeterministic(deterministic bool) { - p.deterministic = deterministic -} - -/* - * Helper routines for simplifying the creation of optional fields of basic type. - */ - -// Bool is a helper routine that allocates a new bool value -// to store v and returns a pointer to it. -func Bool(v bool) *bool { - return &v -} - -// Int32 is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it. -func Int32(v int32) *int32 { - return &v -} - -// Int is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it, but unlike Int32 -// its argument value is an int. -func Int(v int) *int32 { - p := new(int32) - *p = int32(v) - return p -} - -// Int64 is a helper routine that allocates a new int64 value -// to store v and returns a pointer to it. -func Int64(v int64) *int64 { - return &v -} - -// Float32 is a helper routine that allocates a new float32 value -// to store v and returns a pointer to it. -func Float32(v float32) *float32 { - return &v -} - -// Float64 is a helper routine that allocates a new float64 value -// to store v and returns a pointer to it. -func Float64(v float64) *float64 { - return &v -} - -// Uint32 is a helper routine that allocates a new uint32 value -// to store v and returns a pointer to it. -func Uint32(v uint32) *uint32 { - return &v -} - -// Uint64 is a helper routine that allocates a new uint64 value -// to store v and returns a pointer to it. -func Uint64(v uint64) *uint64 { - return &v -} - -// String is a helper routine that allocates a new string value -// to store v and returns a pointer to it. -func String(v string) *string { - return &v -} - -// EnumName is a helper function to simplify printing protocol buffer enums -// by name. Given an enum map and a value, it returns a useful string. -func EnumName(m map[int32]string, v int32) string { - s, ok := m[v] - if ok { - return s - } - return strconv.Itoa(int(v)) -} - -// UnmarshalJSONEnum is a helper function to simplify recovering enum int values -// from their JSON-encoded representation. Given a map from the enum's symbolic -// names to its int values, and a byte buffer containing the JSON-encoded -// value, it returns an int32 that can be cast to the enum type by the caller. -// -// The function can deal with both JSON representations, numeric and symbolic. -func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { - if data[0] == '"' { - // New style: enums are strings. - var repr string - if err := json.Unmarshal(data, &repr); err != nil { - return -1, err - } - val, ok := m[repr] - if !ok { - return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) - } - return val, nil - } - // Old style: enums are ints. - var val int32 - if err := json.Unmarshal(data, &val); err != nil { - return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) - } - return val, nil -} - -// DebugPrint dumps the encoded data in b in a debugging format with a header -// including the string s. Used in testing but made available for general debugging. -func (p *Buffer) DebugPrint(s string, b []byte) { - var u uint64 - - obuf := p.buf - index := p.index - p.buf = b - p.index = 0 - depth := 0 - - fmt.Printf("\n--- %s ---\n", s) - -out: - for { - for i := 0; i < depth; i++ { - fmt.Print(" ") - } - - index := p.index - if index == len(p.buf) { - break - } - - op, err := p.DecodeVarint() - if err != nil { - fmt.Printf("%3d: fetching op err %v\n", index, err) - break out - } - tag := op >> 3 - wire := op & 7 - - switch wire { - default: - fmt.Printf("%3d: t=%3d unknown wire=%d\n", - index, tag, wire) - break out - - case WireBytes: - var r []byte - - r, err = p.DecodeRawBytes(false) - if err != nil { - break out - } - fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) - if len(r) <= 6 { - for i := 0; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } else { - for i := 0; i < 3; i++ { - fmt.Printf(" %.2x", r[i]) - } - fmt.Printf(" ..") - for i := len(r) - 3; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } - fmt.Printf("\n") - - case WireFixed32: - u, err = p.DecodeFixed32() - if err != nil { - fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) - - case WireFixed64: - u, err = p.DecodeFixed64() - if err != nil { - fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) - - case WireVarint: - u, err = p.DecodeVarint() - if err != nil { - fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) - - case WireStartGroup: - fmt.Printf("%3d: t=%3d start\n", index, tag) - depth++ - - case WireEndGroup: - depth-- - fmt.Printf("%3d: t=%3d end\n", index, tag) - } - } - - if depth != 0 { - fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) - } - fmt.Printf("\n") - - p.buf = obuf - p.index = index -} - -// SetDefaults sets unset protocol buffer fields to their default values. -// It only modifies fields that are both unset and have defined defaults. -// It recursively sets default values in any non-nil sub-messages. -func SetDefaults(pb Message) { - setDefaults(reflect.ValueOf(pb), true, false) -} - -// v is a pointer to a struct. -func setDefaults(v reflect.Value, recur, zeros bool) { - v = v.Elem() - - defaultMu.RLock() - dm, ok := defaults[v.Type()] - defaultMu.RUnlock() - if !ok { - dm = buildDefaultMessage(v.Type()) - defaultMu.Lock() - defaults[v.Type()] = dm - defaultMu.Unlock() - } - - for _, sf := range dm.scalars { - f := v.Field(sf.index) - if !f.IsNil() { - // field already set - continue - } - dv := sf.value - if dv == nil && !zeros { - // no explicit default, and don't want to set zeros - continue - } - fptr := f.Addr().Interface() // **T - // TODO: Consider batching the allocations we do here. - switch sf.kind { - case reflect.Bool: - b := new(bool) - if dv != nil { - *b = dv.(bool) - } - *(fptr.(**bool)) = b - case reflect.Float32: - f := new(float32) - if dv != nil { - *f = dv.(float32) - } - *(fptr.(**float32)) = f - case reflect.Float64: - f := new(float64) - if dv != nil { - *f = dv.(float64) - } - *(fptr.(**float64)) = f - case reflect.Int32: - // might be an enum - if ft := f.Type(); ft != int32PtrType { - // enum - f.Set(reflect.New(ft.Elem())) - if dv != nil { - f.Elem().SetInt(int64(dv.(int32))) - } - } else { - // int32 field - i := new(int32) - if dv != nil { - *i = dv.(int32) - } - *(fptr.(**int32)) = i - } - case reflect.Int64: - i := new(int64) - if dv != nil { - *i = dv.(int64) - } - *(fptr.(**int64)) = i - case reflect.String: - s := new(string) - if dv != nil { - *s = dv.(string) - } - *(fptr.(**string)) = s - case reflect.Uint8: - // exceptional case: []byte - var b []byte - if dv != nil { - db := dv.([]byte) - b = make([]byte, len(db)) - copy(b, db) - } else { - b = []byte{} - } - *(fptr.(*[]byte)) = b - case reflect.Uint32: - u := new(uint32) - if dv != nil { - *u = dv.(uint32) - } - *(fptr.(**uint32)) = u - case reflect.Uint64: - u := new(uint64) - if dv != nil { - *u = dv.(uint64) - } - *(fptr.(**uint64)) = u - default: - log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) - } - } - - for _, ni := range dm.nested { - f := v.Field(ni) - // f is *T or []*T or map[T]*T - switch f.Kind() { - case reflect.Ptr: - if f.IsNil() { - continue - } - setDefaults(f, recur, zeros) - - case reflect.Slice: - for i := 0; i < f.Len(); i++ { - e := f.Index(i) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - - case reflect.Map: - for _, k := range f.MapKeys() { - e := f.MapIndex(k) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - } - } -} - -var ( - // defaults maps a protocol buffer struct type to a slice of the fields, - // with its scalar fields set to their proto-declared non-zero default values. - defaultMu sync.RWMutex - defaults = make(map[reflect.Type]defaultMessage) - - int32PtrType = reflect.TypeOf((*int32)(nil)) -) - -// defaultMessage represents information about the default values of a message. -type defaultMessage struct { - scalars []scalarField - nested []int // struct field index of nested messages -} - -type scalarField struct { - index int // struct field index - kind reflect.Kind // element type (the T in *T or []T) - value interface{} // the proto-declared default value, or nil -} - -// t is a struct type. -func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { - sprop := GetProperties(t) - for _, prop := range sprop.Prop { - fi, ok := sprop.decoderTags.get(prop.Tag) - if !ok { - // XXX_unrecognized - continue - } - ft := t.Field(fi).Type - - sf, nested, err := fieldDefault(ft, prop) - switch { - case err != nil: - log.Print(err) - case nested: - dm.nested = append(dm.nested, fi) - case sf != nil: - sf.index = fi - dm.scalars = append(dm.scalars, *sf) - } - } - - return dm -} - -// fieldDefault returns the scalarField for field type ft. -// sf will be nil if the field can not have a default. -// nestedMessage will be true if this is a nested message. -// Note that sf.index is not set on return. -func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { - var canHaveDefault bool - switch ft.Kind() { - case reflect.Ptr: - if ft.Elem().Kind() == reflect.Struct { - nestedMessage = true - } else { - canHaveDefault = true // proto2 scalar field - } - - case reflect.Slice: - switch ft.Elem().Kind() { - case reflect.Ptr: - nestedMessage = true // repeated message - case reflect.Uint8: - canHaveDefault = true // bytes field - } - - case reflect.Map: - if ft.Elem().Kind() == reflect.Ptr { - nestedMessage = true // map with message values - } - } - - if !canHaveDefault { - if nestedMessage { - return nil, true, nil - } - return nil, false, nil - } - - // We now know that ft is a pointer or slice. - sf = &scalarField{kind: ft.Elem().Kind()} - - // scalar fields without defaults - if !prop.HasDefault { - return sf, false, nil - } - - // a scalar field: either *T or []byte - switch ft.Elem().Kind() { - case reflect.Bool: - x, err := strconv.ParseBool(prop.Default) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) - } - sf.value = x - case reflect.Float32: - x, err := strconv.ParseFloat(prop.Default, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) - } - sf.value = float32(x) - case reflect.Float64: - x, err := strconv.ParseFloat(prop.Default, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) - } - sf.value = x - case reflect.Int32: - x, err := strconv.ParseInt(prop.Default, 10, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) - } - sf.value = int32(x) - case reflect.Int64: - x, err := strconv.ParseInt(prop.Default, 10, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) - } - sf.value = x - case reflect.String: - sf.value = prop.Default - case reflect.Uint8: - // []byte (not *uint8) - sf.value = []byte(prop.Default) - case reflect.Uint32: - x, err := strconv.ParseUint(prop.Default, 10, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) - } - sf.value = uint32(x) - case reflect.Uint64: - x, err := strconv.ParseUint(prop.Default, 10, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) - } - sf.value = x - default: - return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) - } - - return sf, false, nil -} - -// mapKeys returns a sort.Interface to be used for sorting the map keys. -// Map fields may have key types of non-float scalars, strings and enums. -func mapKeys(vs []reflect.Value) sort.Interface { - s := mapKeySorter{vs: vs} - - // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. - if len(vs) == 0 { - return s - } - switch vs[0].Kind() { - case reflect.Int32, reflect.Int64: - s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } - case reflect.Uint32, reflect.Uint64: - s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } - case reflect.Bool: - s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true - case reflect.String: - s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } - default: - panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) - } - - return s -} - -type mapKeySorter struct { - vs []reflect.Value - less func(a, b reflect.Value) bool -} - -func (s mapKeySorter) Len() int { return len(s.vs) } -func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } -func (s mapKeySorter) Less(i, j int) bool { - return s.less(s.vs[i], s.vs[j]) -} - -// isProto3Zero reports whether v is a zero proto3 value. -func isProto3Zero(v reflect.Value) bool { - switch v.Kind() { - case reflect.Bool: - return !v.Bool() - case reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint32, reflect.Uint64: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.String: - return v.String() == "" - } - return false -} - -// ProtoPackageIsVersion2 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion2 = true - -// ProtoPackageIsVersion1 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion1 = true - -// InternalMessageInfo is a type used internally by generated .pb.go files. -// This type is not intended to be used by non-generated code. -// This type is not subject to any compatibility guarantee. -type InternalMessageInfo struct { - marshal *marshalInfo - unmarshal *unmarshalInfo - merge *mergeInfo - discard *discardInfo -} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go deleted file mode 100644 index 3b6ca41d..00000000 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ /dev/null @@ -1,314 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Support for message sets. - */ - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "reflect" - "sort" - "sync" -) - -// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. -// A message type ID is required for storing a protocol buffer in a message set. -var errNoMessageTypeID = errors.New("proto does not have a message type ID") - -// The first two types (_MessageSet_Item and messageSet) -// model what the protocol compiler produces for the following protocol message: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } -// That is the MessageSet wire format. We can't use a proto to generate these -// because that would introduce a circular dependency between it and this package. - -type _MessageSet_Item struct { - TypeId *int32 `protobuf:"varint,2,req,name=type_id"` - Message []byte `protobuf:"bytes,3,req,name=message"` -} - -type messageSet struct { - Item []*_MessageSet_Item `protobuf:"group,1,rep"` - XXX_unrecognized []byte - // TODO: caching? -} - -// Make sure messageSet is a Message. -var _ Message = (*messageSet)(nil) - -// messageTypeIder is an interface satisfied by a protocol buffer type -// that may be stored in a MessageSet. -type messageTypeIder interface { - MessageTypeId() int32 -} - -func (ms *messageSet) find(pb Message) *_MessageSet_Item { - mti, ok := pb.(messageTypeIder) - if !ok { - return nil - } - id := mti.MessageTypeId() - for _, item := range ms.Item { - if *item.TypeId == id { - return item - } - } - return nil -} - -func (ms *messageSet) Has(pb Message) bool { - return ms.find(pb) != nil -} - -func (ms *messageSet) Unmarshal(pb Message) error { - if item := ms.find(pb); item != nil { - return Unmarshal(item.Message, pb) - } - if _, ok := pb.(messageTypeIder); !ok { - return errNoMessageTypeID - } - return nil // TODO: return error instead? -} - -func (ms *messageSet) Marshal(pb Message) error { - msg, err := Marshal(pb) - if err != nil { - return err - } - if item := ms.find(pb); item != nil { - // reuse existing item - item.Message = msg - return nil - } - - mti, ok := pb.(messageTypeIder) - if !ok { - return errNoMessageTypeID - } - - mtid := mti.MessageTypeId() - ms.Item = append(ms.Item, &_MessageSet_Item{ - TypeId: &mtid, - Message: msg, - }) - return nil -} - -func (ms *messageSet) Reset() { *ms = messageSet{} } -func (ms *messageSet) String() string { return CompactTextString(ms) } -func (*messageSet) ProtoMessage() {} - -// Support for the message_set_wire_format message option. - -func skipVarint(buf []byte) []byte { - i := 0 - for ; buf[i]&0x80 != 0; i++ { - } - return buf[i+1:] -} - -// MarshalMessageSet encodes the extension map represented by m in the message set wire format. -// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(exts interface{}) ([]byte, error) { - return marshalMessageSet(exts, false) -} - -// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. -func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var u marshalInfo - siz := u.sizeMessageSet(exts) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, exts, deterministic) - - case map[int32]Extension: - // This is an old-style extension map. - // Wrap it in a new-style XXX_InternalExtensions. - ie := XXX_InternalExtensions{ - p: &struct { - mu sync.Mutex - extensionMap map[int32]Extension - }{ - extensionMap: exts, - }, - } - - var u marshalInfo - siz := u.sizeMessageSet(&ie) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, &ie, deterministic) - - default: - return nil, errors.New("proto: not an extension map") - } -} - -// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. -// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, exts interface{}) error { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - m = exts.extensionsWrite() - case map[int32]Extension: - m = exts - default: - return errors.New("proto: not an extension map") - } - - ms := new(messageSet) - if err := Unmarshal(buf, ms); err != nil { - return err - } - for _, item := range ms.Item { - id := *item.TypeId - msg := item.Message - - // Restore wire type and field number varint, plus length varint. - // Be careful to preserve duplicate items. - b := EncodeVarint(uint64(id)<<3 | WireBytes) - if ext, ok := m[id]; ok { - // Existing data; rip off the tag and length varint - // so we join the new data correctly. - // We can assume that ext.enc is set because we are unmarshaling. - o := ext.enc[len(b):] // skip wire type and field number - _, n := DecodeVarint(o) // calculate length of length varint - o = o[n:] // skip length varint - msg = append(o, msg...) // join old data and new data - } - b = append(b, EncodeVarint(uint64(len(msg)))...) - b = append(b, msg...) - - m[id] = Extension{enc: b} - } - return nil -} - -// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. -// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var mu sync.Locker - m, mu = exts.extensionsRead() - if m != nil { - // Keep the extensions map locked until we're done marshaling to prevent - // races between marshaling and unmarshaling the lazily-{en,de}coded - // values. - mu.Lock() - defer mu.Unlock() - } - case map[int32]Extension: - m = exts - default: - return nil, errors.New("proto: not an extension map") - } - var b bytes.Buffer - b.WriteByte('{') - - // Process the map in key order for deterministic output. - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) // int32Slice defined in text.go - - for i, id := range ids { - ext := m[id] - msd, ok := messageSetMap[id] - if !ok { - // Unknown type; we can't render it, so skip it. - continue - } - - if i > 0 && b.Len() > 1 { - b.WriteByte(',') - } - - fmt.Fprintf(&b, `"[%s]":`, msd.name) - - x := ext.value - if x == nil { - x = reflect.New(msd.t.Elem()).Interface() - if err := Unmarshal(ext.enc, x.(Message)); err != nil { - return nil, err - } - } - d, err := json.Marshal(x) - if err != nil { - return nil, err - } - b.Write(d) - } - b.WriteByte('}') - return b.Bytes(), nil -} - -// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. -// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { - // Common-case fast path. - if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { - return nil - } - - // This is fairly tricky, and it's not clear that it is needed. - return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") -} - -// A global registry of types that can be used in a MessageSet. - -var messageSetMap = make(map[int32]messageSetDesc) - -type messageSetDesc struct { - t reflect.Type // pointer to struct - name string -} - -// RegisterMessageSetType is called from the generated code. -func RegisterMessageSetType(m Message, fieldNum int32, name string) { - messageSetMap[fieldNum] = messageSetDesc{ - t: reflect.TypeOf(m), - name: name, - } -} diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go deleted file mode 100644 index b6cad908..00000000 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ /dev/null @@ -1,357 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// +build purego appengine js - -// This file contains an implementation of proto field accesses using package reflect. -// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can -// be used on App Engine. - -package proto - -import ( - "reflect" - "sync" -) - -const unsafeAllowed = false - -// A field identifies a field in a struct, accessible from a pointer. -// In this implementation, a field is identified by the sequence of field indices -// passed to reflect's FieldByIndex. -type field []int - -// toField returns a field equivalent to the given reflect field. -func toField(f *reflect.StructField) field { - return f.Index -} - -// invalidField is an invalid field identifier. -var invalidField = field(nil) - -// zeroField is a noop when calling pointer.offset. -var zeroField = field([]int{}) - -// IsValid reports whether the field identifier is valid. -func (f field) IsValid() bool { return f != nil } - -// The pointer type is for the table-driven decoder. -// The implementation here uses a reflect.Value of pointer type to -// create a generic pointer. In pointer_unsafe.go we use unsafe -// instead of reflect to implement the same (but faster) interface. -type pointer struct { - v reflect.Value -} - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - return pointer{v: reflect.ValueOf(*i)} -} - -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - v := reflect.ValueOf(*i) - u := reflect.New(v.Type()) - u.Elem().Set(v) - return pointer{v: u} -} - -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{v: v} -} - -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} -} - -func (p pointer) isNil() bool { - return p.v.IsNil() -} - -// grow updates the slice s in place to make it one element longer. -// s must be addressable. -// Returns the (addressable) new element. -func grow(s reflect.Value) reflect.Value { - n, m := s.Len(), s.Cap() - if n < m { - s.SetLen(n + 1) - } else { - s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) - } - return s.Index(n) -} - -func (p pointer) toInt64() *int64 { - return p.v.Interface().(*int64) -} -func (p pointer) toInt64Ptr() **int64 { - return p.v.Interface().(**int64) -} -func (p pointer) toInt64Slice() *[]int64 { - return p.v.Interface().(*[]int64) -} - -var int32ptr = reflect.TypeOf((*int32)(nil)) - -func (p pointer) toInt32() *int32 { - return p.v.Convert(int32ptr).Interface().(*int32) -} - -// The toInt32Ptr/Slice methods don't work because of enums. -// Instead, we must use set/get methods for the int32ptr/slice case. -/* - func (p pointer) toInt32Ptr() **int32 { - return p.v.Interface().(**int32) -} - func (p pointer) toInt32Slice() *[]int32 { - return p.v.Interface().(*[]int32) -} -*/ -func (p pointer) getInt32Ptr() *int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().(*int32) - } - // an enum - return p.v.Elem().Convert(int32PtrType).Interface().(*int32) -} -func (p pointer) setInt32Ptr(v int32) { - // Allocate value in a *int32. Possibly convert that to a *enum. - // Then assign it to a **int32 or **enum. - // Note: we can convert *int32 to *enum, but we can't convert - // **int32 to **enum! - p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) -} - -// getInt32Slice copies []int32 from p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getInt32Slice() []int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().([]int32) - } - // an enum - // Allocate a []int32, then assign []enum's values into it. - // Note: we can't convert []enum to []int32. - slice := p.v.Elem() - s := make([]int32, slice.Len()) - for i := 0; i < slice.Len(); i++ { - s[i] = int32(slice.Index(i).Int()) - } - return s -} - -// setInt32Slice copies []int32 into p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setInt32Slice(v []int32) { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - p.v.Elem().Set(reflect.ValueOf(v)) - return - } - // an enum - // Allocate a []enum, then assign []int32's values into it. - // Note: we can't convert []enum to []int32. - slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) - for i, x := range v { - slice.Index(i).SetInt(int64(x)) - } - p.v.Elem().Set(slice) -} -func (p pointer) appendInt32Slice(v int32) { - grow(p.v.Elem()).SetInt(int64(v)) -} - -func (p pointer) toUint64() *uint64 { - return p.v.Interface().(*uint64) -} -func (p pointer) toUint64Ptr() **uint64 { - return p.v.Interface().(**uint64) -} -func (p pointer) toUint64Slice() *[]uint64 { - return p.v.Interface().(*[]uint64) -} -func (p pointer) toUint32() *uint32 { - return p.v.Interface().(*uint32) -} -func (p pointer) toUint32Ptr() **uint32 { - return p.v.Interface().(**uint32) -} -func (p pointer) toUint32Slice() *[]uint32 { - return p.v.Interface().(*[]uint32) -} -func (p pointer) toBool() *bool { - return p.v.Interface().(*bool) -} -func (p pointer) toBoolPtr() **bool { - return p.v.Interface().(**bool) -} -func (p pointer) toBoolSlice() *[]bool { - return p.v.Interface().(*[]bool) -} -func (p pointer) toFloat64() *float64 { - return p.v.Interface().(*float64) -} -func (p pointer) toFloat64Ptr() **float64 { - return p.v.Interface().(**float64) -} -func (p pointer) toFloat64Slice() *[]float64 { - return p.v.Interface().(*[]float64) -} -func (p pointer) toFloat32() *float32 { - return p.v.Interface().(*float32) -} -func (p pointer) toFloat32Ptr() **float32 { - return p.v.Interface().(**float32) -} -func (p pointer) toFloat32Slice() *[]float32 { - return p.v.Interface().(*[]float32) -} -func (p pointer) toString() *string { - return p.v.Interface().(*string) -} -func (p pointer) toStringPtr() **string { - return p.v.Interface().(**string) -} -func (p pointer) toStringSlice() *[]string { - return p.v.Interface().(*[]string) -} -func (p pointer) toBytes() *[]byte { - return p.v.Interface().(*[]byte) -} -func (p pointer) toBytesSlice() *[][]byte { - return p.v.Interface().(*[][]byte) -} -func (p pointer) toExtensions() *XXX_InternalExtensions { - return p.v.Interface().(*XXX_InternalExtensions) -} -func (p pointer) toOldExtensions() *map[int32]Extension { - return p.v.Interface().(*map[int32]Extension) -} -func (p pointer) getPointer() pointer { - return pointer{v: p.v.Elem()} -} -func (p pointer) setPointer(q pointer) { - p.v.Elem().Set(q.v) -} -func (p pointer) appendPointer(q pointer) { - grow(p.v.Elem()).Set(q.v) -} - -// getPointerSlice copies []*T from p as a new []pointer. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getPointerSlice() []pointer { - if p.v.IsNil() { - return nil - } - n := p.v.Elem().Len() - s := make([]pointer, n) - for i := 0; i < n; i++ { - s[i] = pointer{v: p.v.Elem().Index(i)} - } - return s -} - -// setPointerSlice copies []pointer into p as a new []*T. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setPointerSlice(v []pointer) { - if v == nil { - p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) - return - } - s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) - for _, p := range v { - s = reflect.Append(s, p.v) - } - p.v.Elem().Set(s) -} - -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - if p.v.Elem().IsNil() { - return pointer{v: p.v.Elem()} - } - return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct -} - -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - // TODO: check that p.v.Type().Elem() == t? - return p.v -} - -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} - -var atomicLock sync.Mutex diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go deleted file mode 100644 index d55a335d..00000000 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ /dev/null @@ -1,308 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// +build !purego,!appengine,!js - -// This file contains the implementation of the proto field accesses using package unsafe. - -package proto - -import ( - "reflect" - "sync/atomic" - "unsafe" -) - -const unsafeAllowed = true - -// A field identifies a field in a struct, accessible from a pointer. -// In this implementation, a field is identified by its byte offset from the start of the struct. -type field uintptr - -// toField returns a field equivalent to the given reflect field. -func toField(f *reflect.StructField) field { - return field(f.Offset) -} - -// invalidField is an invalid field identifier. -const invalidField = ^field(0) - -// zeroField is a noop when calling pointer.offset. -const zeroField = field(0) - -// IsValid reports whether the field identifier is valid. -func (f field) IsValid() bool { - return f != invalidField -} - -// The pointer type below is for the new table-driven encoder/decoder. -// The implementation here uses unsafe.Pointer to create a generic pointer. -// In pointer_reflect.go we use reflect instead of unsafe to implement -// the same (but slower) interface. -type pointer struct { - p unsafe.Pointer -} - -// size of pointer -var ptrSize = unsafe.Sizeof(uintptr(0)) - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - // Super-tricky - read pointer out of data word of interface value. - // Saves ~25ns over the equivalent: - // return valToPointer(reflect.ValueOf(*i)) - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} -} - -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - // Super-tricky - read or get the address of data word of interface value. - if isptr { - // The interface is of pointer type, thus it is a direct interface. - // The data word is the pointer data itself. We take its address. - return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} - } - // The interface is not of pointer type. The data word is the pointer - // to the data. - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} -} - -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{p: unsafe.Pointer(v.Pointer())} -} - -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - // For safety, we should panic if !f.IsValid, however calling panic causes - // this to no longer be inlineable, which is a serious performance cost. - /* - if !f.IsValid() { - panic("invalid field") - } - */ - return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} -} - -func (p pointer) isNil() bool { - return p.p == nil -} - -func (p pointer) toInt64() *int64 { - return (*int64)(p.p) -} -func (p pointer) toInt64Ptr() **int64 { - return (**int64)(p.p) -} -func (p pointer) toInt64Slice() *[]int64 { - return (*[]int64)(p.p) -} -func (p pointer) toInt32() *int32 { - return (*int32)(p.p) -} - -// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. -/* - func (p pointer) toInt32Ptr() **int32 { - return (**int32)(p.p) - } - func (p pointer) toInt32Slice() *[]int32 { - return (*[]int32)(p.p) - } -*/ -func (p pointer) getInt32Ptr() *int32 { - return *(**int32)(p.p) -} -func (p pointer) setInt32Ptr(v int32) { - *(**int32)(p.p) = &v -} - -// getInt32Slice loads a []int32 from p. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getInt32Slice() []int32 { - return *(*[]int32)(p.p) -} - -// setInt32Slice stores a []int32 to p. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setInt32Slice(v []int32) { - *(*[]int32)(p.p) = v -} - -// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? -func (p pointer) appendInt32Slice(v int32) { - s := (*[]int32)(p.p) - *s = append(*s, v) -} - -func (p pointer) toUint64() *uint64 { - return (*uint64)(p.p) -} -func (p pointer) toUint64Ptr() **uint64 { - return (**uint64)(p.p) -} -func (p pointer) toUint64Slice() *[]uint64 { - return (*[]uint64)(p.p) -} -func (p pointer) toUint32() *uint32 { - return (*uint32)(p.p) -} -func (p pointer) toUint32Ptr() **uint32 { - return (**uint32)(p.p) -} -func (p pointer) toUint32Slice() *[]uint32 { - return (*[]uint32)(p.p) -} -func (p pointer) toBool() *bool { - return (*bool)(p.p) -} -func (p pointer) toBoolPtr() **bool { - return (**bool)(p.p) -} -func (p pointer) toBoolSlice() *[]bool { - return (*[]bool)(p.p) -} -func (p pointer) toFloat64() *float64 { - return (*float64)(p.p) -} -func (p pointer) toFloat64Ptr() **float64 { - return (**float64)(p.p) -} -func (p pointer) toFloat64Slice() *[]float64 { - return (*[]float64)(p.p) -} -func (p pointer) toFloat32() *float32 { - return (*float32)(p.p) -} -func (p pointer) toFloat32Ptr() **float32 { - return (**float32)(p.p) -} -func (p pointer) toFloat32Slice() *[]float32 { - return (*[]float32)(p.p) -} -func (p pointer) toString() *string { - return (*string)(p.p) -} -func (p pointer) toStringPtr() **string { - return (**string)(p.p) -} -func (p pointer) toStringSlice() *[]string { - return (*[]string)(p.p) -} -func (p pointer) toBytes() *[]byte { - return (*[]byte)(p.p) -} -func (p pointer) toBytesSlice() *[][]byte { - return (*[][]byte)(p.p) -} -func (p pointer) toExtensions() *XXX_InternalExtensions { - return (*XXX_InternalExtensions)(p.p) -} -func (p pointer) toOldExtensions() *map[int32]Extension { - return (*map[int32]Extension)(p.p) -} - -// getPointerSlice loads []*T from p as a []pointer. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getPointerSlice() []pointer { - // Super-tricky - p should point to a []*T where T is a - // message type. We load it as []pointer. - return *(*[]pointer)(p.p) -} - -// setPointerSlice stores []pointer into p as a []*T. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setPointerSlice(v []pointer) { - // Super-tricky - p should point to a []*T where T is a - // message type. We store it as []pointer. - *(*[]pointer)(p.p) = v -} - -// getPointer loads the pointer at p and returns it. -func (p pointer) getPointer() pointer { - return pointer{p: *(*unsafe.Pointer)(p.p)} -} - -// setPointer stores the pointer q at p. -func (p pointer) setPointer(q pointer) { - *(*unsafe.Pointer)(p.p) = q.p -} - -// append q to the slice pointed to by p. -func (p pointer) appendPointer(q pointer) { - s := (*[]unsafe.Pointer)(p.p) - *s = append(*s, q.p) -} - -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - // Super-tricky - read pointer out of data word of interface value. - return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} -} - -// asPointerTo returns a reflect.Value that is a pointer to an -// object of type t stored at p. -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - return reflect.NewAt(t, p.p) -} - -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go index 50b99b83..dcdc2202 100644 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -1,163 +1,104 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. package proto -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - import ( "fmt" - "log" - "os" "reflect" - "sort" "strconv" "strings" "sync" + + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoimpl" ) -const debug bool = false - -// Constants that identify the encoding of a value on the wire. -const ( - WireVarint = 0 - WireFixed64 = 1 - WireBytes = 2 - WireStartGroup = 3 - WireEndGroup = 4 - WireFixed32 = 5 -) - -// tagMap is an optimization over map[int]int for typical protocol buffer -// use-cases. Encoded protocol buffers are often in tag order with small tag -// numbers. -type tagMap struct { - fastTags []int - slowTags map[int]int -} - -// tagMapFastLimit is the upper bound on the tag number that will be stored in -// the tagMap slice rather than its map. -const tagMapFastLimit = 1024 - -func (p *tagMap) get(t int) (int, bool) { - if t > 0 && t < tagMapFastLimit { - if t >= len(p.fastTags) { - return 0, false - } - fi := p.fastTags[t] - return fi, fi >= 0 - } - fi, ok := p.slowTags[t] - return fi, ok -} - -func (p *tagMap) put(t int, fi int) { - if t > 0 && t < tagMapFastLimit { - for len(p.fastTags) < t+1 { - p.fastTags = append(p.fastTags, -1) - } - p.fastTags[t] = fi - return - } - if p.slowTags == nil { - p.slowTags = make(map[int]int) - } - p.slowTags[t] = fi -} - -// StructProperties represents properties for all the fields of a struct. -// decoderTags and decoderOrigNames should only be used by the decoder. +// StructProperties represents protocol buffer type information for a +// generated protobuf message in the open-struct API. +// +// Deprecated: Do not use. type StructProperties struct { - Prop []*Properties // properties for each field - reqCount int // required count - decoderTags tagMap // map from proto tag to struct field number - decoderOrigNames map[string]int // map from original name to struct field number - order []int // list of struct field numbers in tag order + // Prop are the properties for each field. + // + // Fields belonging to a oneof are stored in OneofTypes instead, with a + // single Properties representing the parent oneof held here. + // + // The order of Prop matches the order of fields in the Go struct. + // Struct fields that are not related to protobufs have a "XXX_" prefix + // in the Properties.Name and must be ignored by the user. + Prop []*Properties // OneofTypes contains information about the oneof fields in this message. - // It is keyed by the original name of a field. + // It is keyed by the protobuf field name. OneofTypes map[string]*OneofProperties } -// OneofProperties represents information about a specific field in a oneof. -type OneofProperties struct { - Type reflect.Type // pointer to generated struct type for this oneof field - Field int // struct field number of the containing oneof in the message - Prop *Properties -} - -// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. -// See encode.go, (*Buffer).enc_struct. - -func (sp *StructProperties) Len() int { return len(sp.order) } -func (sp *StructProperties) Less(i, j int) bool { - return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag -} -func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } - -// Properties represents the protocol-specific behavior of a single struct field. +// Properties represents the type information for a protobuf message field. +// +// Deprecated: Do not use. type Properties struct { - Name string // name of the field, for error messages - OrigName string // original name before protocol compiler (always set) - JSONName string // name to use for JSON; determined by protoc - Wire string + // Name is a placeholder name with little meaningful semantic value. + // If the name has an "XXX_" prefix, the entire Properties must be ignored. + Name string + // OrigName is the protobuf field name or oneof name. + OrigName string + // JSONName is the JSON name for the protobuf field. + JSONName string + // Enum is a placeholder name for enums. + // For historical reasons, this is neither the Go name for the enum, + // nor the protobuf name for the enum. + Enum string // Deprecated: Do not use. + // Weak contains the full name of the weakly referenced message. + Weak string + // Wire is a string representation of the wire type. + Wire string + // WireType is the protobuf wire type for the field. WireType int - Tag int + // Tag is the protobuf field number. + Tag int + // Required reports whether this is a required field. Required bool + // Optional reports whether this is a optional field. Optional bool + // Repeated reports whether this is a repeated field. Repeated bool - Packed bool // relevant for repeated primitives only - Enum string // set for enum types only - proto3 bool // whether this is known to be a proto3 field - oneof bool // whether this is a oneof field + // Packed reports whether this is a packed repeated field of scalars. + Packed bool + // Proto3 reports whether this field operates under the proto3 syntax. + Proto3 bool + // Oneof reports whether this field belongs within a oneof. + Oneof bool - Default string // default value - HasDefault bool // whether an explicit default was provided + // Default is the default value in string form. + Default string + // HasDefault reports whether the field has a default value. + HasDefault bool - stype reflect.Type // set for struct types only - sprop *StructProperties // set for struct types only + // MapKeyProp is the properties for the key field for a map field. + MapKeyProp *Properties + // MapValProp is the properties for the value field for a map field. + MapValProp *Properties +} - mtype reflect.Type // set for map types only - MapKeyProp *Properties // set for map types only - MapValProp *Properties // set for map types only +// OneofProperties represents the type information for a protobuf oneof. +// +// Deprecated: Do not use. +type OneofProperties struct { + // Type is a pointer to the generated wrapper type for the field value. + // This is nil for messages that are not in the open-struct API. + Type reflect.Type + // Field is the index into StructProperties.Prop for the containing oneof. + Field int + // Prop is the properties for the field. + Prop *Properties } // String formats the properties in the protobuf struct field tag style. func (p *Properties) String() string { s := p.Wire - s += "," - s += strconv.Itoa(p.Tag) + s += "," + strconv.Itoa(p.Tag) if p.Required { s += ",req" } @@ -171,18 +112,21 @@ func (p *Properties) String() string { s += ",packed" } s += ",name=" + p.OrigName - if p.JSONName != p.OrigName { + if p.JSONName != "" { s += ",json=" + p.JSONName } - if p.proto3 { - s += ",proto3" - } - if p.oneof { - s += ",oneof" - } if len(p.Enum) > 0 { s += ",enum=" + p.Enum } + if len(p.Weak) > 0 { + s += ",weak=" + p.Weak + } + if p.Proto3 { + s += ",proto3" + } + if p.Oneof { + s += ",oneof" + } if p.HasDefault { s += ",def=" + p.Default } @@ -190,355 +134,173 @@ func (p *Properties) String() string { } // Parse populates p by parsing a string in the protobuf struct field tag style. -func (p *Properties) Parse(s string) { - // "bytes,49,opt,name=foo,def=hello!" - fields := strings.Split(s, ",") // breaks def=, but handled below. - if len(fields) < 2 { - fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) - return - } - - p.Wire = fields[0] - switch p.Wire { - case "varint": - p.WireType = WireVarint - case "fixed32": - p.WireType = WireFixed32 - case "fixed64": - p.WireType = WireFixed64 - case "zigzag32": - p.WireType = WireVarint - case "zigzag64": - p.WireType = WireVarint - case "bytes", "group": - p.WireType = WireBytes - // no numeric converter for non-numeric types - default: - fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) - return - } - - var err error - p.Tag, err = strconv.Atoi(fields[1]) - if err != nil { - return - } - -outer: - for i := 2; i < len(fields); i++ { - f := fields[i] - switch { - case f == "req": - p.Required = true - case f == "opt": +func (p *Properties) Parse(tag string) { + // For example: "bytes,49,opt,name=foo,def=hello!" + for len(tag) > 0 { + i := strings.IndexByte(tag, ',') + if i < 0 { + i = len(tag) + } + switch s := tag[:i]; { + case strings.HasPrefix(s, "name="): + p.OrigName = s[len("name="):] + case strings.HasPrefix(s, "json="): + p.JSONName = s[len("json="):] + case strings.HasPrefix(s, "enum="): + p.Enum = s[len("enum="):] + case strings.HasPrefix(s, "weak="): + p.Weak = s[len("weak="):] + case strings.Trim(s, "0123456789") == "": + n, _ := strconv.ParseUint(s, 10, 32) + p.Tag = int(n) + case s == "opt": p.Optional = true - case f == "rep": + case s == "req": + p.Required = true + case s == "rep": p.Repeated = true - case f == "packed": + case s == "varint" || s == "zigzag32" || s == "zigzag64": + p.Wire = s + p.WireType = WireVarint + case s == "fixed32": + p.Wire = s + p.WireType = WireFixed32 + case s == "fixed64": + p.Wire = s + p.WireType = WireFixed64 + case s == "bytes": + p.Wire = s + p.WireType = WireBytes + case s == "group": + p.Wire = s + p.WireType = WireStartGroup + case s == "packed": p.Packed = true - case strings.HasPrefix(f, "name="): - p.OrigName = f[5:] - case strings.HasPrefix(f, "json="): - p.JSONName = f[5:] - case strings.HasPrefix(f, "enum="): - p.Enum = f[5:] - case f == "proto3": - p.proto3 = true - case f == "oneof": - p.oneof = true - case strings.HasPrefix(f, "def="): + case s == "proto3": + p.Proto3 = true + case s == "oneof": + p.Oneof = true + case strings.HasPrefix(s, "def="): + // The default tag is special in that everything afterwards is the + // default regardless of the presence of commas. p.HasDefault = true - p.Default = f[4:] // rest of string - if i+1 < len(fields) { - // Commas aren't escaped, and def is always last. - p.Default += "," + strings.Join(fields[i+1:], ",") - break outer - } + p.Default, i = tag[len("def="):], len(tag) } + tag = strings.TrimPrefix(tag[i:], ",") } } -var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() - -// setFieldProps initializes the field properties for submessages and maps. -func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { - switch t1 := typ; t1.Kind() { - case reflect.Ptr: - if t1.Elem().Kind() == reflect.Struct { - p.stype = t1.Elem() - } - - case reflect.Slice: - if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { - p.stype = t2.Elem() - } - - case reflect.Map: - p.mtype = t1 - p.MapKeyProp = &Properties{} - p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) - p.MapValProp = &Properties{} - vtype := p.mtype.Elem() - if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { - // The value type is not a message (*T) or bytes ([]byte), - // so we need encoders for the pointer to this type. - vtype = reflect.PtrTo(vtype) - } - p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) - } - - if p.stype != nil { - if lockGetProp { - p.sprop = GetProperties(p.stype) - } else { - p.sprop = getPropertiesLocked(p.stype) - } - } -} - -var ( - marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() -) - // Init populates the properties from a protocol buffer struct tag. +// +// Deprecated: Do not use. func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { - p.init(typ, name, tag, f, true) -} - -func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { - // "bytes,49,opt,def=hello!" p.Name = name p.OrigName = name if tag == "" { return } p.Parse(tag) - p.setFieldProps(typ, f, lockGetProp) + + if typ != nil && typ.Kind() == reflect.Map { + p.MapKeyProp = new(Properties) + p.MapKeyProp.Init(nil, "Key", f.Tag.Get("protobuf_key"), nil) + p.MapValProp = new(Properties) + p.MapValProp.Init(nil, "Value", f.Tag.Get("protobuf_val"), nil) + } } -var ( - propertiesMu sync.RWMutex - propertiesMap = make(map[reflect.Type]*StructProperties) -) +var propertiesCache sync.Map // map[reflect.Type]*StructProperties -// GetProperties returns the list of properties for the type represented by t. -// t must represent a generated struct type of a protocol message. +// GetProperties returns the list of properties for the type represented by t, +// which must be a generated protocol buffer message in the open-struct API, +// where protobuf message fields are represented by exported Go struct fields. +// +// Deprecated: Use protobuf reflection instead. func GetProperties(t reflect.Type) *StructProperties { - if t.Kind() != reflect.Struct { - panic("proto: type must have kind struct") + if p, ok := propertiesCache.Load(t); ok { + return p.(*StructProperties) } - - // Most calls to GetProperties in a long-running program will be - // retrieving details for types we have seen before. - propertiesMu.RLock() - sprop, ok := propertiesMap[t] - propertiesMu.RUnlock() - if ok { - if collectStats { - stats.Chit++ - } - return sprop - } - - propertiesMu.Lock() - sprop = getPropertiesLocked(t) - propertiesMu.Unlock() - return sprop + p, _ := propertiesCache.LoadOrStore(t, newProperties(t)) + return p.(*StructProperties) } -// getPropertiesLocked requires that propertiesMu is held. -func getPropertiesLocked(t reflect.Type) *StructProperties { - if prop, ok := propertiesMap[t]; ok { - if collectStats { - stats.Chit++ - } - return prop - } - if collectStats { - stats.Cmiss++ +func newProperties(t reflect.Type) *StructProperties { + if t.Kind() != reflect.Struct { + panic(fmt.Sprintf("%v is not a generated message in the open-struct API", t)) } + var hasOneof bool prop := new(StructProperties) - // in case of recursive protos, fill this in now. - propertiesMap[t] = prop - - // build properties - prop.Prop = make([]*Properties, t.NumField()) - prop.order = make([]int, t.NumField()) + // Construct a list of properties for each field in the struct. for i := 0; i < t.NumField(); i++ { - f := t.Field(i) p := new(Properties) - name := f.Name - p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) + f := t.Field(i) + tagField := f.Tag.Get("protobuf") + p.Init(f.Type, f.Name, tagField, &f) - oneof := f.Tag.Get("protobuf_oneof") // special case - if oneof != "" { - // Oneof fields don't use the traditional protobuf tag. - p.OrigName = oneof + tagOneof := f.Tag.Get("protobuf_oneof") + if tagOneof != "" { + hasOneof = true + p.OrigName = tagOneof } - prop.Prop[i] = p - prop.order[i] = i - if debug { - print(i, " ", f.Name, " ", t.String(), " ") - if p.Tag > 0 { - print(p.String()) + + // Rename unrelated struct fields with the "XXX_" prefix since so much + // user code simply checks for this to exclude special fields. + if tagField == "" && tagOneof == "" && !strings.HasPrefix(p.Name, "XXX_") { + p.Name = "XXX_" + p.Name + p.OrigName = "XXX_" + p.OrigName + } else if p.Weak != "" { + p.Name = p.OrigName // avoid possible "XXX_" prefix on weak field + } + + prop.Prop = append(prop.Prop, p) + } + + // Construct a mapping of oneof field names to properties. + if hasOneof { + var oneofWrappers []interface{} + if fn, ok := reflect.PtrTo(t).MethodByName("XXX_OneofFuncs"); ok { + oneofWrappers = fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[3].Interface().([]interface{}) + } + if fn, ok := reflect.PtrTo(t).MethodByName("XXX_OneofWrappers"); ok { + oneofWrappers = fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0].Interface().([]interface{}) + } + if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(protoreflect.ProtoMessage); ok { + if m, ok := m.ProtoReflect().(interface{ ProtoMessageInfo() *protoimpl.MessageInfo }); ok { + oneofWrappers = m.ProtoMessageInfo().OneofWrappers } - print("\n") } - } - // Re-order prop.order. - sort.Sort(prop) - - type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) - } - if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - var oots []interface{} - _, _, _, oots = om.XXX_OneofFuncs() - - // Interpret oneof metadata. prop.OneofTypes = make(map[string]*OneofProperties) - for _, oot := range oots { - oop := &OneofProperties{ - Type: reflect.ValueOf(oot).Type(), // *T + for _, wrapper := range oneofWrappers { + p := &OneofProperties{ + Type: reflect.ValueOf(wrapper).Type(), // *T Prop: new(Properties), } - sft := oop.Type.Elem().Field(0) - oop.Prop.Name = sft.Name - oop.Prop.Parse(sft.Tag.Get("protobuf")) - // There will be exactly one interface field that - // this new value is assignable to. - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if f.Type.Kind() != reflect.Interface { - continue - } - if !oop.Type.AssignableTo(f.Type) { - continue - } - oop.Field = i - break - } - prop.OneofTypes[oop.Prop.OrigName] = oop - } - } + f := p.Type.Elem().Field(0) + p.Prop.Name = f.Name + p.Prop.Parse(f.Tag.Get("protobuf")) - // build required counts - // build tags - reqCount := 0 - prop.decoderOrigNames = make(map[string]int) - for i, p := range prop.Prop { - if strings.HasPrefix(p.Name, "XXX_") { - // Internal fields should not appear in tags/origNames maps. - // They are handled specially when encoding and decoding. - continue + // Determine the struct field that contains this oneof. + // Each wrapper is assignable to exactly one parent field. + var foundOneof bool + for i := 0; i < t.NumField() && !foundOneof; i++ { + if p.Type.AssignableTo(t.Field(i).Type) { + p.Field = i + foundOneof = true + } + } + if !foundOneof { + panic(fmt.Sprintf("%v is not a generated message in the open-struct API", t)) + } + prop.OneofTypes[p.Prop.OrigName] = p } - if p.Required { - reqCount++ - } - prop.decoderTags.put(p.Tag, i) - prop.decoderOrigNames[p.OrigName] = i } - prop.reqCount = reqCount return prop } -// A global registry of enum types. -// The generated code will register the generated maps by calling RegisterEnum. - -var enumValueMaps = make(map[string]map[string]int32) - -// RegisterEnum is called from the generated code to install the enum descriptor -// maps into the global table to aid parsing text format protocol buffers. -func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { - if _, ok := enumValueMaps[typeName]; ok { - panic("proto: duplicate enum registered: " + typeName) - } - enumValueMaps[typeName] = valueMap -} - -// EnumValueMap returns the mapping from names to integers of the -// enum type enumType, or a nil if not found. -func EnumValueMap(enumType string) map[string]int32 { - return enumValueMaps[enumType] -} - -// A registry of all linked message types. -// The string is a fully-qualified proto name ("pkg.Message"). -var ( - protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers - protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types - revProtoTypes = make(map[reflect.Type]string) -) - -// RegisterType is called from generated code and maps from the fully qualified -// proto name to the type (pointer to struct) of the protocol buffer. -func RegisterType(x Message, name string) { - if _, ok := protoTypedNils[name]; ok { - // TODO: Some day, make this a panic. - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { - // Generated code always calls RegisterType with nil x. - // This check is just for extra safety. - protoTypedNils[name] = x - } else { - protoTypedNils[name] = reflect.Zero(t).Interface().(Message) - } - revProtoTypes[t] = name -} - -// RegisterMapType is called from generated code and maps from the fully qualified -// proto name to the native map type of the proto map definition. -func RegisterMapType(x interface{}, name string) { - if reflect.TypeOf(x).Kind() != reflect.Map { - panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) - } - if _, ok := protoMapTypes[name]; ok { - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - protoMapTypes[name] = t - revProtoTypes[t] = name -} - -// MessageName returns the fully-qualified proto name for the given message type. -func MessageName(x Message) string { - type xname interface { - XXX_MessageName() string - } - if m, ok := x.(xname); ok { - return m.XXX_MessageName() - } - return revProtoTypes[reflect.TypeOf(x)] -} - -// MessageType returns the message type (pointer to struct) for a named message. -// The type is not guaranteed to implement proto.Message if the name refers to a -// map entry. -func MessageType(name string) reflect.Type { - if t, ok := protoTypedNils[name]; ok { - return reflect.TypeOf(t) - } - return protoMapTypes[name] -} - -// A registry of all linked proto files. -var ( - protoFiles = make(map[string][]byte) // file name => fileDescriptor -) - -// RegisterFile is called from generated code and maps from the -// full file name of a .proto file to its compressed FileDescriptorProto. -func RegisterFile(filename string, fileDescriptor []byte) { - protoFiles[filename] = fileDescriptor -} - -// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. -func FileDescriptor(filename string) []byte { return protoFiles[filename] } +func (sp *StructProperties) Len() int { return len(sp.Prop) } +func (sp *StructProperties) Less(i, j int) bool { return false } +func (sp *StructProperties) Swap(i, j int) { return } diff --git a/vendor/github.com/golang/protobuf/proto/proto.go b/vendor/github.com/golang/protobuf/proto/proto.go new file mode 100644 index 00000000..5aee89c3 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/proto.go @@ -0,0 +1,167 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package proto provides functionality for handling protocol buffer messages. +// In particular, it provides marshaling and unmarshaling between a protobuf +// message and the binary wire format. +// +// See https://developers.google.com/protocol-buffers/docs/gotutorial for +// more information. +// +// Deprecated: Use the "google.golang.org/protobuf/proto" package instead. +package proto + +import ( + protoV2 "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" + "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + ProtoPackageIsVersion1 = true + ProtoPackageIsVersion2 = true + ProtoPackageIsVersion3 = true + ProtoPackageIsVersion4 = true +) + +// GeneratedEnum is any enum type generated by protoc-gen-go +// which is a named int32 kind. +// This type exists for documentation purposes. +type GeneratedEnum interface{} + +// GeneratedMessage is any message type generated by protoc-gen-go +// which is a pointer to a named struct kind. +// This type exists for documentation purposes. +type GeneratedMessage interface{} + +// Message is a protocol buffer message. +// +// This is the v1 version of the message interface and is marginally better +// than an empty interface as it lacks any method to programatically interact +// with the contents of the message. +// +// A v2 message is declared in "google.golang.org/protobuf/proto".Message and +// exposes protobuf reflection as a first-class feature of the interface. +// +// To convert a v1 message to a v2 message, use the MessageV2 function. +// To convert a v2 message to a v1 message, use the MessageV1 function. +type Message = protoiface.MessageV1 + +// MessageV1 converts either a v1 or v2 message to a v1 message. +// It returns nil if m is nil. +func MessageV1(m GeneratedMessage) protoiface.MessageV1 { + return protoimpl.X.ProtoMessageV1Of(m) +} + +// MessageV2 converts either a v1 or v2 message to a v2 message. +// It returns nil if m is nil. +func MessageV2(m GeneratedMessage) protoV2.Message { + return protoimpl.X.ProtoMessageV2Of(m) +} + +// MessageReflect returns a reflective view for a message. +// It returns nil if m is nil. +func MessageReflect(m Message) protoreflect.Message { + return protoimpl.X.MessageOf(m) +} + +// Marshaler is implemented by messages that can marshal themselves. +// This interface is used by the following functions: Size, Marshal, +// Buffer.Marshal, and Buffer.EncodeMessage. +// +// Deprecated: Do not implement. +type Marshaler interface { + // Marshal formats the encoded bytes of the message. + // It should be deterministic and emit valid protobuf wire data. + // The caller takes ownership of the returned buffer. + Marshal() ([]byte, error) +} + +// Unmarshaler is implemented by messages that can unmarshal themselves. +// This interface is used by the following functions: Unmarshal, UnmarshalMerge, +// Buffer.Unmarshal, Buffer.DecodeMessage, and Buffer.DecodeGroup. +// +// Deprecated: Do not implement. +type Unmarshaler interface { + // Unmarshal parses the encoded bytes of the protobuf wire input. + // The provided buffer is only valid for during method call. + // It should not reset the receiver message. + Unmarshal([]byte) error +} + +// Merger is implemented by messages that can merge themselves. +// This interface is used by the following functions: Clone and Merge. +// +// Deprecated: Do not implement. +type Merger interface { + // Merge merges the contents of src into the receiver message. + // It clones all data structures in src such that it aliases no mutable + // memory referenced by src. + Merge(src Message) +} + +// RequiredNotSetError is an error type returned when +// marshaling or unmarshaling a message with missing required fields. +type RequiredNotSetError struct { + err error +} + +func (e *RequiredNotSetError) Error() string { + if e.err != nil { + return e.err.Error() + } + return "proto: required field not set" +} +func (e *RequiredNotSetError) RequiredNotSet() bool { + return true +} + +func checkRequiredNotSet(m protoV2.Message) error { + if err := protoV2.CheckInitialized(m); err != nil { + return &RequiredNotSetError{err: err} + } + return nil +} + +// Clone returns a deep copy of src. +func Clone(src Message) Message { + return MessageV1(protoV2.Clone(MessageV2(src))) +} + +// Merge merges src into dst, which must be messages of the same type. +// +// Populated scalar fields in src are copied to dst, while populated +// singular messages in src are merged into dst by recursively calling Merge. +// The elements of every list field in src is appended to the corresponded +// list fields in dst. The entries of every map field in src is copied into +// the corresponding map field in dst, possibly replacing existing entries. +// The unknown fields of src are appended to the unknown fields of dst. +func Merge(dst, src Message) { + protoV2.Merge(MessageV2(dst), MessageV2(src)) +} + +// Equal reports whether two messages are equal. +// If two messages marshal to the same bytes under deterministic serialization, +// then Equal is guaranteed to report true. +// +// Two messages are equal if they are the same protobuf message type, +// have the same set of populated known and extension field values, +// and the same set of unknown fields values. +// +// Scalar values are compared with the equivalent of the == operator in Go, +// except bytes values which are compared using bytes.Equal and +// floating point values which specially treat NaNs as equal. +// Message values are compared by recursively calling Equal. +// Lists are equal if each element value is also equal. +// Maps are equal if they have the same set of keys, where the pair of values +// for each key is also equal. +func Equal(x, y Message) bool { + return protoV2.Equal(MessageV2(x), MessageV2(y)) +} + +func isMessageSet(md protoreflect.MessageDescriptor) bool { + ms, ok := md.(interface{ IsMessageSet() bool }) + return ok && ms.IsMessageSet() +} diff --git a/vendor/github.com/golang/protobuf/proto/registry.go b/vendor/github.com/golang/protobuf/proto/registry.go new file mode 100644 index 00000000..abab110a --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/registry.go @@ -0,0 +1,323 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "bytes" + "compress/gzip" + "fmt" + "io/ioutil" + "reflect" + "strings" + "sync" + + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoimpl" +) + +// filePath is the path to the proto source file. +type filePath = string // e.g., "google/protobuf/descriptor.proto" + +// fileDescGZIP is the compressed contents of the encoded FileDescriptorProto. +type fileDescGZIP = []byte + +var fileCache sync.Map // map[filePath]fileDescGZIP + +// RegisterFile is called from generated code to register the compressed +// FileDescriptorProto with the file path for a proto source file. +// +// Deprecated: Use protoregistry.GlobalFiles.Register instead. +func RegisterFile(s filePath, d fileDescGZIP) { + // Decompress the descriptor. + zr, err := gzip.NewReader(bytes.NewReader(d)) + if err != nil { + panic(fmt.Sprintf("proto: invalid compressed file descriptor: %v", err)) + } + b, err := ioutil.ReadAll(zr) + if err != nil { + panic(fmt.Sprintf("proto: invalid compressed file descriptor: %v", err)) + } + + // Construct a protoreflect.FileDescriptor from the raw descriptor. + // Note that DescBuilder.Build automatically registers the constructed + // file descriptor with the v2 registry. + protoimpl.DescBuilder{RawDescriptor: b}.Build() + + // Locally cache the raw descriptor form for the file. + fileCache.Store(s, d) +} + +// FileDescriptor returns the compressed FileDescriptorProto given the file path +// for a proto source file. It returns nil if not found. +// +// Deprecated: Use protoregistry.GlobalFiles.RangeFilesByPath instead. +func FileDescriptor(s filePath) fileDescGZIP { + if v, ok := fileCache.Load(s); ok { + return v.(fileDescGZIP) + } + + // Find the descriptor in the v2 registry. + var b []byte + if fd, _ := protoregistry.GlobalFiles.FindFileByPath(s); fd != nil { + if fd, ok := fd.(interface{ ProtoLegacyRawDesc() []byte }); ok { + b = fd.ProtoLegacyRawDesc() + } else { + // TODO: Use protodesc.ToFileDescriptorProto to construct + // a descriptorpb.FileDescriptorProto and marshal it. + // However, doing so causes the proto package to have a dependency + // on descriptorpb, leading to cyclic dependency issues. + } + } + + // Locally cache the raw descriptor form for the file. + if len(b) > 0 { + v, _ := fileCache.LoadOrStore(s, protoimpl.X.CompressGZIP(b)) + return v.(fileDescGZIP) + } + return nil +} + +// enumName is the name of an enum. For historical reasons, the enum name is +// neither the full Go name nor the full protobuf name of the enum. +// The name is the dot-separated combination of just the proto package that the +// enum is declared within followed by the Go type name of the generated enum. +type enumName = string // e.g., "my.proto.package.GoMessage_GoEnum" + +// enumsByName maps enum values by name to their numeric counterpart. +type enumsByName = map[string]int32 + +// enumsByNumber maps enum values by number to their name counterpart. +type enumsByNumber = map[int32]string + +var enumCache sync.Map // map[enumName]enumsByName +var numFilesCache sync.Map // map[protoreflect.FullName]int + +// RegisterEnum is called from the generated code to register the mapping of +// enum value names to enum numbers for the enum identified by s. +// +// Deprecated: Use protoregistry.GlobalTypes.Register instead. +func RegisterEnum(s enumName, _ enumsByNumber, m enumsByName) { + if _, ok := enumCache.Load(s); ok { + panic("proto: duplicate enum registered: " + s) + } + enumCache.Store(s, m) + + // This does not forward registration to the v2 registry since this API + // lacks sufficient information to construct a complete v2 enum descriptor. +} + +// EnumValueMap returns the mapping from enum value names to enum numbers for +// the enum of the given name. It returns nil if not found. +// +// Deprecated: Use protoregistry.GlobalTypes.FindEnumByName instead. +func EnumValueMap(s enumName) enumsByName { + if v, ok := enumCache.Load(s); ok { + return v.(enumsByName) + } + + // Check whether the cache is stale. If the number of files in the current + // package differs, then it means that some enums may have been recently + // registered upstream that we do not know about. + var protoPkg protoreflect.FullName + if i := strings.LastIndexByte(s, '.'); i >= 0 { + protoPkg = protoreflect.FullName(s[:i]) + } + v, _ := numFilesCache.Load(protoPkg) + numFiles, _ := v.(int) + if protoregistry.GlobalFiles.NumFilesByPackage(protoPkg) == numFiles { + return nil // cache is up-to-date; was not found earlier + } + + // Update the enum cache for all enums declared in the given proto package. + numFiles = 0 + protoregistry.GlobalFiles.RangeFilesByPackage(protoPkg, func(fd protoreflect.FileDescriptor) bool { + walkEnums(fd, func(ed protoreflect.EnumDescriptor) { + name := protoimpl.X.LegacyEnumName(ed) + if _, ok := enumCache.Load(name); !ok { + m := make(enumsByName) + evs := ed.Values() + for i := evs.Len() - 1; i >= 0; i-- { + ev := evs.Get(i) + m[string(ev.Name())] = int32(ev.Number()) + } + enumCache.LoadOrStore(name, m) + } + }) + numFiles++ + return true + }) + numFilesCache.Store(protoPkg, numFiles) + + // Check cache again for enum map. + if v, ok := enumCache.Load(s); ok { + return v.(enumsByName) + } + return nil +} + +// walkEnums recursively walks all enums declared in d. +func walkEnums(d interface { + Enums() protoreflect.EnumDescriptors + Messages() protoreflect.MessageDescriptors +}, f func(protoreflect.EnumDescriptor)) { + eds := d.Enums() + for i := eds.Len() - 1; i >= 0; i-- { + f(eds.Get(i)) + } + mds := d.Messages() + for i := mds.Len() - 1; i >= 0; i-- { + walkEnums(mds.Get(i), f) + } +} + +// messageName is the full name of protobuf message. +type messageName = string + +var messageTypeCache sync.Map // map[messageName]reflect.Type + +// RegisterType is called from generated code to register the message Go type +// for a message of the given name. +// +// Deprecated: Use protoregistry.GlobalTypes.Register instead. +func RegisterType(m Message, s messageName) { + mt := protoimpl.X.LegacyMessageTypeOf(m, protoreflect.FullName(s)) + if err := protoregistry.GlobalTypes.RegisterMessage(mt); err != nil { + panic(err) + } + messageTypeCache.Store(s, reflect.TypeOf(m)) +} + +// RegisterMapType is called from generated code to register the Go map type +// for a protobuf message representing a map entry. +// +// Deprecated: Do not use. +func RegisterMapType(m interface{}, s messageName) { + t := reflect.TypeOf(m) + if t.Kind() != reflect.Map { + panic(fmt.Sprintf("invalid map kind: %v", t)) + } + if _, ok := messageTypeCache.Load(s); ok { + panic(fmt.Errorf("proto: duplicate proto message registered: %s", s)) + } + messageTypeCache.Store(s, t) +} + +// MessageType returns the message type for a named message. +// It returns nil if not found. +// +// Deprecated: Use protoregistry.GlobalTypes.FindMessageByName instead. +func MessageType(s messageName) reflect.Type { + if v, ok := messageTypeCache.Load(s); ok { + return v.(reflect.Type) + } + + // Derive the message type from the v2 registry. + var t reflect.Type + if mt, _ := protoregistry.GlobalTypes.FindMessageByName(protoreflect.FullName(s)); mt != nil { + t = messageGoType(mt) + } + + // If we could not get a concrete type, it is possible that it is a + // pseudo-message for a map entry. + if t == nil { + d, _ := protoregistry.GlobalFiles.FindDescriptorByName(protoreflect.FullName(s)) + if md, _ := d.(protoreflect.MessageDescriptor); md != nil && md.IsMapEntry() { + kt := goTypeForField(md.Fields().ByNumber(1)) + vt := goTypeForField(md.Fields().ByNumber(2)) + t = reflect.MapOf(kt, vt) + } + } + + // Locally cache the message type for the given name. + if t != nil { + v, _ := messageTypeCache.LoadOrStore(s, t) + return v.(reflect.Type) + } + return nil +} + +func goTypeForField(fd protoreflect.FieldDescriptor) reflect.Type { + switch k := fd.Kind(); k { + case protoreflect.EnumKind: + if et, _ := protoregistry.GlobalTypes.FindEnumByName(fd.Enum().FullName()); et != nil { + return enumGoType(et) + } + return reflect.TypeOf(protoreflect.EnumNumber(0)) + case protoreflect.MessageKind, protoreflect.GroupKind: + if mt, _ := protoregistry.GlobalTypes.FindMessageByName(fd.Message().FullName()); mt != nil { + return messageGoType(mt) + } + return reflect.TypeOf((*protoreflect.Message)(nil)).Elem() + default: + return reflect.TypeOf(fd.Default().Interface()) + } +} + +func enumGoType(et protoreflect.EnumType) reflect.Type { + return reflect.TypeOf(et.New(0)) +} + +func messageGoType(mt protoreflect.MessageType) reflect.Type { + return reflect.TypeOf(MessageV1(mt.Zero().Interface())) +} + +// MessageName returns the full protobuf name for the given message type. +// +// Deprecated: Use protoreflect.MessageDescriptor.FullName instead. +func MessageName(m Message) messageName { + if m == nil { + return "" + } + if m, ok := m.(interface{ XXX_MessageName() messageName }); ok { + return m.XXX_MessageName() + } + return messageName(protoimpl.X.MessageDescriptorOf(m).FullName()) +} + +// RegisterExtension is called from the generated code to register +// the extension descriptor. +// +// Deprecated: Use protoregistry.GlobalTypes.Register instead. +func RegisterExtension(d *ExtensionDesc) { + if err := protoregistry.GlobalTypes.RegisterExtension(d); err != nil { + panic(err) + } +} + +type extensionsByNumber = map[int32]*ExtensionDesc + +var extensionCache sync.Map // map[messageName]extensionsByNumber + +// RegisteredExtensions returns a map of the registered extensions for the +// provided protobuf message, indexed by the extension field number. +// +// Deprecated: Use protoregistry.GlobalTypes.RangeExtensionsByMessage instead. +func RegisteredExtensions(m Message) extensionsByNumber { + // Check whether the cache is stale. If the number of extensions for + // the given message differs, then it means that some extensions were + // recently registered upstream that we do not know about. + s := MessageName(m) + v, _ := extensionCache.Load(s) + xs, _ := v.(extensionsByNumber) + if protoregistry.GlobalTypes.NumExtensionsByMessage(protoreflect.FullName(s)) == len(xs) { + return xs // cache is up-to-date + } + + // Cache is stale, re-compute the extensions map. + xs = make(extensionsByNumber) + protoregistry.GlobalTypes.RangeExtensionsByMessage(protoreflect.FullName(s), func(xt protoreflect.ExtensionType) bool { + if xd, ok := xt.(*ExtensionDesc); ok { + xs[int32(xt.TypeDescriptor().Number())] = xd + } else { + // TODO: This implies that the protoreflect.ExtensionType is a + // custom type not generated by protoc-gen-go. We could try and + // convert the type to an ExtensionDesc. + } + return true + }) + extensionCache.Store(s, xs) + return xs +} diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go deleted file mode 100644 index b1679449..00000000 --- a/vendor/github.com/golang/protobuf/proto/table_marshal.go +++ /dev/null @@ -1,2767 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "errors" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// a sizer takes a pointer to a field and the size of its tag, computes the size of -// the encoded data. -type sizer func(pointer, int) int - -// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), -// marshals the field to the end of the slice, returns the slice and error (if any). -type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) - -// marshalInfo is the information used for marshaling a message. -type marshalInfo struct { - typ reflect.Type - fields []*marshalFieldInfo - unrecognized field // offset of XXX_unrecognized - extensions field // offset of XXX_InternalExtensions - v1extensions field // offset of XXX_extensions - sizecache field // offset of XXX_sizecache - initialized int32 // 0 -- only typ is set, 1 -- fully initialized - messageset bool // uses message set wire format - hasmarshaler bool // has custom marshaler - sync.RWMutex // protect extElems map, also for initialization - extElems map[int32]*marshalElemInfo // info of extension elements -} - -// marshalFieldInfo is the information used for marshaling a field of a message. -type marshalFieldInfo struct { - field field - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isPointer bool - required bool // field is required - name string // name of the field, for error reporting - oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements -} - -// marshalElemInfo is the information used for marshaling an extension or oneof element. -type marshalElemInfo struct { - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) -} - -var ( - marshalInfoMap = map[reflect.Type]*marshalInfo{} - marshalInfoLock sync.Mutex -) - -// getMarshalInfo returns the information to marshal a given type of message. -// The info it returns may not necessarily initialized. -// t is the type of the message (NOT the pointer to it). -func getMarshalInfo(t reflect.Type) *marshalInfo { - marshalInfoLock.Lock() - u, ok := marshalInfoMap[t] - if !ok { - u = &marshalInfo{typ: t} - marshalInfoMap[t] = u - } - marshalInfoLock.Unlock() - return u -} - -// Size is the entry point from generated code, -// and should be ONLY called by generated code. -// It computes the size of encoded data of msg. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Size(msg Message) int { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return 0 - } - return u.size(ptr) -} - -// Marshal is the entry point from generated code, -// and should be ONLY called by generated code. -// It marshals msg to the end of b. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return b, ErrNil - } - return u.marshal(b, ptr, deterministic) -} - -func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { - // u := a.marshal, but atomically. - // We use an atomic here to ensure memory consistency. - u := atomicLoadMarshalInfo(&a.marshal) - if u == nil { - // Get marshal information from type of message. - t := reflect.ValueOf(msg).Type() - if t.Kind() != reflect.Ptr { - panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) - } - u = getMarshalInfo(t.Elem()) - // Store it in the cache for later users. - // a.marshal = u, but atomically. - atomicStoreMarshalInfo(&a.marshal, u) - } - return u -} - -// size is the main function to compute the size of the encoded data of a message. -// ptr is the pointer to the message. -func (u *marshalInfo) size(ptr pointer) int { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b, _ := m.Marshal() - return len(b) - } - - n := 0 - for _, f := range u.fields { - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - n += f.sizer(ptr.offset(f.field), f.tagsize) - } - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - n += u.sizeMessageSet(e) - } else { - n += u.sizeExtensions(e) - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - n += u.sizeV1Extensions(m) - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - n += len(s) - } - // cache the result for use in marshal - if u.sizecache.IsValid() { - atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) - } - return n -} - -// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), -// fall back to compute the size. -func (u *marshalInfo) cachedsize(ptr pointer) int { - if u.sizecache.IsValid() { - return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) - } - return u.size(ptr) -} - -// marshal is the main function to marshal a message. It takes a byte slice and appends -// the encoded data to the end of the slice, returns the slice and error (if any). -// ptr is the pointer to the message. -// If deterministic is true, map is marshaled in deterministic order. -func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b1, err := m.Marshal() - b = append(b, b1...) - return b, err - } - - var err, errLater error - // The old marshaler encodes extensions at beginning. - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - b, err = u.appendMessageSet(b, e, deterministic) - } else { - b, err = u.appendExtensions(b, e, deterministic) - } - if err != nil { - return b, err - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - b, err = u.appendV1Extensions(b, m, deterministic) - if err != nil { - return b, err - } - } - for _, f := range u.fields { - if f.required { - if ptr.offset(f.field).getPointer().isNil() { - // Required field is not set. - // We record the error but keep going, to give a complete marshaling. - if errLater == nil { - errLater = &RequiredNotSetError{f.name} - } - continue - } - } - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) - if err != nil { - if err1, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errLater == nil { - errLater = &RequiredNotSetError{f.name + "." + err1.field} - } - continue - } - if err == errRepeatedHasNil { - err = errors.New("proto: repeated field " + f.name + " has nil element") - } - if err == errInvalidUTF8 { - if errLater == nil { - fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name - errLater = &invalidUTF8Error{fullName} - } - continue - } - return b, err - } - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - b = append(b, s...) - } - return b, errLater -} - -// computeMarshalInfo initializes the marshal info. -func (u *marshalInfo) computeMarshalInfo() { - u.Lock() - defer u.Unlock() - if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock - return - } - - t := u.typ - u.unrecognized = invalidField - u.extensions = invalidField - u.v1extensions = invalidField - u.sizecache = invalidField - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if reflect.PtrTo(t).Implements(marshalerType) { - u.hasmarshaler = true - atomic.StoreInt32(&u.initialized, 1) - return - } - - // get oneof implementers - var oneofImplementers []interface{} - if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - _, _, _, oneofImplementers = m.XXX_OneofFuncs() - } - - n := t.NumField() - - // deal with XXX fields first - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if !strings.HasPrefix(f.Name, "XXX_") { - continue - } - switch f.Name { - case "XXX_sizecache": - u.sizecache = toField(&f) - case "XXX_unrecognized": - u.unrecognized = toField(&f) - case "XXX_InternalExtensions": - u.extensions = toField(&f) - u.messageset = f.Tag.Get("protobuf_messageset") == "1" - case "XXX_extensions": - u.v1extensions = toField(&f) - case "XXX_NoUnkeyedLiteral": - // nothing to do - default: - panic("unknown XXX field: " + f.Name) - } - n-- - } - - // normal fields - fields := make([]marshalFieldInfo, n) // batch allocation - u.fields = make([]*marshalFieldInfo, 0, n) - for i, j := 0, 0; i < t.NumField(); i++ { - f := t.Field(i) - - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - field := &fields[j] - j++ - field.name = f.Name - u.fields = append(u.fields, field) - if f.Tag.Get("protobuf_oneof") != "" { - field.computeOneofFieldInfo(&f, oneofImplementers) - continue - } - if f.Tag.Get("protobuf") == "" { - // field has no tag (not in generated message), ignore it - u.fields = u.fields[:len(u.fields)-1] - j-- - continue - } - field.computeMarshalFieldInfo(&f) - } - - // fields are marshaled in tag order on the wire. - sort.Sort(byTag(u.fields)) - - atomic.StoreInt32(&u.initialized, 1) -} - -// helper for sorting fields by tag -type byTag []*marshalFieldInfo - -func (a byTag) Len() int { return len(a) } -func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } - -// getExtElemInfo returns the information to marshal an extension element. -// The info it returns is initialized. -func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { - // get from cache first - u.RLock() - e, ok := u.extElems[desc.Field] - u.RUnlock() - if ok { - return e - } - - t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct - tags := strings.Split(desc.Tag, ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(t, tags, false, false) - e = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - isptr: t.Kind() == reflect.Ptr, - } - - // update cache - u.Lock() - if u.extElems == nil { - u.extElems = make(map[int32]*marshalElemInfo) - } - u.extElems[desc.Field] = e - u.Unlock() - return e -} - -// computeMarshalFieldInfo fills up the information to marshal a field. -func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { - // parse protobuf tag of the field. - // tag has format of "bytes,49,opt,name=foo,def=hello!" - tags := strings.Split(f.Tag.Get("protobuf"), ",") - if tags[0] == "" { - return - } - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - if tags[2] == "req" { - fi.required = true - } - fi.setTag(f, tag, wt) - fi.setMarshaler(f, tags) -} - -func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { - fi.field = toField(f) - fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. - fi.isPointer = true - fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) - fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) - - ityp := f.Type // interface type - for _, o := range oneofImplementers { - t := reflect.TypeOf(o) - if !t.Implements(ityp) { - continue - } - sf := t.Elem().Field(0) // oneof implementer is a struct with a single field - tags := strings.Split(sf.Tag.Get("protobuf"), ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value - fi.oneofElems[t.Elem()] = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - } - } -} - -type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) -} - -// wiretype returns the wire encoding of the type. -func wiretype(encoding string) uint64 { - switch encoding { - case "fixed32": - return WireFixed32 - case "fixed64": - return WireFixed64 - case "varint", "zigzag32", "zigzag64": - return WireVarint - case "bytes": - return WireBytes - case "group": - return WireStartGroup - } - panic("unknown wire type " + encoding) -} - -// setTag fills up the tag (in wire format) and its size in the info of a field. -func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { - fi.field = toField(f) - fi.wiretag = uint64(tag)<<3 | wt - fi.tagsize = SizeVarint(uint64(tag) << 3) -} - -// setMarshaler fills up the sizer and marshaler in the info of a field. -func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { - switch f.Type.Kind() { - case reflect.Map: - // map field - fi.isPointer = true - fi.sizer, fi.marshaler = makeMapMarshaler(f) - return - case reflect.Ptr, reflect.Slice: - fi.isPointer = true - } - fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) -} - -// typeMarshaler returns the sizer and marshaler of a given field. -// t is the type of the field. -// tags is the generated "protobuf" tag of the field. -// If nozero is true, zero value is not marshaled to the wire. -// If oneof is true, it is a oneof field. -func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { - encoding := tags[0] - - pointer := false - slice := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - packed := false - proto3 := false - validateUTF8 := true - for i := 2; i < len(tags); i++ { - if tags[i] == "packed" { - packed = true - } - if tags[i] == "proto3" { - proto3 = true - } - } - validateUTF8 = validateUTF8 && proto3 - - switch t.Kind() { - case reflect.Bool: - if pointer { - return sizeBoolPtr, appendBoolPtr - } - if slice { - if packed { - return sizeBoolPackedSlice, appendBoolPackedSlice - } - return sizeBoolSlice, appendBoolSlice - } - if nozero { - return sizeBoolValueNoZero, appendBoolValueNoZero - } - return sizeBoolValue, appendBoolValue - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixed32Ptr, appendFixed32Ptr - } - if slice { - if packed { - return sizeFixed32PackedSlice, appendFixed32PackedSlice - } - return sizeFixed32Slice, appendFixed32Slice - } - if nozero { - return sizeFixed32ValueNoZero, appendFixed32ValueNoZero - } - return sizeFixed32Value, appendFixed32Value - case "varint": - if pointer { - return sizeVarint32Ptr, appendVarint32Ptr - } - if slice { - if packed { - return sizeVarint32PackedSlice, appendVarint32PackedSlice - } - return sizeVarint32Slice, appendVarint32Slice - } - if nozero { - return sizeVarint32ValueNoZero, appendVarint32ValueNoZero - } - return sizeVarint32Value, appendVarint32Value - } - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixedS32Ptr, appendFixedS32Ptr - } - if slice { - if packed { - return sizeFixedS32PackedSlice, appendFixedS32PackedSlice - } - return sizeFixedS32Slice, appendFixedS32Slice - } - if nozero { - return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero - } - return sizeFixedS32Value, appendFixedS32Value - case "varint": - if pointer { - return sizeVarintS32Ptr, appendVarintS32Ptr - } - if slice { - if packed { - return sizeVarintS32PackedSlice, appendVarintS32PackedSlice - } - return sizeVarintS32Slice, appendVarintS32Slice - } - if nozero { - return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero - } - return sizeVarintS32Value, appendVarintS32Value - case "zigzag32": - if pointer { - return sizeZigzag32Ptr, appendZigzag32Ptr - } - if slice { - if packed { - return sizeZigzag32PackedSlice, appendZigzag32PackedSlice - } - return sizeZigzag32Slice, appendZigzag32Slice - } - if nozero { - return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero - } - return sizeZigzag32Value, appendZigzag32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixed64Ptr, appendFixed64Ptr - } - if slice { - if packed { - return sizeFixed64PackedSlice, appendFixed64PackedSlice - } - return sizeFixed64Slice, appendFixed64Slice - } - if nozero { - return sizeFixed64ValueNoZero, appendFixed64ValueNoZero - } - return sizeFixed64Value, appendFixed64Value - case "varint": - if pointer { - return sizeVarint64Ptr, appendVarint64Ptr - } - if slice { - if packed { - return sizeVarint64PackedSlice, appendVarint64PackedSlice - } - return sizeVarint64Slice, appendVarint64Slice - } - if nozero { - return sizeVarint64ValueNoZero, appendVarint64ValueNoZero - } - return sizeVarint64Value, appendVarint64Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixedS64Ptr, appendFixedS64Ptr - } - if slice { - if packed { - return sizeFixedS64PackedSlice, appendFixedS64PackedSlice - } - return sizeFixedS64Slice, appendFixedS64Slice - } - if nozero { - return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero - } - return sizeFixedS64Value, appendFixedS64Value - case "varint": - if pointer { - return sizeVarintS64Ptr, appendVarintS64Ptr - } - if slice { - if packed { - return sizeVarintS64PackedSlice, appendVarintS64PackedSlice - } - return sizeVarintS64Slice, appendVarintS64Slice - } - if nozero { - return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero - } - return sizeVarintS64Value, appendVarintS64Value - case "zigzag64": - if pointer { - return sizeZigzag64Ptr, appendZigzag64Ptr - } - if slice { - if packed { - return sizeZigzag64PackedSlice, appendZigzag64PackedSlice - } - return sizeZigzag64Slice, appendZigzag64Slice - } - if nozero { - return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero - } - return sizeZigzag64Value, appendZigzag64Value - } - case reflect.Float32: - if pointer { - return sizeFloat32Ptr, appendFloat32Ptr - } - if slice { - if packed { - return sizeFloat32PackedSlice, appendFloat32PackedSlice - } - return sizeFloat32Slice, appendFloat32Slice - } - if nozero { - return sizeFloat32ValueNoZero, appendFloat32ValueNoZero - } - return sizeFloat32Value, appendFloat32Value - case reflect.Float64: - if pointer { - return sizeFloat64Ptr, appendFloat64Ptr - } - if slice { - if packed { - return sizeFloat64PackedSlice, appendFloat64PackedSlice - } - return sizeFloat64Slice, appendFloat64Slice - } - if nozero { - return sizeFloat64ValueNoZero, appendFloat64ValueNoZero - } - return sizeFloat64Value, appendFloat64Value - case reflect.String: - if validateUTF8 { - if pointer { - return sizeStringPtr, appendUTF8StringPtr - } - if slice { - return sizeStringSlice, appendUTF8StringSlice - } - if nozero { - return sizeStringValueNoZero, appendUTF8StringValueNoZero - } - return sizeStringValue, appendUTF8StringValue - } - if pointer { - return sizeStringPtr, appendStringPtr - } - if slice { - return sizeStringSlice, appendStringSlice - } - if nozero { - return sizeStringValueNoZero, appendStringValueNoZero - } - return sizeStringValue, appendStringValue - case reflect.Slice: - if slice { - return sizeBytesSlice, appendBytesSlice - } - if oneof { - // Oneof bytes field may also have "proto3" tag. - // We want to marshal it as a oneof field. Do this - // check before the proto3 check. - return sizeBytesOneof, appendBytesOneof - } - if proto3 { - return sizeBytes3, appendBytes3 - } - return sizeBytes, appendBytes - case reflect.Struct: - switch encoding { - case "group": - if slice { - return makeGroupSliceMarshaler(getMarshalInfo(t)) - } - return makeGroupMarshaler(getMarshalInfo(t)) - case "bytes": - if slice { - return makeMessageSliceMarshaler(getMarshalInfo(t)) - } - return makeMessageMarshaler(getMarshalInfo(t)) - } - } - panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) -} - -// Below are functions to size/marshal a specific type of a field. -// They are stored in the field's info, and called by function pointers. -// They have type sizer or marshaler. - -func sizeFixed32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixedS32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFloat32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - return (4 + tagsize) * len(s) -} -func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixed64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFixedS64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFloat64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - return (8 + tagsize) * len(s) -} -func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeVarint32Value(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarint32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarint64Value(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - return SizeVarint(v) + tagsize -} -func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return SizeVarint(v) + tagsize -} -func sizeVarint64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return SizeVarint(*p) + tagsize -} -func sizeVarint64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(v) + tagsize - } - return n -} -func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize - } - return n -} -func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize - } - return n -} -func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeBoolValue(_ pointer, tagsize int) int { - return 1 + tagsize -} -func sizeBoolValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toBool() - if !v { - return 0 - } - return 1 + tagsize -} -func sizeBoolPtr(ptr pointer, tagsize int) int { - p := *ptr.toBoolPtr() - if p == nil { - return 0 - } - return 1 + tagsize -} -func sizeBoolSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - return (1 + tagsize) * len(s) -} -func sizeBoolPackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return 0 - } - return len(s) + SizeVarint(uint64(len(s))) + tagsize -} -func sizeStringValue(ptr pointer, tagsize int) int { - v := *ptr.toString() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toString() - if v == "" { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringPtr(ptr pointer, tagsize int) int { - p := *ptr.toStringPtr() - if p == nil { - return 0 - } - v := *p - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringSlice(ptr pointer, tagsize int) int { - s := *ptr.toStringSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} -func sizeBytes(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if v == nil { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytes3(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if len(v) == 0 { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesOneof(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesSlice(ptr pointer, tagsize int) int { - s := *ptr.toBytesSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} - -// appendFixed32 appends an encoded fixed32 to b. -func appendFixed32(b []byte, v uint32) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24)) - return b -} - -// appendFixed64 appends an encoded fixed64 to b. -func appendFixed64(b []byte, v uint64) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24), - byte(v>>32), - byte(v>>40), - byte(v>>48), - byte(v>>56)) - return b -} - -// appendVarint appends an encoded varint to b. -func appendVarint(b []byte, v uint64) []byte { - // TODO: make 1-byte (maybe 2-byte) case inline-able, once we - // have non-leaf inliner. - switch { - case v < 1<<7: - b = append(b, byte(v)) - case v < 1<<14: - b = append(b, - byte(v&0x7f|0x80), - byte(v>>7)) - case v < 1<<21: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte(v>>14)) - case v < 1<<28: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte(v>>21)) - case v < 1<<35: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte(v>>28)) - case v < 1<<42: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte(v>>35)) - case v < 1<<49: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte(v>>42)) - case v < 1<<56: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte(v>>49)) - case v < 1<<63: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte(v>>56)) - default: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte((v>>56)&0x7f|0x80), - 1) - } - return b -} - -func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, *p) - return b, nil -} -func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(*p)) - return b, nil -} -func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(*p)) - return b, nil -} -func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, *p) - return b, nil -} -func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(*p)) - return b, nil -} -func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(*p)) - return b, nil -} -func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, *p) - return b, nil -} -func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - } - return b, nil -} -func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, v) - } - return b, nil -} -func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - if !v { - return b, nil - } - b = appendVarint(b, wiretag) - b = append(b, 1) - return b, nil -} - -func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toBoolPtr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - if *p { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(len(s))) - for _, v := range s { - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - if v == "" { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toStringPtr() - if p == nil { - return b, nil - } - v := *p - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toStringSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} -func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - v := *ptr.toString() - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - v := *ptr.toString() - if v == "" { - return b, nil - } - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - p := *ptr.toStringPtr() - if p == nil { - return b, nil - } - v := *p - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - s := *ptr.toStringSlice() - for _, v := range s { - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if v == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if len(v) == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBytesSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} - -// makeGroupMarshaler returns the sizer and marshaler for a group. -// u is the marshal info of the underlying message. -func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - return u.size(p) + 2*tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - var err error - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, p, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - return b, err - } -} - -// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. -// u is the marshal info of the underlying message. -func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - n += u.size(v) + 2*tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err error - var nerr nonFatal - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, v, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - if !nerr.Merge(err) { - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, nerr.E - } -} - -// makeMessageMarshaler returns the sizer and marshaler for a message field. -// u is the marshal info of the message. -func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - siz := u.size(p) - return siz + SizeVarint(uint64(siz)) + tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(p) - b = appendVarint(b, uint64(siz)) - return u.marshal(b, p, deterministic) - } -} - -// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. -// u is the marshal info of the message. -func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - siz := u.size(v) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err error - var nerr nonFatal - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(v) - b = appendVarint(b, uint64(siz)) - b, err = u.marshal(b, v, deterministic) - - if !nerr.Merge(err) { - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, nerr.E - } -} - -// makeMapMarshaler returns the sizer and marshaler for a map field. -// f is the pointer to the reflect data structure of the field. -func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { - // figure out key and value type - t := f.Type - keyType := t.Key() - valType := t.Elem() - keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") - valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") - keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map - valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map - keyWireTag := 1<<3 | wiretype(keyTags[0]) - valWireTag := 2<<3 | wiretype(valTags[0]) - - // We create an interface to get the addresses of the map key and value. - // If value is pointer-typed, the interface is a direct interface, the - // idata itself is the value. Otherwise, the idata is the pointer to the - // value. - // Key cannot be pointer-typed. - valIsPtr := valType.Kind() == reflect.Ptr - - // If value is a message with nested maps, calling - // valSizer in marshal may be quadratic. We should use - // cached version in marshal (but not in size). - // If value is not message type, we don't have size cache, - // but it cannot be nested either. Just use valSizer. - valCachedSizer := valSizer - if valIsPtr && valType.Elem().Kind() == reflect.Struct { - u := getMarshalInfo(valType.Elem()) - valCachedSizer = func(ptr pointer, tagsize int) int { - // Same as message sizer, but use cache. - p := ptr.getPointer() - if p.isNil() { - return 0 - } - siz := u.cachedsize(p) - return siz + SizeVarint(uint64(siz)) + tagsize - } - } - return func(ptr pointer, tagsize int) int { - m := ptr.asPointerTo(t).Elem() // the map - n := 0 - for _, k := range m.MapKeys() { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { - m := ptr.asPointerTo(t).Elem() // the map - var err error - keys := m.MapKeys() - if len(keys) > 1 && deterministic { - sort.Sort(mapKeys(keys)) - } - - var nerr nonFatal - for _, k := range keys { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - b = appendVarint(b, tag) - siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - b = appendVarint(b, uint64(siz)) - b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) - if !nerr.Merge(err) { - return b, err - } - b, err = valMarshaler(b, vaddr, valWireTag, deterministic) - if err != ErrNil && !nerr.Merge(err) { // allow nil value in map - return b, err - } - } - return b, nerr.E - } -} - -// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. -// fi is the marshal info of the field. -// f is the pointer to the reflect data structure of the field. -func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { - // Oneof field is an interface. We need to get the actual data type on the fly. - t := f.Type - return func(ptr pointer, _ int) int { - p := ptr.getInterfacePointer() - if p.isNil() { - return 0 - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - e := fi.oneofElems[telem] - return e.sizer(p, e.tagsize) - }, - func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { - p := ptr.getInterfacePointer() - if p.isNil() { - return b, nil - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { - return b, errOneofHasNil - } - e := fi.oneofElems[telem] - return e.marshaler(b, p, e.wiretag, deterministic) - } -} - -// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. -func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - mu.Unlock() - return n -} - -// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. -func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - var nerr nonFatal - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E - } - - // Sort the keys to provide a deterministic encoding. - // Not sure this is required, but the old code does it. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E -} - -// message set format is: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } - -// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field -// in message set format (above). -func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for id, e := range m { - n += 2 // start group, end group. tag = 1 (size=1) - n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - siz := len(msgWithLen) - n += siz + 1 // message, tag = 3 (size=1) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, 1) // message, tag = 3 (size=1) - } - mu.Unlock() - return n -} - -// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) -// to the end of byte slice b. -func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - var nerr nonFatal - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for id, e := range m { - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - if !nerr.Merge(err) { - return b, err - } - b = append(b, 1<<3|WireEndGroup) - } - return b, nerr.E - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, id := range keys { - e := m[int32(id)] - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - b = append(b, 1<<3|WireEndGroup) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E -} - -// sizeV1Extensions computes the size of encoded data for a V1-API extension field. -func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { - if m == nil { - return 0 - } - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - return n -} - -// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. -func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { - if m == nil { - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - var err error - var nerr nonFatal - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E -} - -// newMarshaler is the interface representing objects that can marshal themselves. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newMarshaler interface { - XXX_Size() int - XXX_Marshal(b []byte, deterministic bool) ([]byte, error) -} - -// Size returns the encoded size of a protocol buffer message. -// This is the main entry point. -func Size(pb Message) int { - if m, ok := pb.(newMarshaler); ok { - return m.XXX_Size() - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, _ := m.Marshal() - return len(b) - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return 0 - } - var info InternalMessageInfo - return info.Size(pb) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, returning the data. -// This is the main entry point. -func Marshal(pb Message) ([]byte, error) { - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - b := make([]byte, 0, siz) - return m.XXX_Marshal(b, false) - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - return m.Marshal() - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return nil, ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - b := make([]byte, 0, siz) - return info.Marshal(b, pb, false) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, writing the result to the -// Buffer. -// This is an alternative entry point. It is not necessary to use -// a Buffer for most applications. -func (p *Buffer) Marshal(pb Message) error { - var err error - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - p.grow(siz) // make sure buf has enough capacity - p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) - return err - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, err := m.Marshal() - p.buf = append(p.buf, b...) - return err - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - p.grow(siz) // make sure buf has enough capacity - p.buf, err = info.Marshal(p.buf, pb, p.deterministic) - return err -} - -// grow grows the buffer's capacity, if necessary, to guarantee space for -// another n bytes. After grow(n), at least n bytes can be written to the -// buffer without another allocation. -func (p *Buffer) grow(n int) { - need := len(p.buf) + n - if need <= cap(p.buf) { - return - } - newCap := len(p.buf) * 2 - if newCap < need { - newCap = need - } - p.buf = append(make([]byte, 0, newCap), p.buf...) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go deleted file mode 100644 index 5525def6..00000000 --- a/vendor/github.com/golang/protobuf/proto/table_merge.go +++ /dev/null @@ -1,654 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -// Merge merges the src message into dst. -// This assumes that dst and src of the same type and are non-nil. -func (a *InternalMessageInfo) Merge(dst, src Message) { - mi := atomicLoadMergeInfo(&a.merge) - if mi == nil { - mi = getMergeInfo(reflect.TypeOf(dst).Elem()) - atomicStoreMergeInfo(&a.merge, mi) - } - mi.merge(toPointer(&dst), toPointer(&src)) -} - -type mergeInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []mergeFieldInfo - unrecognized field // Offset of XXX_unrecognized -} - -type mergeFieldInfo struct { - field field // Offset of field, guaranteed to be valid - - // isPointer reports whether the value in the field is a pointer. - // This is true for the following situations: - // * Pointer to struct - // * Pointer to basic type (proto2 only) - // * Slice (first value in slice header is a pointer) - // * String (first value in string header is a pointer) - isPointer bool - - // basicWidth reports the width of the field assuming that it is directly - // embedded in the struct (as is the case for basic types in proto3). - // The possible values are: - // 0: invalid - // 1: bool - // 4: int32, uint32, float32 - // 8: int64, uint64, float64 - basicWidth int - - // Where dst and src are pointers to the types being merged. - merge func(dst, src pointer) -} - -var ( - mergeInfoMap = map[reflect.Type]*mergeInfo{} - mergeInfoLock sync.Mutex -) - -func getMergeInfo(t reflect.Type) *mergeInfo { - mergeInfoLock.Lock() - defer mergeInfoLock.Unlock() - mi := mergeInfoMap[t] - if mi == nil { - mi = &mergeInfo{typ: t} - mergeInfoMap[t] = mi - } - return mi -} - -// merge merges src into dst assuming they are both of type *mi.typ. -func (mi *mergeInfo) merge(dst, src pointer) { - if dst.isNil() { - panic("proto: nil destination") - } - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&mi.initialized) == 0 { - mi.computeMergeInfo() - } - - for _, fi := range mi.fields { - sfp := src.offset(fi.field) - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string - continue - } - if fi.basicWidth > 0 { - switch { - case fi.basicWidth == 1 && !*sfp.toBool(): - continue - case fi.basicWidth == 4 && *sfp.toUint32() == 0: - continue - case fi.basicWidth == 8 && *sfp.toUint64() == 0: - continue - } - } - } - - dfp := dst.offset(fi.field) - fi.merge(dfp, sfp) - } - - // TODO: Make this faster? - out := dst.asPointerTo(mi.typ).Elem() - in := src.asPointerTo(mi.typ).Elem() - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - if mi.unrecognized.IsValid() { - if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { - *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) - } - } -} - -func (mi *mergeInfo) computeMergeInfo() { - mi.lock.Lock() - defer mi.lock.Unlock() - if mi.initialized != 0 { - return - } - t := mi.typ - n := t.NumField() - - props := GetProperties(t) - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - mfi := mergeFieldInfo{field: toField(&f)} - tf := f.Type - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - switch tf.Kind() { - case reflect.Ptr, reflect.Slice, reflect.String: - // As a special case, we assume slices and strings are pointers - // since we know that the first field in the SliceSlice or - // StringHeader is a data pointer. - mfi.isPointer = true - case reflect.Bool: - mfi.basicWidth = 1 - case reflect.Int32, reflect.Uint32, reflect.Float32: - mfi.basicWidth = 4 - case reflect.Int64, reflect.Uint64, reflect.Float64: - mfi.basicWidth = 8 - } - } - - // Unwrap tf to get at its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + tf.Name()) - } - - switch tf.Kind() { - case reflect.Int32: - switch { - case isSlice: // E.g., []int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Slice is not defined (see pointer_reflect.go). - /* - sfsp := src.toInt32Slice() - if *sfsp != nil { - dfsp := dst.toInt32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - */ - sfs := src.getInt32Slice() - if sfs != nil { - dfs := dst.getInt32Slice() - dfs = append(dfs, sfs...) - if dfs == nil { - dfs = []int32{} - } - dst.setInt32Slice(dfs) - } - } - case isPointer: // E.g., *int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). - /* - sfpp := src.toInt32Ptr() - if *sfpp != nil { - dfpp := dst.toInt32Ptr() - if *dfpp == nil { - *dfpp = Int32(**sfpp) - } else { - **dfpp = **sfpp - } - } - */ - sfp := src.getInt32Ptr() - if sfp != nil { - dfp := dst.getInt32Ptr() - if dfp == nil { - dst.setInt32Ptr(*sfp) - } else { - *dfp = *sfp - } - } - } - default: // E.g., int32 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt32(); v != 0 { - *dst.toInt32() = v - } - } - } - case reflect.Int64: - switch { - case isSlice: // E.g., []int64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toInt64Slice() - if *sfsp != nil { - dfsp := dst.toInt64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - } - case isPointer: // E.g., *int64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toInt64Ptr() - if *sfpp != nil { - dfpp := dst.toInt64Ptr() - if *dfpp == nil { - *dfpp = Int64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., int64 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt64(); v != 0 { - *dst.toInt64() = v - } - } - } - case reflect.Uint32: - switch { - case isSlice: // E.g., []uint32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint32Slice() - if *sfsp != nil { - dfsp := dst.toUint32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint32{} - } - } - } - case isPointer: // E.g., *uint32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint32Ptr() - if *sfpp != nil { - dfpp := dst.toUint32Ptr() - if *dfpp == nil { - *dfpp = Uint32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint32 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint32(); v != 0 { - *dst.toUint32() = v - } - } - } - case reflect.Uint64: - switch { - case isSlice: // E.g., []uint64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint64Slice() - if *sfsp != nil { - dfsp := dst.toUint64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint64{} - } - } - } - case isPointer: // E.g., *uint64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint64Ptr() - if *sfpp != nil { - dfpp := dst.toUint64Ptr() - if *dfpp == nil { - *dfpp = Uint64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint64 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint64(); v != 0 { - *dst.toUint64() = v - } - } - } - case reflect.Float32: - switch { - case isSlice: // E.g., []float32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat32Slice() - if *sfsp != nil { - dfsp := dst.toFloat32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float32{} - } - } - } - case isPointer: // E.g., *float32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat32Ptr() - if *sfpp != nil { - dfpp := dst.toFloat32Ptr() - if *dfpp == nil { - *dfpp = Float32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float32 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat32(); v != 0 { - *dst.toFloat32() = v - } - } - } - case reflect.Float64: - switch { - case isSlice: // E.g., []float64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat64Slice() - if *sfsp != nil { - dfsp := dst.toFloat64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float64{} - } - } - } - case isPointer: // E.g., *float64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat64Ptr() - if *sfpp != nil { - dfpp := dst.toFloat64Ptr() - if *dfpp == nil { - *dfpp = Float64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float64 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat64(); v != 0 { - *dst.toFloat64() = v - } - } - } - case reflect.Bool: - switch { - case isSlice: // E.g., []bool - mfi.merge = func(dst, src pointer) { - sfsp := src.toBoolSlice() - if *sfsp != nil { - dfsp := dst.toBoolSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []bool{} - } - } - } - case isPointer: // E.g., *bool - mfi.merge = func(dst, src pointer) { - sfpp := src.toBoolPtr() - if *sfpp != nil { - dfpp := dst.toBoolPtr() - if *dfpp == nil { - *dfpp = Bool(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., bool - mfi.merge = func(dst, src pointer) { - if v := *src.toBool(); v { - *dst.toBool() = v - } - } - } - case reflect.String: - switch { - case isSlice: // E.g., []string - mfi.merge = func(dst, src pointer) { - sfsp := src.toStringSlice() - if *sfsp != nil { - dfsp := dst.toStringSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []string{} - } - } - } - case isPointer: // E.g., *string - mfi.merge = func(dst, src pointer) { - sfpp := src.toStringPtr() - if *sfpp != nil { - dfpp := dst.toStringPtr() - if *dfpp == nil { - *dfpp = String(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., string - mfi.merge = func(dst, src pointer) { - if v := *src.toString(); v != "" { - *dst.toString() = v - } - } - } - case reflect.Slice: - isProto3 := props.Prop[i].proto3 - switch { - case isPointer: - panic("bad pointer in byte slice case in " + tf.Name()) - case tf.Elem().Kind() != reflect.Uint8: - panic("bad element kind in byte slice case in " + tf.Name()) - case isSlice: // E.g., [][]byte - mfi.merge = func(dst, src pointer) { - sbsp := src.toBytesSlice() - if *sbsp != nil { - dbsp := dst.toBytesSlice() - for _, sb := range *sbsp { - if sb == nil { - *dbsp = append(*dbsp, nil) - } else { - *dbsp = append(*dbsp, append([]byte{}, sb...)) - } - } - if *dbsp == nil { - *dbsp = [][]byte{} - } - } - } - default: // E.g., []byte - mfi.merge = func(dst, src pointer) { - sbp := src.toBytes() - if *sbp != nil { - dbp := dst.toBytes() - if !isProto3 || len(*sbp) > 0 { - *dbp = append([]byte{}, *sbp...) - } - } - } - } - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("message field %s without pointer", tf)) - case isSlice: // E.g., []*pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sps := src.getPointerSlice() - if sps != nil { - dps := dst.getPointerSlice() - for _, sp := range sps { - var dp pointer - if !sp.isNil() { - dp = valToPointer(reflect.New(tf)) - mi.merge(dp, sp) - } - dps = append(dps, dp) - } - if dps == nil { - dps = []pointer{} - } - dst.setPointerSlice(dps) - } - } - default: // E.g., *pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sp := src.getPointer() - if !sp.isNil() { - dp := dst.getPointer() - if dp.isNil() { - dp = valToPointer(reflect.New(tf)) - dst.setPointer(dp) - } - mi.merge(dp, sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic("bad pointer or slice in map case in " + tf.Name()) - default: // E.g., map[K]V - mfi.merge = func(dst, src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - dm := dst.asPointerTo(tf).Elem() - if dm.IsNil() { - dm.Set(reflect.MakeMap(tf)) - } - - switch tf.Elem().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(Clone(val.Interface().(Message))) - dm.SetMapIndex(key, val) - } - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - dm.SetMapIndex(key, val) - } - default: // Basic type (e.g., string) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - dm.SetMapIndex(key, val) - } - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic("bad pointer or slice in interface case in " + tf.Name()) - default: // E.g., interface{} - // TODO: Make this faster? - mfi.merge = func(dst, src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - du := dst.asPointerTo(tf).Elem() - typ := su.Elem().Type() - if du.IsNil() || du.Elem().Type() != typ { - du.Set(reflect.New(typ.Elem())) // Initialize interface if empty - } - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - dv := du.Elem().Elem().Field(0) - if dv.Kind() == reflect.Ptr && dv.IsNil() { - dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - Merge(dv.Interface().(Message), sv.Interface().(Message)) - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) - default: // Basic type (e.g., string) - dv.Set(sv) - } - } - } - } - default: - panic(fmt.Sprintf("merger not found for type:%s", tf)) - } - mi.fields = append(mi.fields, mfi) - } - - mi.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - mi.unrecognized = toField(&f) - } - - atomic.StoreInt32(&mi.initialized, 1) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go deleted file mode 100644 index ebf1caa5..00000000 --- a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go +++ /dev/null @@ -1,2051 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "errors" - "fmt" - "io" - "math" - "reflect" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// Unmarshal is the entry point from the generated .pb.go files. -// This function is not intended to be used by non-generated code. -// This function is not subject to any compatibility guarantee. -// msg contains a pointer to a protocol buffer struct. -// b is the data to be unmarshaled into the protocol buffer. -// a is a pointer to a place to store cached unmarshal information. -func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { - // Load the unmarshal information for this message type. - // The atomic load ensures memory consistency. - u := atomicLoadUnmarshalInfo(&a.unmarshal) - if u == nil { - // Slow path: find unmarshal info for msg, update a with it. - u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) - atomicStoreUnmarshalInfo(&a.unmarshal, u) - } - // Then do the unmarshaling. - err := u.unmarshal(toPointer(&msg), b) - return err -} - -type unmarshalInfo struct { - typ reflect.Type // type of the protobuf struct - - // 0 = only typ field is initialized - // 1 = completely initialized - initialized int32 - lock sync.Mutex // prevents double initialization - dense []unmarshalFieldInfo // fields indexed by tag # - sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # - reqFields []string // names of required fields - reqMask uint64 // 1< 0 { - // Read tag and wire type. - // Special case 1 and 2 byte varints. - var x uint64 - if b[0] < 128 { - x = uint64(b[0]) - b = b[1:] - } else if len(b) >= 2 && b[1] < 128 { - x = uint64(b[0]&0x7f) + uint64(b[1])<<7 - b = b[2:] - } else { - var n int - x, n = decodeVarint(b) - if n == 0 { - return io.ErrUnexpectedEOF - } - b = b[n:] - } - tag := x >> 3 - wire := int(x) & 7 - - // Dispatch on the tag to one of the unmarshal* functions below. - var f unmarshalFieldInfo - if tag < uint64(len(u.dense)) { - f = u.dense[tag] - } else { - f = u.sparse[tag] - } - if fn := f.unmarshal; fn != nil { - var err error - b, err = fn(b, m.offset(f.field), wire) - if err == nil { - reqMask |= f.reqMask - continue - } - if r, ok := err.(*RequiredNotSetError); ok { - // Remember this error, but keep parsing. We need to produce - // a full parse even if a required field is missing. - if errLater == nil { - errLater = r - } - reqMask |= f.reqMask - continue - } - if err != errInternalBadWireType { - if err == errInvalidUTF8 { - if errLater == nil { - fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name - errLater = &invalidUTF8Error{fullName} - } - continue - } - return err - } - // Fragments with bad wire type are treated as unknown fields. - } - - // Unknown tag. - if !u.unrecognized.IsValid() { - // Don't keep unrecognized data; just skip it. - var err error - b, err = skipField(b, wire) - if err != nil { - return err - } - continue - } - // Keep unrecognized data around. - // maybe in extensions, maybe in the unrecognized field. - z := m.offset(u.unrecognized).toBytes() - var emap map[int32]Extension - var e Extension - for _, r := range u.extensionRanges { - if uint64(r.Start) <= tag && tag <= uint64(r.End) { - if u.extensions.IsValid() { - mp := m.offset(u.extensions).toExtensions() - emap = mp.extensionsWrite() - e = emap[int32(tag)] - z = &e.enc - break - } - if u.oldExtensions.IsValid() { - p := m.offset(u.oldExtensions).toOldExtensions() - emap = *p - if emap == nil { - emap = map[int32]Extension{} - *p = emap - } - e = emap[int32(tag)] - z = &e.enc - break - } - panic("no extensions field available") - } - } - - // Use wire type to skip data. - var err error - b0 := b - b, err = skipField(b, wire) - if err != nil { - return err - } - *z = encodeVarint(*z, tag<<3|uint64(wire)) - *z = append(*z, b0[:len(b0)-len(b)]...) - - if emap != nil { - emap[int32(tag)] = e - } - } - if reqMask != u.reqMask && errLater == nil { - // A required field of this message is missing. - for _, n := range u.reqFields { - if reqMask&1 == 0 { - errLater = &RequiredNotSetError{n} - } - reqMask >>= 1 - } - } - return errLater -} - -// computeUnmarshalInfo fills in u with information for use -// in unmarshaling protocol buffers of type u.typ. -func (u *unmarshalInfo) computeUnmarshalInfo() { - u.lock.Lock() - defer u.lock.Unlock() - if u.initialized != 0 { - return - } - t := u.typ - n := t.NumField() - - // Set up the "not found" value for the unrecognized byte buffer. - // This is the default for proto3. - u.unrecognized = invalidField - u.extensions = invalidField - u.oldExtensions = invalidField - - // List of the generated type and offset for each oneof field. - type oneofField struct { - ityp reflect.Type // interface type of oneof field - field field // offset in containing message - } - var oneofFields []oneofField - - for i := 0; i < n; i++ { - f := t.Field(i) - if f.Name == "XXX_unrecognized" { - // The byte slice used to hold unrecognized input is special. - if f.Type != reflect.TypeOf(([]byte)(nil)) { - panic("bad type for XXX_unrecognized field: " + f.Type.Name()) - } - u.unrecognized = toField(&f) - continue - } - if f.Name == "XXX_InternalExtensions" { - // Ditto here. - if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { - panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) - } - u.extensions = toField(&f) - if f.Tag.Get("protobuf_messageset") == "1" { - u.isMessageSet = true - } - continue - } - if f.Name == "XXX_extensions" { - // An older form of the extensions field. - if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { - panic("bad type for XXX_extensions field: " + f.Type.Name()) - } - u.oldExtensions = toField(&f) - continue - } - if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { - continue - } - - oneof := f.Tag.Get("protobuf_oneof") - if oneof != "" { - oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) - // The rest of oneof processing happens below. - continue - } - - tags := f.Tag.Get("protobuf") - tagArray := strings.Split(tags, ",") - if len(tagArray) < 2 { - panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) - } - tag, err := strconv.Atoi(tagArray[1]) - if err != nil { - panic("protobuf tag field not an integer: " + tagArray[1]) - } - - name := "" - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - } - - // Extract unmarshaling function from the field (its type and tags). - unmarshal := fieldUnmarshaler(&f) - - // Required field? - var reqMask uint64 - if tagArray[2] == "req" { - bit := len(u.reqFields) - u.reqFields = append(u.reqFields, name) - reqMask = uint64(1) << uint(bit) - // TODO: if we have more than 64 required fields, we end up - // not verifying that all required fields are present. - // Fix this, perhaps using a count of required fields? - } - - // Store the info in the correct slot in the message. - u.setTag(tag, toField(&f), unmarshal, reqMask, name) - } - - // Find any types associated with oneof fields. - // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it? - fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs") - if fn.IsValid() { - res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{} - for i := res.Len() - 1; i >= 0; i-- { - v := res.Index(i) // interface{} - tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X - typ := tptr.Elem() // Msg_X - - f := typ.Field(0) // oneof implementers have one field - baseUnmarshal := fieldUnmarshaler(&f) - tags := strings.Split(f.Tag.Get("protobuf"), ",") - fieldNum, err := strconv.Atoi(tags[1]) - if err != nil { - panic("protobuf tag field not an integer: " + tags[1]) - } - var name string - for _, tag := range tags { - if strings.HasPrefix(tag, "name=") { - name = strings.TrimPrefix(tag, "name=") - break - } - } - - // Find the oneof field that this struct implements. - // Might take O(n^2) to process all of the oneofs, but who cares. - for _, of := range oneofFields { - if tptr.Implements(of.ityp) { - // We have found the corresponding interface for this struct. - // That lets us know where this struct should be stored - // when we encounter it during unmarshaling. - unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) - u.setTag(fieldNum, of.field, unmarshal, 0, name) - } - } - } - } - - // Get extension ranges, if any. - fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") - if fn.IsValid() { - if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { - panic("a message with extensions, but no extensions field in " + t.Name()) - } - u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) - } - - // Explicitly disallow tag 0. This will ensure we flag an error - // when decoding a buffer of all zeros. Without this code, we - // would decode and skip an all-zero buffer of even length. - // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. - u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { - return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) - }, 0, "") - - // Set mask for required field check. - u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? - for len(u.dense) <= tag { - u.dense = append(u.dense, unmarshalFieldInfo{}) - } - u.dense[tag] = i - return - } - if u.sparse == nil { - u.sparse = map[uint64]unmarshalFieldInfo{} - } - u.sparse[uint64(tag)] = i -} - -// fieldUnmarshaler returns an unmarshaler for the given field. -func fieldUnmarshaler(f *reflect.StructField) unmarshaler { - if f.Type.Kind() == reflect.Map { - return makeUnmarshalMap(f) - } - return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) -} - -// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. -func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { - tagArray := strings.Split(tags, ",") - encoding := tagArray[0] - name := "unknown" - proto3 := false - validateUTF8 := true - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - if tag == "proto3" { - proto3 = true - } - } - validateUTF8 = validateUTF8 && proto3 - - // Figure out packaging (pointer, slice, or both) - slice := false - pointer := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - // We'll never have both pointer and slice for basic types. - if pointer && slice && t.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + t.Name()) - } - - switch t.Kind() { - case reflect.Bool: - if pointer { - return unmarshalBoolPtr - } - if slice { - return unmarshalBoolSlice - } - return unmarshalBoolValue - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixedS32Ptr - } - if slice { - return unmarshalFixedS32Slice - } - return unmarshalFixedS32Value - case "varint": - // this could be int32 or enum - if pointer { - return unmarshalInt32Ptr - } - if slice { - return unmarshalInt32Slice - } - return unmarshalInt32Value - case "zigzag32": - if pointer { - return unmarshalSint32Ptr - } - if slice { - return unmarshalSint32Slice - } - return unmarshalSint32Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixedS64Ptr - } - if slice { - return unmarshalFixedS64Slice - } - return unmarshalFixedS64Value - case "varint": - if pointer { - return unmarshalInt64Ptr - } - if slice { - return unmarshalInt64Slice - } - return unmarshalInt64Value - case "zigzag64": - if pointer { - return unmarshalSint64Ptr - } - if slice { - return unmarshalSint64Slice - } - return unmarshalSint64Value - } - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixed32Ptr - } - if slice { - return unmarshalFixed32Slice - } - return unmarshalFixed32Value - case "varint": - if pointer { - return unmarshalUint32Ptr - } - if slice { - return unmarshalUint32Slice - } - return unmarshalUint32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixed64Ptr - } - if slice { - return unmarshalFixed64Slice - } - return unmarshalFixed64Value - case "varint": - if pointer { - return unmarshalUint64Ptr - } - if slice { - return unmarshalUint64Slice - } - return unmarshalUint64Value - } - case reflect.Float32: - if pointer { - return unmarshalFloat32Ptr - } - if slice { - return unmarshalFloat32Slice - } - return unmarshalFloat32Value - case reflect.Float64: - if pointer { - return unmarshalFloat64Ptr - } - if slice { - return unmarshalFloat64Slice - } - return unmarshalFloat64Value - case reflect.Map: - panic("map type in typeUnmarshaler in " + t.Name()) - case reflect.Slice: - if pointer { - panic("bad pointer in slice case in " + t.Name()) - } - if slice { - return unmarshalBytesSlice - } - return unmarshalBytesValue - case reflect.String: - if validateUTF8 { - if pointer { - return unmarshalUTF8StringPtr - } - if slice { - return unmarshalUTF8StringSlice - } - return unmarshalUTF8StringValue - } - if pointer { - return unmarshalStringPtr - } - if slice { - return unmarshalStringSlice - } - return unmarshalStringValue - case reflect.Struct: - // message or group field - if !pointer { - panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) - } - switch encoding { - case "bytes": - if slice { - return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) - case "group": - if slice { - return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) - } - } - panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) -} - -// Below are all the unmarshalers for individual fields of various types. - -func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64() = v - return b, nil -} - -func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64() = v - return b, nil -} - -func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64() = v - return b, nil -} - -func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64Ptr() = &v - return b, nil -} - -func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - *f.toInt32() = v - return b, nil -} - -func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - *f.toInt32() = v - return b, nil -} - -func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32() = v - return b, nil -} - -func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32Ptr() = &v - return b, nil -} - -func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64() = v - return b[8:], nil -} - -func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64() = v - return b[8:], nil -} - -func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32() = v - return b[4:], nil -} - -func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32Ptr() = &v - return b[4:], nil -} - -func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - *f.toInt32() = v - return b[4:], nil -} - -func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.setInt32Ptr(v) - return b[4:], nil -} - -func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - return b[4:], nil -} - -func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - // Note: any length varint is allowed, even though any sane - // encoder will use one byte. - // See https://github.com/golang/protobuf/issues/76 - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - // TODO: check if x>1? Tests seem to indicate no. - v := x != 0 - *f.toBool() = v - return b[n:], nil -} - -func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - *f.toBoolPtr() = &v - return b[n:], nil -} - -func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - b = b[n:] - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - return b[n:], nil -} - -func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64() = v - return b[8:], nil -} - -func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64Ptr() = &v - return b[8:], nil -} - -func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32() = v - return b[4:], nil -} - -func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32Ptr() = &v - return b[4:], nil -} - -func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toString() = v - return b[x:], nil -} - -func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toStringPtr() = &v - return b[x:], nil -} - -func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - s := f.toStringSlice() - *s = append(*s, v) - return b[x:], nil -} - -func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toString() = v - if !utf8.ValidString(v) { - return b[x:], errInvalidUTF8 - } - return b[x:], nil -} - -func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toStringPtr() = &v - if !utf8.ValidString(v) { - return b[x:], errInvalidUTF8 - } - return b[x:], nil -} - -func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - s := f.toStringSlice() - *s = append(*s, v) - if !utf8.ValidString(v) { - return b[x:], errInvalidUTF8 - } - return b[x:], nil -} - -var emptyBuf [0]byte - -func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // The use of append here is a trick which avoids the zeroing - // that would be required if we used a make/copy pair. - // We append to emptyBuf instead of nil because we want - // a non-nil result even when the length is 0. - v := append(emptyBuf[:], b[:x]...) - *f.toBytes() = v - return b[x:], nil -} - -func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := append(emptyBuf[:], b[:x]...) - s := f.toBytesSlice() - *s = append(*s, v) - return b[x:], nil -} - -func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // First read the message field to see if something is there. - // The semantics of multiple submessages are weird. Instead of - // the last one winning (as it is for all other fields), multiple - // submessages are merged. - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[x:], err - } -} - -func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[x:], err - } -} - -func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[y:], err - } -} - -func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[y:], err - } -} - -func makeUnmarshalMap(f *reflect.StructField) unmarshaler { - t := f.Type - kt := t.Key() - vt := t.Elem() - unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) - unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) - return func(b []byte, f pointer, w int) ([]byte, error) { - // The map entry is a submessage. Figure out how big it is. - if w != WireBytes { - return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - r := b[x:] // unused data to return - b = b[:x] // data for map entry - - // Note: we could use #keys * #values ~= 200 functions - // to do map decoding without reflection. Probably not worth it. - // Maps will be somewhat slow. Oh well. - - // Read key and value from data. - var nerr nonFatal - k := reflect.New(kt) - v := reflect.New(vt) - for len(b) > 0 { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - wire := int(x) & 7 - b = b[n:] - - var err error - switch x >> 3 { - case 1: - b, err = unmarshalKey(b, valToPointer(k), wire) - case 2: - b, err = unmarshalVal(b, valToPointer(v), wire) - default: - err = errInternalBadWireType // skip unknown tag - } - - if nerr.Merge(err) { - continue - } - if err != errInternalBadWireType { - return nil, err - } - - // Skip past unknown fields. - b, err = skipField(b, wire) - if err != nil { - return nil, err - } - } - - // Get map, allocate if needed. - m := f.asPointerTo(t).Elem() // an addressable map[K]T - if m.IsNil() { - m.Set(reflect.MakeMap(t)) - } - - // Insert into map. - m.SetMapIndex(k.Elem(), v.Elem()) - - return r, nerr.E - } -} - -// makeUnmarshalOneof makes an unmarshaler for oneof fields. -// for: -// message Msg { -// oneof F { -// int64 X = 1; -// float64 Y = 2; -// } -// } -// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). -// ityp is the interface type of the oneof field (e.g. isMsg_F). -// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). -// Note that this function will be called once for each case in the oneof. -func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { - sf := typ.Field(0) - field0 := toField(&sf) - return func(b []byte, f pointer, w int) ([]byte, error) { - // Allocate holder for value. - v := reflect.New(typ) - - // Unmarshal data into holder. - // We unmarshal into the first field of the holder object. - var err error - var nerr nonFatal - b, err = unmarshal(b, valToPointer(v).offset(field0), w) - if !nerr.Merge(err) { - return nil, err - } - - // Write pointer to holder into target field. - f.asPointerTo(ityp).Elem().Set(v) - - return b, nerr.E - } -} - -// Error used by decode internally. -var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") - -// skipField skips past a field of type wire and returns the remaining bytes. -func skipField(b []byte, wire int) ([]byte, error) { - switch wire { - case WireVarint: - _, k := decodeVarint(b) - if k == 0 { - return b, io.ErrUnexpectedEOF - } - b = b[k:] - case WireFixed32: - if len(b) < 4 { - return b, io.ErrUnexpectedEOF - } - b = b[4:] - case WireFixed64: - if len(b) < 8 { - return b, io.ErrUnexpectedEOF - } - b = b[8:] - case WireBytes: - m, k := decodeVarint(b) - if k == 0 || uint64(len(b)-k) < m { - return b, io.ErrUnexpectedEOF - } - b = b[uint64(k)+m:] - case WireStartGroup: - _, i := findEndGroup(b) - if i == -1 { - return b, io.ErrUnexpectedEOF - } - b = b[i:] - default: - return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) - } - return b, nil -} - -// findEndGroup finds the index of the next EndGroup tag. -// Groups may be nested, so the "next" EndGroup tag is the first -// unpaired EndGroup. -// findEndGroup returns the indexes of the start and end of the EndGroup tag. -// Returns (-1,-1) if it can't find one. -func findEndGroup(b []byte) (int, int) { - depth := 1 - i := 0 - for { - x, n := decodeVarint(b[i:]) - if n == 0 { - return -1, -1 - } - j := i - i += n - switch x & 7 { - case WireVarint: - _, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - case WireFixed32: - if len(b)-4 < i { - return -1, -1 - } - i += 4 - case WireFixed64: - if len(b)-8 < i { - return -1, -1 - } - i += 8 - case WireBytes: - m, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - if uint64(len(b)-i) < m { - return -1, -1 - } - i += int(m) - case WireStartGroup: - depth++ - case WireEndGroup: - depth-- - if depth == 0 { - return j, i - } - default: - return -1, -1 - } - } -} - -// encodeVarint appends a varint-encoded integer to b and returns the result. -func encodeVarint(b []byte, x uint64) []byte { - for x >= 1<<7 { - b = append(b, byte(x&0x7f|0x80)) - x >>= 7 - } - return append(b, byte(x)) -} - -// decodeVarint reads a varint-encoded integer from b. -// Returns the decoded integer and the number of bytes read. -// If there is an error, it returns 0,0. -func decodeVarint(b []byte) (uint64, int) { - var x, y uint64 - if len(b) <= 0 { - goto bad - } - x = uint64(b[0]) - if x < 0x80 { - return x, 1 - } - x -= 0x80 - - if len(b) <= 1 { - goto bad - } - y = uint64(b[1]) - x += y << 7 - if y < 0x80 { - return x, 2 - } - x -= 0x80 << 7 - - if len(b) <= 2 { - goto bad - } - y = uint64(b[2]) - x += y << 14 - if y < 0x80 { - return x, 3 - } - x -= 0x80 << 14 - - if len(b) <= 3 { - goto bad - } - y = uint64(b[3]) - x += y << 21 - if y < 0x80 { - return x, 4 - } - x -= 0x80 << 21 - - if len(b) <= 4 { - goto bad - } - y = uint64(b[4]) - x += y << 28 - if y < 0x80 { - return x, 5 - } - x -= 0x80 << 28 - - if len(b) <= 5 { - goto bad - } - y = uint64(b[5]) - x += y << 35 - if y < 0x80 { - return x, 6 - } - x -= 0x80 << 35 - - if len(b) <= 6 { - goto bad - } - y = uint64(b[6]) - x += y << 42 - if y < 0x80 { - return x, 7 - } - x -= 0x80 << 42 - - if len(b) <= 7 { - goto bad - } - y = uint64(b[7]) - x += y << 49 - if y < 0x80 { - return x, 8 - } - x -= 0x80 << 49 - - if len(b) <= 8 { - goto bad - } - y = uint64(b[8]) - x += y << 56 - if y < 0x80 { - return x, 9 - } - x -= 0x80 << 56 - - if len(b) <= 9 { - goto bad - } - y = uint64(b[9]) - x += y << 63 - if y < 2 { - return x, 10 - } - -bad: - return 0, 0 -} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go deleted file mode 100644 index 1aaee725..00000000 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ /dev/null @@ -1,843 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -// Functions for writing the text protocol buffer format. - -import ( - "bufio" - "bytes" - "encoding" - "errors" - "fmt" - "io" - "log" - "math" - "reflect" - "sort" - "strings" -) - -var ( - newline = []byte("\n") - spaces = []byte(" ") - endBraceNewline = []byte("}\n") - backslashN = []byte{'\\', 'n'} - backslashR = []byte{'\\', 'r'} - backslashT = []byte{'\\', 't'} - backslashDQ = []byte{'\\', '"'} - backslashBS = []byte{'\\', '\\'} - posInf = []byte("inf") - negInf = []byte("-inf") - nan = []byte("nan") -) - -type writer interface { - io.Writer - WriteByte(byte) error -} - -// textWriter is an io.Writer that tracks its indentation level. -type textWriter struct { - ind int - complete bool // if the current position is a complete line - compact bool // whether to write out as a one-liner - w writer -} - -func (w *textWriter) WriteString(s string) (n int, err error) { - if !strings.Contains(s, "\n") { - if !w.compact && w.complete { - w.writeIndent() - } - w.complete = false - return io.WriteString(w.w, s) - } - // WriteString is typically called without newlines, so this - // codepath and its copy are rare. We copy to avoid - // duplicating all of Write's logic here. - return w.Write([]byte(s)) -} - -func (w *textWriter) Write(p []byte) (n int, err error) { - newlines := bytes.Count(p, newline) - if newlines == 0 { - if !w.compact && w.complete { - w.writeIndent() - } - n, err = w.w.Write(p) - w.complete = false - return n, err - } - - frags := bytes.SplitN(p, newline, newlines+1) - if w.compact { - for i, frag := range frags { - if i > 0 { - if err := w.w.WriteByte(' '); err != nil { - return n, err - } - n++ - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - } - return n, nil - } - - for i, frag := range frags { - if w.complete { - w.writeIndent() - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - if i+1 < len(frags) { - if err := w.w.WriteByte('\n'); err != nil { - return n, err - } - n++ - } - } - w.complete = len(frags[len(frags)-1]) == 0 - return n, nil -} - -func (w *textWriter) WriteByte(c byte) error { - if w.compact && c == '\n' { - c = ' ' - } - if !w.compact && w.complete { - w.writeIndent() - } - err := w.w.WriteByte(c) - w.complete = c == '\n' - return err -} - -func (w *textWriter) indent() { w.ind++ } - -func (w *textWriter) unindent() { - if w.ind == 0 { - log.Print("proto: textWriter unindented too far") - return - } - w.ind-- -} - -func writeName(w *textWriter, props *Properties) error { - if _, err := w.WriteString(props.OrigName); err != nil { - return err - } - if props.Wire != "group" { - return w.WriteByte(':') - } - return nil -} - -func requiresQuotes(u string) bool { - // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. - for _, ch := range u { - switch { - case ch == '.' || ch == '/' || ch == '_': - continue - case '0' <= ch && ch <= '9': - continue - case 'A' <= ch && ch <= 'Z': - continue - case 'a' <= ch && ch <= 'z': - continue - default: - return true - } - } - return false -} - -// isAny reports whether sv is a google.protobuf.Any message -func isAny(sv reflect.Value) bool { - type wkt interface { - XXX_WellKnownType() string - } - t, ok := sv.Addr().Interface().(wkt) - return ok && t.XXX_WellKnownType() == "Any" -} - -// writeProto3Any writes an expanded google.protobuf.Any message. -// -// It returns (false, nil) if sv value can't be unmarshaled (e.g. because -// required messages are not linked in). -// -// It returns (true, error) when sv was written in expanded format or an error -// was encountered. -func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { - turl := sv.FieldByName("TypeUrl") - val := sv.FieldByName("Value") - if !turl.IsValid() || !val.IsValid() { - return true, errors.New("proto: invalid google.protobuf.Any message") - } - - b, ok := val.Interface().([]byte) - if !ok { - return true, errors.New("proto: invalid google.protobuf.Any message") - } - - parts := strings.Split(turl.String(), "/") - mt := MessageType(parts[len(parts)-1]) - if mt == nil { - return false, nil - } - m := reflect.New(mt.Elem()) - if err := Unmarshal(b, m.Interface().(Message)); err != nil { - return false, nil - } - w.Write([]byte("[")) - u := turl.String() - if requiresQuotes(u) { - writeString(w, u) - } else { - w.Write([]byte(u)) - } - if w.compact { - w.Write([]byte("]:<")) - } else { - w.Write([]byte("]: <\n")) - w.ind++ - } - if err := tm.writeStruct(w, m.Elem()); err != nil { - return true, err - } - if w.compact { - w.Write([]byte("> ")) - } else { - w.ind-- - w.Write([]byte(">\n")) - } - return true, nil -} - -func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { - if tm.ExpandAny && isAny(sv) { - if canExpand, err := tm.writeProto3Any(w, sv); canExpand { - return err - } - } - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < sv.NumField(); i++ { - fv := sv.Field(i) - props := sprops.Prop[i] - name := st.Field(i).Name - - if name == "XXX_NoUnkeyedLiteral" { - continue - } - - if strings.HasPrefix(name, "XXX_") { - // There are two XXX_ fields: - // XXX_unrecognized []byte - // XXX_extensions map[int32]proto.Extension - // The first is handled here; - // the second is handled at the bottom of this function. - if name == "XXX_unrecognized" && !fv.IsNil() { - if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Field not filled in. This could be an optional field or - // a required field that wasn't filled in. Either way, there - // isn't anything we can show for it. - continue - } - if fv.Kind() == reflect.Slice && fv.IsNil() { - // Repeated field that is empty, or a bytes field that is unused. - continue - } - - if props.Repeated && fv.Kind() == reflect.Slice { - // Repeated field. - for j := 0; j < fv.Len(); j++ { - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - v := fv.Index(j) - if v.Kind() == reflect.Ptr && v.IsNil() { - // A nil message in a repeated field is not valid, - // but we can handle that more gracefully than panicking. - if _, err := w.Write([]byte("\n")); err != nil { - return err - } - continue - } - if err := tm.writeAny(w, v, props); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Map { - // Map fields are rendered as a repeated struct with key/value fields. - keys := fv.MapKeys() - sort.Sort(mapKeys(keys)) - for _, key := range keys { - val := fv.MapIndex(key) - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - // open struct - if err := w.WriteByte('<'); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - // key - if _, err := w.WriteString("key:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, key, props.MapKeyProp); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - // nil values aren't legal, but we can avoid panicking because of them. - if val.Kind() != reflect.Ptr || !val.IsNil() { - // value - if _, err := w.WriteString("value:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, val, props.MapValProp); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - // close struct - w.unindent() - if err := w.WriteByte('>'); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { - // empty bytes field - continue - } - if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { - // proto3 non-repeated scalar field; skip if zero value - if isProto3Zero(fv) { - continue - } - } - - if fv.Kind() == reflect.Interface { - // Check if it is a oneof. - if st.Field(i).Tag.Get("protobuf_oneof") != "" { - // fv is nil, or holds a pointer to generated struct. - // That generated struct has exactly one field, - // which has a protobuf struct tag. - if fv.IsNil() { - continue - } - inner := fv.Elem().Elem() // interface -> *T -> T - tag := inner.Type().Field(0).Tag.Get("protobuf") - props = new(Properties) // Overwrite the outer props var, but not its pointee. - props.Parse(tag) - // Write the value in the oneof, not the oneof itself. - fv = inner.Field(0) - - // Special case to cope with malformed messages gracefully: - // If the value in the oneof is a nil pointer, don't panic - // in writeAny. - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Use errors.New so writeAny won't render quotes. - msg := errors.New("/* nil */") - fv = reflect.ValueOf(&msg).Elem() - } - } - } - - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - - // Enums have a String method, so writeAny will work fine. - if err := tm.writeAny(w, fv, props); err != nil { - return err - } - - if err := w.WriteByte('\n'); err != nil { - return err - } - } - - // Extensions (the XXX_extensions field). - pv := sv.Addr() - if _, err := extendable(pv.Interface()); err == nil { - if err := tm.writeExtensions(w, pv); err != nil { - return err - } - } - - return nil -} - -// writeAny writes an arbitrary field. -func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { - v = reflect.Indirect(v) - - // Floats have special cases. - if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { - x := v.Float() - var b []byte - switch { - case math.IsInf(x, 1): - b = posInf - case math.IsInf(x, -1): - b = negInf - case math.IsNaN(x): - b = nan - } - if b != nil { - _, err := w.Write(b) - return err - } - // Other values are handled below. - } - - // We don't attempt to serialise every possible value type; only those - // that can occur in protocol buffers. - switch v.Kind() { - case reflect.Slice: - // Should only be a []byte; repeated fields are handled in writeStruct. - if err := writeString(w, string(v.Bytes())); err != nil { - return err - } - case reflect.String: - if err := writeString(w, v.String()); err != nil { - return err - } - case reflect.Struct: - // Required/optional group/message. - var bra, ket byte = '<', '>' - if props != nil && props.Wire == "group" { - bra, ket = '{', '}' - } - if err := w.WriteByte(bra); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - if v.CanAddr() { - // Calling v.Interface on a struct causes the reflect package to - // copy the entire struct. This is racy with the new Marshaler - // since we atomically update the XXX_sizecache. - // - // Thus, we retrieve a pointer to the struct if possible to avoid - // a race since v.Interface on the pointer doesn't copy the struct. - // - // If v is not addressable, then we are not worried about a race - // since it implies that the binary Marshaler cannot possibly be - // mutating this value. - v = v.Addr() - } - if etm, ok := v.Interface().(encoding.TextMarshaler); ok { - text, err := etm.MarshalText() - if err != nil { - return err - } - if _, err = w.Write(text); err != nil { - return err - } - } else { - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - if err := tm.writeStruct(w, v); err != nil { - return err - } - } - w.unindent() - if err := w.WriteByte(ket); err != nil { - return err - } - default: - _, err := fmt.Fprint(w, v.Interface()) - return err - } - return nil -} - -// equivalent to C's isprint. -func isprint(c byte) bool { - return c >= 0x20 && c < 0x7f -} - -// writeString writes a string in the protocol buffer text format. -// It is similar to strconv.Quote except we don't use Go escape sequences, -// we treat the string as a byte sequence, and we use octal escapes. -// These differences are to maintain interoperability with the other -// languages' implementations of the text format. -func writeString(w *textWriter, s string) error { - // use WriteByte here to get any needed indent - if err := w.WriteByte('"'); err != nil { - return err - } - // Loop over the bytes, not the runes. - for i := 0; i < len(s); i++ { - var err error - // Divergence from C++: we don't escape apostrophes. - // There's no need to escape them, and the C++ parser - // copes with a naked apostrophe. - switch c := s[i]; c { - case '\n': - _, err = w.w.Write(backslashN) - case '\r': - _, err = w.w.Write(backslashR) - case '\t': - _, err = w.w.Write(backslashT) - case '"': - _, err = w.w.Write(backslashDQ) - case '\\': - _, err = w.w.Write(backslashBS) - default: - if isprint(c) { - err = w.w.WriteByte(c) - } else { - _, err = fmt.Fprintf(w.w, "\\%03o", c) - } - } - if err != nil { - return err - } - } - return w.WriteByte('"') -} - -func writeUnknownStruct(w *textWriter, data []byte) (err error) { - if !w.compact { - if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { - return err - } - } - b := NewBuffer(data) - for b.index < len(b.buf) { - x, err := b.DecodeVarint() - if err != nil { - _, err := fmt.Fprintf(w, "/* %v */\n", err) - return err - } - wire, tag := x&7, x>>3 - if wire == WireEndGroup { - w.unindent() - if _, err := w.Write(endBraceNewline); err != nil { - return err - } - continue - } - if _, err := fmt.Fprint(w, tag); err != nil { - return err - } - if wire != WireStartGroup { - if err := w.WriteByte(':'); err != nil { - return err - } - } - if !w.compact || wire == WireStartGroup { - if err := w.WriteByte(' '); err != nil { - return err - } - } - switch wire { - case WireBytes: - buf, e := b.DecodeRawBytes(false) - if e == nil { - _, err = fmt.Fprintf(w, "%q", buf) - } else { - _, err = fmt.Fprintf(w, "/* %v */", e) - } - case WireFixed32: - x, err = b.DecodeFixed32() - err = writeUnknownInt(w, x, err) - case WireFixed64: - x, err = b.DecodeFixed64() - err = writeUnknownInt(w, x, err) - case WireStartGroup: - err = w.WriteByte('{') - w.indent() - case WireVarint: - x, err = b.DecodeVarint() - err = writeUnknownInt(w, x, err) - default: - _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) - } - if err != nil { - return err - } - if err = w.WriteByte('\n'); err != nil { - return err - } - } - return nil -} - -func writeUnknownInt(w *textWriter, x uint64, err error) error { - if err == nil { - _, err = fmt.Fprint(w, x) - } else { - _, err = fmt.Fprintf(w, "/* %v */", err) - } - return err -} - -type int32Slice []int32 - -func (s int32Slice) Len() int { return len(s) } -func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } -func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// writeExtensions writes all the extensions in pv. -// pv is assumed to be a pointer to a protocol message struct that is extendable. -func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { - emap := extensionMaps[pv.Type().Elem()] - ep, _ := extendable(pv.Interface()) - - // Order the extensions by ID. - // This isn't strictly necessary, but it will give us - // canonical output, which will also make testing easier. - m, mu := ep.extensionsRead() - if m == nil { - return nil - } - mu.Lock() - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) - mu.Unlock() - - for _, extNum := range ids { - ext := m[extNum] - var desc *ExtensionDesc - if emap != nil { - desc = emap[extNum] - } - if desc == nil { - // Unknown extension. - if err := writeUnknownStruct(w, ext.enc); err != nil { - return err - } - continue - } - - pb, err := GetExtension(ep, desc) - if err != nil { - return fmt.Errorf("failed getting extension: %v", err) - } - - // Repeated extensions will appear as a slice. - if !desc.repeated() { - if err := tm.writeExtension(w, desc.Name, pb); err != nil { - return err - } - } else { - v := reflect.ValueOf(pb) - for i := 0; i < v.Len(); i++ { - if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { - return err - } - } - } - } - return nil -} - -func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { - if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - return nil -} - -func (w *textWriter) writeIndent() { - if !w.complete { - return - } - remain := w.ind * 2 - for remain > 0 { - n := remain - if n > len(spaces) { - n = len(spaces) - } - w.w.Write(spaces[:n]) - remain -= n - } - w.complete = false -} - -// TextMarshaler is a configurable text format marshaler. -type TextMarshaler struct { - Compact bool // use compact text format (one line). - ExpandAny bool // expand google.protobuf.Any messages of known types -} - -// Marshal writes a given protocol buffer in text format. -// The only errors returned are from w. -func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { - val := reflect.ValueOf(pb) - if pb == nil || val.IsNil() { - w.Write([]byte("")) - return nil - } - var bw *bufio.Writer - ww, ok := w.(writer) - if !ok { - bw = bufio.NewWriter(w) - ww = bw - } - aw := &textWriter{ - w: ww, - complete: true, - compact: tm.Compact, - } - - if etm, ok := pb.(encoding.TextMarshaler); ok { - text, err := etm.MarshalText() - if err != nil { - return err - } - if _, err = aw.Write(text); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil - } - // Dereference the received pointer so we don't have outer < and >. - v := reflect.Indirect(val) - if err := tm.writeStruct(aw, v); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil -} - -// Text is the same as Marshal, but returns the string directly. -func (tm *TextMarshaler) Text(pb Message) string { - var buf bytes.Buffer - tm.Marshal(&buf, pb) - return buf.String() -} - -var ( - defaultTextMarshaler = TextMarshaler{} - compactTextMarshaler = TextMarshaler{Compact: true} -) - -// TODO: consider removing some of the Marshal functions below. - -// MarshalText writes a given protocol buffer in text format. -// The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } - -// MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } - -// CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } - -// CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/golang/protobuf/proto/text_decode.go b/vendor/github.com/golang/protobuf/proto/text_decode.go new file mode 100644 index 00000000..4a593100 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/text_decode.go @@ -0,0 +1,801 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "encoding" + "errors" + "fmt" + "reflect" + "strconv" + "strings" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/prototext" + protoV2 "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +const wrapTextUnmarshalV2 = false + +// ParseError is returned by UnmarshalText. +type ParseError struct { + Message string + + // Deprecated: Do not use. + Line, Offset int +} + +func (e *ParseError) Error() string { + if wrapTextUnmarshalV2 { + return e.Message + } + if e.Line == 1 { + return fmt.Sprintf("line 1.%d: %v", e.Offset, e.Message) + } + return fmt.Sprintf("line %d: %v", e.Line, e.Message) +} + +// UnmarshalText parses a proto text formatted string into m. +func UnmarshalText(s string, m Message) error { + if u, ok := m.(encoding.TextUnmarshaler); ok { + return u.UnmarshalText([]byte(s)) + } + + m.Reset() + mi := MessageV2(m) + + if wrapTextUnmarshalV2 { + err := prototext.UnmarshalOptions{ + AllowPartial: true, + }.Unmarshal([]byte(s), mi) + if err != nil { + return &ParseError{Message: err.Error()} + } + return checkRequiredNotSet(mi) + } else { + if err := newTextParser(s).unmarshalMessage(mi.ProtoReflect(), ""); err != nil { + return err + } + return checkRequiredNotSet(mi) + } +} + +type textParser struct { + s string // remaining input + done bool // whether the parsing is finished (success or error) + backed bool // whether back() was called + offset, line int + cur token +} + +type token struct { + value string + err *ParseError + line int // line number + offset int // byte number from start of input, not start of line + unquoted string // the unquoted version of value, if it was a quoted string +} + +func newTextParser(s string) *textParser { + p := new(textParser) + p.s = s + p.line = 1 + p.cur.line = 1 + return p +} + +func (p *textParser) unmarshalMessage(m protoreflect.Message, terminator string) (err error) { + md := m.Descriptor() + fds := md.Fields() + + // A struct is a sequence of "name: value", terminated by one of + // '>' or '}', or the end of the input. A name may also be + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > + seen := make(map[protoreflect.FieldNumber]bool) + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + if tok.value == "[" { + if err := p.unmarshalExtensionOrAny(m, seen); err != nil { + return err + } + continue + } + + // This is a normal, non-extension field. + name := protoreflect.Name(tok.value) + fd := fds.ByName(name) + switch { + case fd == nil: + gd := fds.ByName(protoreflect.Name(strings.ToLower(string(name)))) + if gd != nil && gd.Kind() == protoreflect.GroupKind && gd.Message().Name() == name { + fd = gd + } + case fd.Kind() == protoreflect.GroupKind && fd.Message().Name() != name: + fd = nil + case fd.IsWeak() && fd.Message().IsPlaceholder(): + fd = nil + } + if fd == nil { + typeName := string(md.FullName()) + if m, ok := m.Interface().(Message); ok { + t := reflect.TypeOf(m) + if t.Kind() == reflect.Ptr { + typeName = t.Elem().String() + } + } + return p.errorf("unknown field name %q in %v", name, typeName) + } + if od := fd.ContainingOneof(); od != nil && m.WhichOneof(od) != nil { + return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, od.Name()) + } + if fd.Cardinality() != protoreflect.Repeated && seen[fd.Number()] { + return p.errorf("non-repeated field %q was repeated", fd.Name()) + } + seen[fd.Number()] = true + + // Consume any colon. + if err := p.checkForColon(fd); err != nil { + return err + } + + // Parse into the field. + v := m.Get(fd) + if !m.Has(fd) && (fd.IsList() || fd.IsMap() || fd.Message() != nil) { + v = m.Mutable(fd) + } + if v, err = p.unmarshalValue(v, fd); err != nil { + return err + } + m.Set(fd, v) + + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + } + return nil +} + +func (p *textParser) unmarshalExtensionOrAny(m protoreflect.Message, seen map[protoreflect.FieldNumber]bool) error { + name, err := p.consumeExtensionOrAnyName() + if err != nil { + return err + } + + // If it contains a slash, it's an Any type URL. + if slashIdx := strings.LastIndex(name, "/"); slashIdx >= 0 { + tok := p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + + mt, err := protoregistry.GlobalTypes.FindMessageByURL(name) + if err != nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", name[slashIdx+len("/"):]) + } + m2 := mt.New() + if err := p.unmarshalMessage(m2, terminator); err != nil { + return err + } + b, err := protoV2.Marshal(m2.Interface()) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", name[slashIdx+len("/"):], err) + } + + urlFD := m.Descriptor().Fields().ByName("type_url") + valFD := m.Descriptor().Fields().ByName("value") + if seen[urlFD.Number()] { + return p.errorf("Any message unpacked multiple times, or %q already set", urlFD.Name()) + } + if seen[valFD.Number()] { + return p.errorf("Any message unpacked multiple times, or %q already set", valFD.Name()) + } + m.Set(urlFD, protoreflect.ValueOfString(name)) + m.Set(valFD, protoreflect.ValueOfBytes(b)) + seen[urlFD.Number()] = true + seen[valFD.Number()] = true + return nil + } + + xname := protoreflect.FullName(name) + xt, _ := protoregistry.GlobalTypes.FindExtensionByName(xname) + if xt == nil && isMessageSet(m.Descriptor()) { + xt, _ = protoregistry.GlobalTypes.FindExtensionByName(xname.Append("message_set_extension")) + } + if xt == nil { + return p.errorf("unrecognized extension %q", name) + } + fd := xt.TypeDescriptor() + if fd.ContainingMessage().FullName() != m.Descriptor().FullName() { + return p.errorf("extension field %q does not extend message %q", name, m.Descriptor().FullName()) + } + + if err := p.checkForColon(fd); err != nil { + return err + } + + v := m.Get(fd) + if !m.Has(fd) && (fd.IsList() || fd.IsMap() || fd.Message() != nil) { + v = m.Mutable(fd) + } + v, err = p.unmarshalValue(v, fd) + if err != nil { + return err + } + m.Set(fd, v) + return p.consumeOptionalSeparator() +} + +func (p *textParser) unmarshalValue(v protoreflect.Value, fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { + tok := p.next() + if tok.err != nil { + return v, tok.err + } + if tok.value == "" { + return v, p.errorf("unexpected EOF") + } + + switch { + case fd.IsList(): + lv := v.List() + var err error + if tok.value == "[" { + // Repeated field with list notation, like [1,2,3]. + for { + vv := lv.NewElement() + vv, err = p.unmarshalSingularValue(vv, fd) + if err != nil { + return v, err + } + lv.Append(vv) + + tok := p.next() + if tok.err != nil { + return v, tok.err + } + if tok.value == "]" { + break + } + if tok.value != "," { + return v, p.errorf("Expected ']' or ',' found %q", tok.value) + } + } + return v, nil + } + + // One value of the repeated field. + p.back() + vv := lv.NewElement() + vv, err = p.unmarshalSingularValue(vv, fd) + if err != nil { + return v, err + } + lv.Append(vv) + return v, nil + case fd.IsMap(): + // The map entry should be this sequence of tokens: + // < key : KEY value : VALUE > + // However, implementations may omit key or value, and technically + // we should support them in any order. + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return v, p.errorf("expected '{' or '<', found %q", tok.value) + } + + keyFD := fd.MapKey() + valFD := fd.MapValue() + + mv := v.Map() + kv := keyFD.Default() + vv := mv.NewValue() + for { + tok := p.next() + if tok.err != nil { + return v, tok.err + } + if tok.value == terminator { + break + } + var err error + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return v, err + } + if kv, err = p.unmarshalSingularValue(kv, keyFD); err != nil { + return v, err + } + if err := p.consumeOptionalSeparator(); err != nil { + return v, err + } + case "value": + if err := p.checkForColon(valFD); err != nil { + return v, err + } + if vv, err = p.unmarshalSingularValue(vv, valFD); err != nil { + return v, err + } + if err := p.consumeOptionalSeparator(); err != nil { + return v, err + } + default: + p.back() + return v, p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } + } + mv.Set(kv.MapKey(), vv) + return v, nil + default: + p.back() + return p.unmarshalSingularValue(v, fd) + } +} + +func (p *textParser) unmarshalSingularValue(v protoreflect.Value, fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { + tok := p.next() + if tok.err != nil { + return v, tok.err + } + if tok.value == "" { + return v, p.errorf("unexpected EOF") + } + + switch fd.Kind() { + case protoreflect.BoolKind: + switch tok.value { + case "true", "1", "t", "True": + return protoreflect.ValueOfBool(true), nil + case "false", "0", "f", "False": + return protoreflect.ValueOfBool(false), nil + } + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { + return protoreflect.ValueOfInt32(int32(x)), nil + } + + // The C++ parser accepts large positive hex numbers that uses + // two's complement arithmetic to represent negative numbers. + // This feature is here for backwards compatibility with C++. + if strings.HasPrefix(tok.value, "0x") { + if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { + return protoreflect.ValueOfInt32(int32(-(int64(^x) + 1))), nil + } + } + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { + return protoreflect.ValueOfInt64(int64(x)), nil + } + + // The C++ parser accepts large positive hex numbers that uses + // two's complement arithmetic to represent negative numbers. + // This feature is here for backwards compatibility with C++. + if strings.HasPrefix(tok.value, "0x") { + if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { + return protoreflect.ValueOfInt64(int64(-(int64(^x) + 1))), nil + } + } + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { + return protoreflect.ValueOfUint32(uint32(x)), nil + } + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { + return protoreflect.ValueOfUint64(uint64(x)), nil + } + case protoreflect.FloatKind: + // Ignore 'f' for compatibility with output generated by C++, + // but don't remove 'f' when the value is "-inf" or "inf". + v := tok.value + if strings.HasSuffix(v, "f") && v != "-inf" && v != "inf" { + v = v[:len(v)-len("f")] + } + if x, err := strconv.ParseFloat(v, 32); err == nil { + return protoreflect.ValueOfFloat32(float32(x)), nil + } + case protoreflect.DoubleKind: + // Ignore 'f' for compatibility with output generated by C++, + // but don't remove 'f' when the value is "-inf" or "inf". + v := tok.value + if strings.HasSuffix(v, "f") && v != "-inf" && v != "inf" { + v = v[:len(v)-len("f")] + } + if x, err := strconv.ParseFloat(v, 64); err == nil { + return protoreflect.ValueOfFloat64(float64(x)), nil + } + case protoreflect.StringKind: + if isQuote(tok.value[0]) { + return protoreflect.ValueOfString(tok.unquoted), nil + } + case protoreflect.BytesKind: + if isQuote(tok.value[0]) { + return protoreflect.ValueOfBytes([]byte(tok.unquoted)), nil + } + case protoreflect.EnumKind: + if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(x)), nil + } + vd := fd.Enum().Values().ByName(protoreflect.Name(tok.value)) + if vd != nil { + return protoreflect.ValueOfEnum(vd.Number()), nil + } + case protoreflect.MessageKind, protoreflect.GroupKind: + var terminator string + switch tok.value { + case "{": + terminator = "}" + case "<": + terminator = ">" + default: + return v, p.errorf("expected '{' or '<', found %q", tok.value) + } + err := p.unmarshalMessage(v.Message(), terminator) + return v, err + default: + panic(fmt.Sprintf("invalid kind %v", fd.Kind())) + } + return v, p.errorf("invalid %v: %v", fd.Kind(), tok.value) +} + +// Consume a ':' from the input stream (if the next token is a colon), +// returning an error if a colon is needed but not present. +func (p *textParser) checkForColon(fd protoreflect.FieldDescriptor) *ParseError { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ":" { + if fd.Message() == nil { + return p.errorf("expected ':', found %q", tok.value) + } + p.back() + } + return nil +} + +// consumeExtensionOrAnyName consumes an extension name or an Any type URL and +// the following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtensionOrAnyName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + if p.done && tok.value != "]" { + return "", p.errorf("unclosed type_url or extension name") + } + } + return strings.Join(parts, ""), nil +} + +// consumeOptionalSeparator consumes an optional semicolon or comma. +// It is used in unmarshalMessage to provide backward compatibility. +func (p *textParser) consumeOptionalSeparator() error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ";" && tok.value != "," { + p.back() + } + return nil +} + +func (p *textParser) errorf(format string, a ...interface{}) *ParseError { + pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} + p.cur.err = pe + p.done = true + return pe +} + +func (p *textParser) skipWhitespace() { + i := 0 + for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { + if p.s[i] == '#' { + // comment; skip to end of line or input + for i < len(p.s) && p.s[i] != '\n' { + i++ + } + if i == len(p.s) { + break + } + } + if p.s[i] == '\n' { + p.line++ + } + i++ + } + p.offset += i + p.s = p.s[i:len(p.s)] + if len(p.s) == 0 { + p.done = true + } +} + +func (p *textParser) advance() { + // Skip whitespace + p.skipWhitespace() + if p.done { + return + } + + // Start of non-whitespace + p.cur.err = nil + p.cur.offset, p.cur.line = p.offset, p.line + p.cur.unquoted = "" + switch p.s[0] { + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': + // Single symbol + p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] + case '"', '\'': + // Quoted string + i := 1 + for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { + if p.s[i] == '\\' && i+1 < len(p.s) { + // skip escaped char + i++ + } + i++ + } + if i >= len(p.s) || p.s[i] != p.s[0] { + p.errorf("unmatched quote") + return + } + unq, err := unquoteC(p.s[1:i], rune(p.s[0])) + if err != nil { + p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) + return + } + p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] + p.cur.unquoted = unq + default: + i := 0 + for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { + i++ + } + if i == 0 { + p.errorf("unexpected byte %#x", p.s[0]) + return + } + p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] + } + p.offset += len(p.cur.value) +} + +// Back off the parser by one token. Can only be done between calls to next(). +// It makes the next advance() a no-op. +func (p *textParser) back() { p.backed = true } + +// Advances the parser and returns the new current token. +func (p *textParser) next() *token { + if p.backed || p.done { + p.backed = false + return &p.cur + } + p.advance() + if p.done { + p.cur.value = "" + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { + // Look for multiple quoted strings separated by whitespace, + // and concatenate them. + cat := p.cur + for { + p.skipWhitespace() + if p.done || !isQuote(p.s[0]) { + break + } + p.advance() + if p.cur.err != nil { + return &p.cur + } + cat.value += " " + p.cur.value + cat.unquoted += p.cur.unquoted + } + p.done = false // parser may have seen EOF, but we want to return cat + p.cur = cat + } + return &p.cur +} + +func (p *textParser) consumeToken(s string) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != s { + p.back() + return p.errorf("expected %q, found %q", s, tok.value) + } + return nil +} + +var errBadUTF8 = errors.New("proto: bad UTF-8") + +func unquoteC(s string, quote rune) (string, error) { + // This is based on C++'s tokenizer.cc. + // Despite its name, this is *not* parsing C syntax. + // For instance, "\0" is an invalid quoted string. + + // Avoid allocation in trivial cases. + simple := true + for _, r := range s { + if r == '\\' || r == quote { + simple = false + break + } + } + if simple { + return s, nil + } + + buf := make([]byte, 0, 3*len(s)/2) + for len(s) > 0 { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", errBadUTF8 + } + s = s[n:] + if r != '\\' { + if r < utf8.RuneSelf { + buf = append(buf, byte(r)) + } else { + buf = append(buf, string(r)...) + } + continue + } + + ch, tail, err := unescape(s) + if err != nil { + return "", err + } + buf = append(buf, ch...) + s = tail + } + return string(buf), nil +} + +func unescape(s string) (ch string, tail string, err error) { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", "", errBadUTF8 + } + s = s[n:] + switch r { + case 'a': + return "\a", s, nil + case 'b': + return "\b", s, nil + case 'f': + return "\f", s, nil + case 'n': + return "\n", s, nil + case 'r': + return "\r", s, nil + case 't': + return "\t", s, nil + case 'v': + return "\v", s, nil + case '?': + return "?", s, nil // trigraph workaround + case '\'', '"', '\\': + return string(r), s, nil + case '0', '1', '2', '3', '4', '5', '6', '7': + if len(s) < 2 { + return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) + } + ss := string(r) + s[:2] + s = s[2:] + i, err := strconv.ParseUint(ss, 8, 8) + if err != nil { + return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) + } + return string([]byte{byte(i)}), s, nil + case 'x', 'X', 'u', 'U': + var n int + switch r { + case 'x', 'X': + n = 2 + case 'u': + n = 4 + case 'U': + n = 8 + } + if len(s) < n { + return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) + } + ss := s[:n] + s = s[n:] + i, err := strconv.ParseUint(ss, 16, 64) + if err != nil { + return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) + } + if r == 'x' || r == 'X' { + return string([]byte{byte(i)}), s, nil + } + if i > utf8.MaxRune { + return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) + } + return string(i), s, nil + } + return "", "", fmt.Errorf(`unknown escape \%c`, r) +} + +func isIdentOrNumberChar(c byte) bool { + switch { + case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': + return true + case '0' <= c && c <= '9': + return true + } + switch c { + case '-', '+', '.', '_': + return true + } + return false +} + +func isWhitespace(c byte) bool { + switch c { + case ' ', '\t', '\n', '\r': + return true + } + return false +} + +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} diff --git a/vendor/github.com/golang/protobuf/proto/text_encode.go b/vendor/github.com/golang/protobuf/proto/text_encode.go new file mode 100644 index 00000000..7ac02e68 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/text_encode.go @@ -0,0 +1,560 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "bytes" + "encoding" + "fmt" + "io" + "math" + "sort" + "strings" + + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +const wrapTextMarshalV2 = false + +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line) + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes the proto text format of m to w. +func (tm *TextMarshaler) Marshal(w io.Writer, m Message) error { + b, err := tm.marshal(m) + if len(b) > 0 { + if _, err := w.Write(b); err != nil { + return err + } + } + return err +} + +// Text returns a proto text formatted string of m. +func (tm *TextMarshaler) Text(m Message) string { + b, _ := tm.marshal(m) + return string(b) +} + +func (tm *TextMarshaler) marshal(m Message) ([]byte, error) { + mr := MessageReflect(m) + if mr == nil || !mr.IsValid() { + return []byte(""), nil + } + + if wrapTextMarshalV2 { + if m, ok := m.(encoding.TextMarshaler); ok { + return m.MarshalText() + } + + opts := prototext.MarshalOptions{ + AllowPartial: true, + EmitUnknown: true, + } + if !tm.Compact { + opts.Indent = " " + } + if !tm.ExpandAny { + opts.Resolver = (*protoregistry.Types)(nil) + } + return opts.Marshal(mr.Interface()) + } else { + w := &textWriter{ + compact: tm.Compact, + expandAny: tm.ExpandAny, + complete: true, + } + + if m, ok := m.(encoding.TextMarshaler); ok { + b, err := m.MarshalText() + if err != nil { + return nil, err + } + w.Write(b) + return w.buf, nil + } + + err := w.writeMessage(mr) + return w.buf, err + } +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// MarshalText writes the proto text format of m to w. +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } + +// MarshalTextString returns a proto text formatted string of m. +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } + +// CompactText writes the compact proto text format of m to w. +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } + +// CompactTextString returns a compact proto text formatted string of m. +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } + +var ( + newline = []byte("\n") + endBraceNewline = []byte("}\n") + posInf = []byte("inf") + negInf = []byte("-inf") + nan = []byte("nan") +) + +// textWriter is an io.Writer that tracks its indentation level. +type textWriter struct { + compact bool // same as TextMarshaler.Compact + expandAny bool // same as TextMarshaler.ExpandAny + complete bool // whether the current position is a complete line + indent int // indentation level; never negative + buf []byte +} + +func (w *textWriter) Write(p []byte) (n int, _ error) { + newlines := bytes.Count(p, newline) + if newlines == 0 { + if !w.compact && w.complete { + w.writeIndent() + } + w.buf = append(w.buf, p...) + w.complete = false + return len(p), nil + } + + frags := bytes.SplitN(p, newline, newlines+1) + if w.compact { + for i, frag := range frags { + if i > 0 { + w.buf = append(w.buf, ' ') + n++ + } + w.buf = append(w.buf, frag...) + n += len(frag) + } + return n, nil + } + + for i, frag := range frags { + if w.complete { + w.writeIndent() + } + w.buf = append(w.buf, frag...) + n += len(frag) + if i+1 < len(frags) { + w.buf = append(w.buf, '\n') + n++ + } + } + w.complete = len(frags[len(frags)-1]) == 0 + return n, nil +} + +func (w *textWriter) WriteByte(c byte) error { + if w.compact && c == '\n' { + c = ' ' + } + if !w.compact && w.complete { + w.writeIndent() + } + w.buf = append(w.buf, c) + w.complete = c == '\n' + return nil +} + +func (w *textWriter) writeName(fd protoreflect.FieldDescriptor) { + if !w.compact && w.complete { + w.writeIndent() + } + w.complete = false + + if fd.Kind() != protoreflect.GroupKind { + w.buf = append(w.buf, fd.Name()...) + w.WriteByte(':') + } else { + // Use message type name for group field name. + w.buf = append(w.buf, fd.Message().Name()...) + } + + if !w.compact { + w.WriteByte(' ') + } +} + +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (w *textWriter) writeProto3Any(m protoreflect.Message) (bool, error) { + md := m.Descriptor() + fdURL := md.Fields().ByName("type_url") + fdVal := md.Fields().ByName("value") + + url := m.Get(fdURL).String() + mt, err := protoregistry.GlobalTypes.FindMessageByURL(url) + if err != nil { + return false, nil + } + + b := m.Get(fdVal).Bytes() + m2 := mt.New() + if err := proto.Unmarshal(b, m2.Interface()); err != nil { + return false, nil + } + w.Write([]byte("[")) + if requiresQuotes(url) { + w.writeQuotedString(url) + } else { + w.Write([]byte(url)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.indent++ + } + if err := w.writeMessage(m2); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.indent-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (w *textWriter) writeMessage(m protoreflect.Message) error { + md := m.Descriptor() + if w.expandAny && md.FullName() == "google.protobuf.Any" { + if canExpand, err := w.writeProto3Any(m); canExpand { + return err + } + } + + fds := md.Fields() + for i := 0; i < fds.Len(); { + fd := fds.Get(i) + if od := fd.ContainingOneof(); od != nil { + fd = m.WhichOneof(od) + i += od.Fields().Len() + } else { + i++ + } + if fd == nil || !m.Has(fd) { + continue + } + + switch { + case fd.IsList(): + lv := m.Get(fd).List() + for j := 0; j < lv.Len(); j++ { + w.writeName(fd) + v := lv.Get(j) + if err := w.writeSingularValue(v, fd); err != nil { + return err + } + w.WriteByte('\n') + } + case fd.IsMap(): + kfd := fd.MapKey() + vfd := fd.MapValue() + mv := m.Get(fd).Map() + + type entry struct{ key, val protoreflect.Value } + var entries []entry + mv.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool { + entries = append(entries, entry{k.Value(), v}) + return true + }) + sort.Slice(entries, func(i, j int) bool { + switch kfd.Kind() { + case protoreflect.BoolKind: + return !entries[i].key.Bool() && entries[j].key.Bool() + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + return entries[i].key.Int() < entries[j].key.Int() + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + return entries[i].key.Uint() < entries[j].key.Uint() + case protoreflect.StringKind: + return entries[i].key.String() < entries[j].key.String() + default: + panic("invalid kind") + } + }) + for _, entry := range entries { + w.writeName(fd) + w.WriteByte('<') + if !w.compact { + w.WriteByte('\n') + } + w.indent++ + w.writeName(kfd) + if err := w.writeSingularValue(entry.key, kfd); err != nil { + return err + } + w.WriteByte('\n') + w.writeName(vfd) + if err := w.writeSingularValue(entry.val, vfd); err != nil { + return err + } + w.WriteByte('\n') + w.indent-- + w.WriteByte('>') + w.WriteByte('\n') + } + default: + w.writeName(fd) + if err := w.writeSingularValue(m.Get(fd), fd); err != nil { + return err + } + w.WriteByte('\n') + } + } + + if b := m.GetUnknown(); len(b) > 0 { + w.writeUnknownFields(b) + } + return w.writeExtensions(m) +} + +func (w *textWriter) writeSingularValue(v protoreflect.Value, fd protoreflect.FieldDescriptor) error { + switch fd.Kind() { + case protoreflect.FloatKind, protoreflect.DoubleKind: + switch vf := v.Float(); { + case math.IsInf(vf, +1): + w.Write(posInf) + case math.IsInf(vf, -1): + w.Write(negInf) + case math.IsNaN(vf): + w.Write(nan) + default: + fmt.Fprint(w, v.Interface()) + } + case protoreflect.StringKind: + // NOTE: This does not validate UTF-8 for historical reasons. + w.writeQuotedString(string(v.String())) + case protoreflect.BytesKind: + w.writeQuotedString(string(v.Bytes())) + case protoreflect.MessageKind, protoreflect.GroupKind: + var bra, ket byte = '<', '>' + if fd.Kind() == protoreflect.GroupKind { + bra, ket = '{', '}' + } + w.WriteByte(bra) + if !w.compact { + w.WriteByte('\n') + } + w.indent++ + m := v.Message() + if m2, ok := m.Interface().(encoding.TextMarshaler); ok { + b, err := m2.MarshalText() + if err != nil { + return err + } + w.Write(b) + } else { + w.writeMessage(m) + } + w.indent-- + w.WriteByte(ket) + case protoreflect.EnumKind: + if ev := fd.Enum().Values().ByNumber(v.Enum()); ev != nil { + fmt.Fprint(w, ev.Name()) + } else { + fmt.Fprint(w, v.Enum()) + } + default: + fmt.Fprint(w, v.Interface()) + } + return nil +} + +// writeQuotedString writes a quoted string in the protocol buffer text format. +func (w *textWriter) writeQuotedString(s string) { + w.WriteByte('"') + for i := 0; i < len(s); i++ { + switch c := s[i]; c { + case '\n': + w.buf = append(w.buf, `\n`...) + case '\r': + w.buf = append(w.buf, `\r`...) + case '\t': + w.buf = append(w.buf, `\t`...) + case '"': + w.buf = append(w.buf, `\"`...) + case '\\': + w.buf = append(w.buf, `\\`...) + default: + if isPrint := c >= 0x20 && c < 0x7f; isPrint { + w.buf = append(w.buf, c) + } else { + w.buf = append(w.buf, fmt.Sprintf(`\%03o`, c)...) + } + } + } + w.WriteByte('"') +} + +func (w *textWriter) writeUnknownFields(b []byte) { + if !w.compact { + fmt.Fprintf(w, "/* %d unknown bytes */\n", len(b)) + } + + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return + } + b = b[n:] + + if wtyp == protowire.EndGroupType { + w.indent-- + w.Write(endBraceNewline) + continue + } + fmt.Fprint(w, num) + if wtyp != protowire.StartGroupType { + w.WriteByte(':') + } + if !w.compact || wtyp == protowire.StartGroupType { + w.WriteByte(' ') + } + switch wtyp { + case protowire.VarintType: + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return + } + b = b[n:] + fmt.Fprint(w, v) + case protowire.Fixed32Type: + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return + } + b = b[n:] + fmt.Fprint(w, v) + case protowire.Fixed64Type: + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return + } + b = b[n:] + fmt.Fprint(w, v) + case protowire.BytesType: + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return + } + b = b[n:] + fmt.Fprintf(w, "%q", v) + case protowire.StartGroupType: + w.WriteByte('{') + w.indent++ + default: + fmt.Fprintf(w, "/* unknown wire type %d */", wtyp) + } + w.WriteByte('\n') + } +} + +// writeExtensions writes all the extensions in m. +func (w *textWriter) writeExtensions(m protoreflect.Message) error { + md := m.Descriptor() + if md.ExtensionRanges().Len() == 0 { + return nil + } + + type ext struct { + desc protoreflect.FieldDescriptor + val protoreflect.Value + } + var exts []ext + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if fd.IsExtension() { + exts = append(exts, ext{fd, v}) + } + return true + }) + sort.Slice(exts, func(i, j int) bool { + return exts[i].desc.Number() < exts[j].desc.Number() + }) + + for _, ext := range exts { + // For message set, use the name of the message as the extension name. + name := string(ext.desc.FullName()) + if isMessageSet(ext.desc.ContainingMessage()) { + name = strings.TrimSuffix(name, ".message_set_extension") + } + + if !ext.desc.IsList() { + if err := w.writeSingularExtension(name, ext.val, ext.desc); err != nil { + return err + } + } else { + lv := ext.val.List() + for i := 0; i < lv.Len(); i++ { + if err := w.writeSingularExtension(name, lv.Get(i), ext.desc); err != nil { + return err + } + } + } + } + return nil +} + +func (w *textWriter) writeSingularExtension(name string, v protoreflect.Value, fd protoreflect.FieldDescriptor) error { + fmt.Fprintf(w, "[%s]:", name) + if !w.compact { + w.WriteByte(' ') + } + if err := w.writeSingularValue(v, fd); err != nil { + return err + } + w.WriteByte('\n') + return nil +} + +func (w *textWriter) writeIndent() { + if !w.complete { + return + } + for i := 0; i < w.indent*2; i++ { + w.buf = append(w.buf, ' ') + } + w.complete = false +} diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go deleted file mode 100644 index bb55a3af..00000000 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ /dev/null @@ -1,880 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -// Functions for parsing the Text protocol buffer format. -// TODO: message sets. - -import ( - "encoding" - "errors" - "fmt" - "reflect" - "strconv" - "strings" - "unicode/utf8" -) - -// Error string emitted when deserializing Any and fields are already set -const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" - -type ParseError struct { - Message string - Line int // 1-based line number - Offset int // 0-based byte offset from start of input -} - -func (p *ParseError) Error() string { - if p.Line == 1 { - // show offset only for first line - return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) - } - return fmt.Sprintf("line %d: %v", p.Line, p.Message) -} - -type token struct { - value string - err *ParseError - line int // line number - offset int // byte number from start of input, not start of line - unquoted string // the unquoted version of value, if it was a quoted string -} - -func (t *token) String() string { - if t.err == nil { - return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) - } - return fmt.Sprintf("parse error: %v", t.err) -} - -type textParser struct { - s string // remaining input - done bool // whether the parsing is finished (success or error) - backed bool // whether back() was called - offset, line int - cur token -} - -func newTextParser(s string) *textParser { - p := new(textParser) - p.s = s - p.line = 1 - p.cur.line = 1 - return p -} - -func (p *textParser) errorf(format string, a ...interface{}) *ParseError { - pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} - p.cur.err = pe - p.done = true - return pe -} - -// Numbers and identifiers are matched by [-+._A-Za-z0-9] -func isIdentOrNumberChar(c byte) bool { - switch { - case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': - return true - case '0' <= c && c <= '9': - return true - } - switch c { - case '-', '+', '.', '_': - return true - } - return false -} - -func isWhitespace(c byte) bool { - switch c { - case ' ', '\t', '\n', '\r': - return true - } - return false -} - -func isQuote(c byte) bool { - switch c { - case '"', '\'': - return true - } - return false -} - -func (p *textParser) skipWhitespace() { - i := 0 - for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { - if p.s[i] == '#' { - // comment; skip to end of line or input - for i < len(p.s) && p.s[i] != '\n' { - i++ - } - if i == len(p.s) { - break - } - } - if p.s[i] == '\n' { - p.line++ - } - i++ - } - p.offset += i - p.s = p.s[i:len(p.s)] - if len(p.s) == 0 { - p.done = true - } -} - -func (p *textParser) advance() { - // Skip whitespace - p.skipWhitespace() - if p.done { - return - } - - // Start of non-whitespace - p.cur.err = nil - p.cur.offset, p.cur.line = p.offset, p.line - p.cur.unquoted = "" - switch p.s[0] { - case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': - // Single symbol - p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] - case '"', '\'': - // Quoted string - i := 1 - for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { - if p.s[i] == '\\' && i+1 < len(p.s) { - // skip escaped char - i++ - } - i++ - } - if i >= len(p.s) || p.s[i] != p.s[0] { - p.errorf("unmatched quote") - return - } - unq, err := unquoteC(p.s[1:i], rune(p.s[0])) - if err != nil { - p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) - return - } - p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] - p.cur.unquoted = unq - default: - i := 0 - for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { - i++ - } - if i == 0 { - p.errorf("unexpected byte %#x", p.s[0]) - return - } - p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] - } - p.offset += len(p.cur.value) -} - -var ( - errBadUTF8 = errors.New("proto: bad UTF-8") -) - -func unquoteC(s string, quote rune) (string, error) { - // This is based on C++'s tokenizer.cc. - // Despite its name, this is *not* parsing C syntax. - // For instance, "\0" is an invalid quoted string. - - // Avoid allocation in trivial cases. - simple := true - for _, r := range s { - if r == '\\' || r == quote { - simple = false - break - } - } - if simple { - return s, nil - } - - buf := make([]byte, 0, 3*len(s)/2) - for len(s) > 0 { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", errBadUTF8 - } - s = s[n:] - if r != '\\' { - if r < utf8.RuneSelf { - buf = append(buf, byte(r)) - } else { - buf = append(buf, string(r)...) - } - continue - } - - ch, tail, err := unescape(s) - if err != nil { - return "", err - } - buf = append(buf, ch...) - s = tail - } - return string(buf), nil -} - -func unescape(s string) (ch string, tail string, err error) { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", "", errBadUTF8 - } - s = s[n:] - switch r { - case 'a': - return "\a", s, nil - case 'b': - return "\b", s, nil - case 'f': - return "\f", s, nil - case 'n': - return "\n", s, nil - case 'r': - return "\r", s, nil - case 't': - return "\t", s, nil - case 'v': - return "\v", s, nil - case '?': - return "?", s, nil // trigraph workaround - case '\'', '"', '\\': - return string(r), s, nil - case '0', '1', '2', '3', '4', '5', '6', '7': - if len(s) < 2 { - return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) - } - ss := string(r) + s[:2] - s = s[2:] - i, err := strconv.ParseUint(ss, 8, 8) - if err != nil { - return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) - } - return string([]byte{byte(i)}), s, nil - case 'x', 'X', 'u', 'U': - var n int - switch r { - case 'x', 'X': - n = 2 - case 'u': - n = 4 - case 'U': - n = 8 - } - if len(s) < n { - return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) - } - ss := s[:n] - s = s[n:] - i, err := strconv.ParseUint(ss, 16, 64) - if err != nil { - return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) - } - if r == 'x' || r == 'X' { - return string([]byte{byte(i)}), s, nil - } - if i > utf8.MaxRune { - return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) - } - return string(i), s, nil - } - return "", "", fmt.Errorf(`unknown escape \%c`, r) -} - -// Back off the parser by one token. Can only be done between calls to next(). -// It makes the next advance() a no-op. -func (p *textParser) back() { p.backed = true } - -// Advances the parser and returns the new current token. -func (p *textParser) next() *token { - if p.backed || p.done { - p.backed = false - return &p.cur - } - p.advance() - if p.done { - p.cur.value = "" - } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { - // Look for multiple quoted strings separated by whitespace, - // and concatenate them. - cat := p.cur - for { - p.skipWhitespace() - if p.done || !isQuote(p.s[0]) { - break - } - p.advance() - if p.cur.err != nil { - return &p.cur - } - cat.value += " " + p.cur.value - cat.unquoted += p.cur.unquoted - } - p.done = false // parser may have seen EOF, but we want to return cat - p.cur = cat - } - return &p.cur -} - -func (p *textParser) consumeToken(s string) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != s { - p.back() - return p.errorf("expected %q, found %q", s, tok.value) - } - return nil -} - -// Return a RequiredNotSetError indicating which required field was not set. -func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < st.NumField(); i++ { - if !isNil(sv.Field(i)) { - continue - } - - props := sprops.Prop[i] - if props.Required { - return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} - } - } - return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen -} - -// Returns the index in the struct for the named field, as well as the parsed tag properties. -func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { - i, ok := sprops.decoderOrigNames[name] - if ok { - return i, sprops.Prop[i], true - } - return -1, nil, false -} - -// Consume a ':' from the input stream (if the next token is a colon), -// returning an error if a colon is needed but not present. -func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ":" { - // Colon is optional when the field is a group or message. - needColon := true - switch props.Wire { - case "group": - needColon = false - case "bytes": - // A "bytes" field is either a message, a string, or a repeated field; - // those three become *T, *string and []T respectively, so we can check for - // this field being a pointer to a non-string. - if typ.Kind() == reflect.Ptr { - // *T or *string - if typ.Elem().Kind() == reflect.String { - break - } - } else if typ.Kind() == reflect.Slice { - // []T or []*T - if typ.Elem().Kind() != reflect.Ptr { - break - } - } else if typ.Kind() == reflect.String { - // The proto3 exception is for a string field, - // which requires a colon. - break - } - needColon = false - } - if needColon { - return p.errorf("expected ':', found %q", tok.value) - } - p.back() - } - return nil -} - -func (p *textParser) readStruct(sv reflect.Value, terminator string) error { - st := sv.Type() - sprops := GetProperties(st) - reqCount := sprops.reqCount - var reqFieldErr error - fieldSet := make(map[string]bool) - // A struct is a sequence of "name: value", terminated by one of - // '>' or '}', or the end of the input. A name may also be - // "[extension]" or "[type/url]". - // - // The whole struct can also be an expanded Any message, like: - // [type/url] < ... struct contents ... > - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - if tok.value == "[" { - // Looks like an extension or an Any. - // - // TODO: Check whether we need to handle - // namespace rooted names (e.g. ".something.Foo"). - extName, err := p.consumeExtName() - if err != nil { - return err - } - - if s := strings.LastIndex(extName, "/"); s >= 0 { - // If it contains a slash, it's an Any type URL. - messageName := extName[s+1:] - mt := MessageType(messageName) - if mt == nil { - return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) - } - tok = p.next() - if tok.err != nil { - return tok.err - } - // consume an optional colon - if tok.value == ":" { - tok = p.next() - if tok.err != nil { - return tok.err - } - } - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - v := reflect.New(mt.Elem()) - if pe := p.readStruct(v.Elem(), terminator); pe != nil { - return pe - } - b, err := Marshal(v.Interface().(Message)) - if err != nil { - return p.errorf("failed to marshal message of type %q: %v", messageName, err) - } - if fieldSet["type_url"] { - return p.errorf(anyRepeatedlyUnpacked, "type_url") - } - if fieldSet["value"] { - return p.errorf(anyRepeatedlyUnpacked, "value") - } - sv.FieldByName("TypeUrl").SetString(extName) - sv.FieldByName("Value").SetBytes(b) - fieldSet["type_url"] = true - fieldSet["value"] = true - continue - } - - var desc *ExtensionDesc - // This could be faster, but it's functional. - // TODO: Do something smarter than a linear scan. - for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { - if d.Name == extName { - desc = d - break - } - } - if desc == nil { - return p.errorf("unrecognized extension %q", extName) - } - - props := &Properties{} - props.Parse(desc.Tag) - - typ := reflect.TypeOf(desc.ExtensionType) - if err := p.checkForColon(props, typ); err != nil { - return err - } - - rep := desc.repeated() - - // Read the extension structure, and set it in - // the value we're constructing. - var ext reflect.Value - if !rep { - ext = reflect.New(typ).Elem() - } else { - ext = reflect.New(typ.Elem()).Elem() - } - if err := p.readAny(ext, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - ep := sv.Addr().Interface().(Message) - if !rep { - SetExtension(ep, desc, ext.Interface()) - } else { - old, err := GetExtension(ep, desc) - var sl reflect.Value - if err == nil { - sl = reflect.ValueOf(old) // existing slice - } else { - sl = reflect.MakeSlice(typ, 0, 1) - } - sl = reflect.Append(sl, ext) - SetExtension(ep, desc, sl.Interface()) - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - continue - } - - // This is a normal, non-extension field. - name := tok.value - var dst reflect.Value - fi, props, ok := structFieldByName(sprops, name) - if ok { - dst = sv.Field(fi) - } else if oop, ok := sprops.OneofTypes[name]; ok { - // It is a oneof. - props = oop.Prop - nv := reflect.New(oop.Type.Elem()) - dst = nv.Elem().Field(0) - field := sv.Field(oop.Field) - if !field.IsNil() { - return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) - } - field.Set(nv) - } - if !dst.IsValid() { - return p.errorf("unknown field name %q in %v", name, st) - } - - if dst.Kind() == reflect.Map { - // Consume any colon. - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Construct the map if it doesn't already exist. - if dst.IsNil() { - dst.Set(reflect.MakeMap(dst.Type())) - } - key := reflect.New(dst.Type().Key()).Elem() - val := reflect.New(dst.Type().Elem()).Elem() - - // The map entry should be this sequence of tokens: - // < key : KEY value : VALUE > - // However, implementations may omit key or value, and technically - // we should support them in any order. See b/28924776 for a time - // this went wrong. - - tok := p.next() - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - switch tok.value { - case "key": - if err := p.consumeToken(":"); err != nil { - return err - } - if err := p.readAny(key, props.MapKeyProp); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - case "value": - if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil { - return err - } - if err := p.readAny(val, props.MapValProp); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - default: - p.back() - return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) - } - } - - dst.SetMapIndex(key, val) - continue - } - - // Check that it's not already set if it's not a repeated field. - if !props.Repeated && fieldSet[name] { - return p.errorf("non-repeated field %q was repeated", name) - } - - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Parse into the field. - fieldSet[name] = true - if err := p.readAny(dst, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - if props.Required { - reqCount-- - } - - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - - } - - if reqCount > 0 { - return p.missingRequiredFieldError(sv) - } - return reqFieldErr -} - -// consumeExtName consumes extension name or expanded Any type URL and the -// following ']'. It returns the name or URL consumed. -func (p *textParser) consumeExtName() (string, error) { - tok := p.next() - if tok.err != nil { - return "", tok.err - } - - // If extension name or type url is quoted, it's a single token. - if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { - name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) - if err != nil { - return "", err - } - return name, p.consumeToken("]") - } - - // Consume everything up to "]" - var parts []string - for tok.value != "]" { - parts = append(parts, tok.value) - tok = p.next() - if tok.err != nil { - return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) - } - if p.done && tok.value != "]" { - return "", p.errorf("unclosed type_url or extension name") - } - } - return strings.Join(parts, ""), nil -} - -// consumeOptionalSeparator consumes an optional semicolon or comma. -// It is used in readStruct to provide backward compatibility. -func (p *textParser) consumeOptionalSeparator() error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ";" && tok.value != "," { - p.back() - } - return nil -} - -func (p *textParser) readAny(v reflect.Value, props *Properties) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "" { - return p.errorf("unexpected EOF") - } - - switch fv := v; fv.Kind() { - case reflect.Slice: - at := v.Type() - if at.Elem().Kind() == reflect.Uint8 { - // Special case for []byte - if tok.value[0] != '"' && tok.value[0] != '\'' { - // Deliberately written out here, as the error after - // this switch statement would write "invalid []byte: ...", - // which is not as user-friendly. - return p.errorf("invalid string: %v", tok.value) - } - bytes := []byte(tok.unquoted) - fv.Set(reflect.ValueOf(bytes)) - return nil - } - // Repeated field. - if tok.value == "[" { - // Repeated field with list notation, like [1,2,3]. - for { - fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) - err := p.readAny(fv.Index(fv.Len()-1), props) - if err != nil { - return err - } - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "]" { - break - } - if tok.value != "," { - return p.errorf("Expected ']' or ',' found %q", tok.value) - } - } - return nil - } - // One value of the repeated field. - p.back() - fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) - return p.readAny(fv.Index(fv.Len()-1), props) - case reflect.Bool: - // true/1/t/True or false/f/0/False. - switch tok.value { - case "true", "1", "t", "True": - fv.SetBool(true) - return nil - case "false", "0", "f", "False": - fv.SetBool(false) - return nil - } - case reflect.Float32, reflect.Float64: - v := tok.value - // Ignore 'f' for compatibility with output generated by C++, but don't - // remove 'f' when the value is "-inf" or "inf". - if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { - v = v[:len(v)-1] - } - if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { - fv.SetFloat(f) - return nil - } - case reflect.Int32: - if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { - fv.SetInt(x) - return nil - } - - if len(props.Enum) == 0 { - break - } - m, ok := enumValueMaps[props.Enum] - if !ok { - break - } - x, ok := m[tok.value] - if !ok { - break - } - fv.SetInt(int64(x)) - return nil - case reflect.Int64: - if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { - fv.SetInt(x) - return nil - } - - case reflect.Ptr: - // A basic field (indirected through pointer), or a repeated message/group - p.back() - fv.Set(reflect.New(fv.Type().Elem())) - return p.readAny(fv.Elem(), props) - case reflect.String: - if tok.value[0] == '"' || tok.value[0] == '\'' { - fv.SetString(tok.unquoted) - return nil - } - case reflect.Struct: - var terminator string - switch tok.value { - case "{": - terminator = "}" - case "<": - terminator = ">" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - // TODO: Handle nested messages which implement encoding.TextUnmarshaler. - return p.readStruct(fv, terminator) - case reflect.Uint32: - if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) - return nil - } - case reflect.Uint64: - if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { - fv.SetUint(x) - return nil - } - } - return p.errorf("invalid %v: %v", v.Type(), tok.value) -} - -// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb -// before starting to unmarshal, so any existing data in pb is always removed. -// If a required field is not set and no other error occurs, -// UnmarshalText returns *RequiredNotSetError. -func UnmarshalText(s string, pb Message) error { - if um, ok := pb.(encoding.TextUnmarshaler); ok { - return um.UnmarshalText([]byte(s)) - } - pb.Reset() - v := reflect.ValueOf(pb) - return newTextParser(s).readStruct(v.Elem(), "") -} diff --git a/vendor/github.com/golang/protobuf/proto/wire.go b/vendor/github.com/golang/protobuf/proto/wire.go new file mode 100644 index 00000000..d7c28da5 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/wire.go @@ -0,0 +1,78 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + protoV2 "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Size returns the size in bytes of the wire-format encoding of m. +func Size(m Message) int { + if m == nil { + return 0 + } + mi := MessageV2(m) + return protoV2.Size(mi) +} + +// Marshal returns the wire-format encoding of m. +func Marshal(m Message) ([]byte, error) { + b, err := marshalAppend(nil, m, false) + if b == nil { + b = zeroBytes + } + return b, err +} + +var zeroBytes = make([]byte, 0, 0) + +func marshalAppend(buf []byte, m Message, deterministic bool) ([]byte, error) { + if m == nil { + return nil, ErrNil + } + mi := MessageV2(m) + nbuf, err := protoV2.MarshalOptions{ + Deterministic: deterministic, + AllowPartial: true, + }.MarshalAppend(buf, mi) + if err != nil { + return buf, err + } + if len(buf) == len(nbuf) { + if !mi.ProtoReflect().IsValid() { + return buf, ErrNil + } + } + return nbuf, checkRequiredNotSet(mi) +} + +// Unmarshal parses a wire-format message in b and places the decoded results in m. +// +// Unmarshal resets m before starting to unmarshal, so any existing data in m is always +// removed. Use UnmarshalMerge to preserve and append to existing data. +func Unmarshal(b []byte, m Message) error { + m.Reset() + return UnmarshalMerge(b, m) +} + +// UnmarshalMerge parses a wire-format message in b and places the decoded results in m. +func UnmarshalMerge(b []byte, m Message) error { + mi := MessageV2(m) + out, err := protoV2.UnmarshalOptions{ + AllowPartial: true, + Merge: true, + }.UnmarshalState(protoiface.UnmarshalInput{ + Buf: b, + Message: mi.ProtoReflect(), + }) + if err != nil { + return err + } + if out.Flags&protoiface.UnmarshalInitialized > 0 { + return nil + } + return checkRequiredNotSet(mi) +} diff --git a/vendor/github.com/golang/protobuf/proto/wrappers.go b/vendor/github.com/golang/protobuf/proto/wrappers.go new file mode 100644 index 00000000..398e3485 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/wrappers.go @@ -0,0 +1,34 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +// Bool stores v in a new bool value and returns a pointer to it. +func Bool(v bool) *bool { return &v } + +// Int stores v in a new int32 value and returns a pointer to it. +// +// Deprecated: Use Int32 instead. +func Int(v int) *int32 { return Int32(int32(v)) } + +// Int32 stores v in a new int32 value and returns a pointer to it. +func Int32(v int32) *int32 { return &v } + +// Int64 stores v in a new int64 value and returns a pointer to it. +func Int64(v int64) *int64 { return &v } + +// Uint32 stores v in a new uint32 value and returns a pointer to it. +func Uint32(v uint32) *uint32 { return &v } + +// Uint64 stores v in a new uint64 value and returns a pointer to it. +func Uint64(v uint64) *uint64 { return &v } + +// Float32 stores v in a new float32 value and returns a pointer to it. +func Float32(v float32) *float32 { return &v } + +// Float64 stores v in a new float64 value and returns a pointer to it. +func Float64(v float64) *float64 { return &v } + +// String stores v in a new string value and returns a pointer to it. +func String(v string) *string { return &v } diff --git a/vendor/github.com/gorilla/context/.travis.yml b/vendor/github.com/gorilla/context/.travis.yml deleted file mode 100644 index 6f440f1e..00000000 --- a/vendor/github.com/gorilla/context/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: go -sudo: false - -matrix: - include: - - go: 1.3 - - go: 1.4 - - go: 1.5 - - go: 1.6 - - go: 1.7 - - go: tip - allow_failures: - - go: tip - -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d .) - - go vet $(go list ./... | grep -v /vendor/) - - go test -v -race ./... diff --git a/vendor/github.com/gorilla/context/README.md b/vendor/github.com/gorilla/context/README.md deleted file mode 100644 index 08f86693..00000000 --- a/vendor/github.com/gorilla/context/README.md +++ /dev/null @@ -1,10 +0,0 @@ -context -======= -[![Build Status](https://travis-ci.org/gorilla/context.png?branch=master)](https://travis-ci.org/gorilla/context) - -gorilla/context is a general purpose registry for global request variables. - -> Note: gorilla/context, having been born well before `context.Context` existed, does not play well -> with the shallow copying of the request that [`http.Request.WithContext`](https://golang.org/pkg/net/http/#Request.WithContext) (added to net/http Go 1.7 onwards) performs. You should either use *just* gorilla/context, or moving forward, the new `http.Request.Context()`. - -Read the full documentation here: http://www.gorillatoolkit.org/pkg/context diff --git a/vendor/github.com/gorilla/context/context.go b/vendor/github.com/gorilla/context/context.go deleted file mode 100644 index 81cb128b..00000000 --- a/vendor/github.com/gorilla/context/context.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2012 The Gorilla Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package context - -import ( - "net/http" - "sync" - "time" -) - -var ( - mutex sync.RWMutex - data = make(map[*http.Request]map[interface{}]interface{}) - datat = make(map[*http.Request]int64) -) - -// Set stores a value for a given key in a given request. -func Set(r *http.Request, key, val interface{}) { - mutex.Lock() - if data[r] == nil { - data[r] = make(map[interface{}]interface{}) - datat[r] = time.Now().Unix() - } - data[r][key] = val - mutex.Unlock() -} - -// Get returns a value stored for a given key in a given request. -func Get(r *http.Request, key interface{}) interface{} { - mutex.RLock() - if ctx := data[r]; ctx != nil { - value := ctx[key] - mutex.RUnlock() - return value - } - mutex.RUnlock() - return nil -} - -// GetOk returns stored value and presence state like multi-value return of map access. -func GetOk(r *http.Request, key interface{}) (interface{}, bool) { - mutex.RLock() - if _, ok := data[r]; ok { - value, ok := data[r][key] - mutex.RUnlock() - return value, ok - } - mutex.RUnlock() - return nil, false -} - -// GetAll returns all stored values for the request as a map. Nil is returned for invalid requests. -func GetAll(r *http.Request) map[interface{}]interface{} { - mutex.RLock() - if context, ok := data[r]; ok { - result := make(map[interface{}]interface{}, len(context)) - for k, v := range context { - result[k] = v - } - mutex.RUnlock() - return result - } - mutex.RUnlock() - return nil -} - -// GetAllOk returns all stored values for the request as a map and a boolean value that indicates if -// the request was registered. -func GetAllOk(r *http.Request) (map[interface{}]interface{}, bool) { - mutex.RLock() - context, ok := data[r] - result := make(map[interface{}]interface{}, len(context)) - for k, v := range context { - result[k] = v - } - mutex.RUnlock() - return result, ok -} - -// Delete removes a value stored for a given key in a given request. -func Delete(r *http.Request, key interface{}) { - mutex.Lock() - if data[r] != nil { - delete(data[r], key) - } - mutex.Unlock() -} - -// Clear removes all values stored for a given request. -// -// This is usually called by a handler wrapper to clean up request -// variables at the end of a request lifetime. See ClearHandler(). -func Clear(r *http.Request) { - mutex.Lock() - clear(r) - mutex.Unlock() -} - -// clear is Clear without the lock. -func clear(r *http.Request) { - delete(data, r) - delete(datat, r) -} - -// Purge removes request data stored for longer than maxAge, in seconds. -// It returns the amount of requests removed. -// -// If maxAge <= 0, all request data is removed. -// -// This is only used for sanity check: in case context cleaning was not -// properly set some request data can be kept forever, consuming an increasing -// amount of memory. In case this is detected, Purge() must be called -// periodically until the problem is fixed. -func Purge(maxAge int) int { - mutex.Lock() - count := 0 - if maxAge <= 0 { - count = len(data) - data = make(map[*http.Request]map[interface{}]interface{}) - datat = make(map[*http.Request]int64) - } else { - min := time.Now().Unix() - int64(maxAge) - for r := range data { - if datat[r] < min { - clear(r) - count++ - } - } - } - mutex.Unlock() - return count -} - -// ClearHandler wraps an http.Handler and clears request values at the end -// of a request lifetime. -func ClearHandler(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - defer Clear(r) - h.ServeHTTP(w, r) - }) -} diff --git a/vendor/github.com/gorilla/context/doc.go b/vendor/github.com/gorilla/context/doc.go deleted file mode 100644 index 448d1bfc..00000000 --- a/vendor/github.com/gorilla/context/doc.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2012 The Gorilla Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -/* -Package context stores values shared during a request lifetime. - -Note: gorilla/context, having been born well before `context.Context` existed, -does not play well > with the shallow copying of the request that -[`http.Request.WithContext`](https://golang.org/pkg/net/http/#Request.WithContext) -(added to net/http Go 1.7 onwards) performs. You should either use *just* -gorilla/context, or moving forward, the new `http.Request.Context()`. - -For example, a router can set variables extracted from the URL and later -application handlers can access those values, or it can be used to store -sessions values to be saved at the end of a request. There are several -others common uses. - -The idea was posted by Brad Fitzpatrick to the go-nuts mailing list: - - http://groups.google.com/group/golang-nuts/msg/e2d679d303aa5d53 - -Here's the basic usage: first define the keys that you will need. The key -type is interface{} so a key can be of any type that supports equality. -Here we define a key using a custom int type to avoid name collisions: - - package foo - - import ( - "github.com/gorilla/context" - ) - - type key int - - const MyKey key = 0 - -Then set a variable. Variables are bound to an http.Request object, so you -need a request instance to set a value: - - context.Set(r, MyKey, "bar") - -The application can later access the variable using the same key you provided: - - func MyHandler(w http.ResponseWriter, r *http.Request) { - // val is "bar". - val := context.Get(r, foo.MyKey) - - // returns ("bar", true) - val, ok := context.GetOk(r, foo.MyKey) - // ... - } - -And that's all about the basic usage. We discuss some other ideas below. - -Any type can be stored in the context. To enforce a given type, make the key -private and wrap Get() and Set() to accept and return values of a specific -type: - - type key int - - const mykey key = 0 - - // GetMyKey returns a value for this package from the request values. - func GetMyKey(r *http.Request) SomeType { - if rv := context.Get(r, mykey); rv != nil { - return rv.(SomeType) - } - return nil - } - - // SetMyKey sets a value for this package in the request values. - func SetMyKey(r *http.Request, val SomeType) { - context.Set(r, mykey, val) - } - -Variables must be cleared at the end of a request, to remove all values -that were stored. This can be done in an http.Handler, after a request was -served. Just call Clear() passing the request: - - context.Clear(r) - -...or use ClearHandler(), which conveniently wraps an http.Handler to clear -variables at the end of a request lifetime. - -The Routers from the packages gorilla/mux and gorilla/pat call Clear() -so if you are using either of them you don't need to clear the context manually. -*/ -package context diff --git a/vendor/github.com/gorilla/handlers/.travis.yml b/vendor/github.com/gorilla/handlers/.travis.yml deleted file mode 100644 index 1ba74af1..00000000 --- a/vendor/github.com/gorilla/handlers/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -language: go -sudo: false - -matrix: - include: - - go: 1.4 - - go: 1.5 - - go: 1.6 - - go: 1.7 - - go: 1.8 - - go: tip - allow_failures: - - go: tip - -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d .) - - go vet $(go list ./... | grep -v /vendor/) - - go test -v -race ./... - diff --git a/vendor/github.com/gorilla/handlers/README.md b/vendor/github.com/gorilla/handlers/README.md index 4a6895dc..6eba66bf 100644 --- a/vendor/github.com/gorilla/handlers/README.md +++ b/vendor/github.com/gorilla/handlers/README.md @@ -1,6 +1,7 @@ gorilla/handlers ================ -[![GoDoc](https://godoc.org/github.com/gorilla/handlers?status.svg)](https://godoc.org/github.com/gorilla/handlers) [![Build Status](https://travis-ci.org/gorilla/handlers.svg?branch=master)](https://travis-ci.org/gorilla/handlers) +[![GoDoc](https://godoc.org/github.com/gorilla/handlers?status.svg)](https://godoc.org/github.com/gorilla/handlers) +[![CircleCI](https://circleci.com/gh/gorilla/handlers.svg?style=svg)](https://circleci.com/gh/gorilla/handlers) [![Sourcegraph](https://sourcegraph.com/github.com/gorilla/handlers/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/handlers?badge) @@ -25,7 +26,7 @@ with Go's `net/http` package (or any framework supporting `http.Handler`), inclu * [**RecoveryHandler**](https://godoc.org/github.com/gorilla/handlers#RecoveryHandler) for recovering from unexpected panics. Other handlers are documented [on the Gorilla -website](http://www.gorillatoolkit.org/pkg/handlers). +website](https://www.gorillatoolkit.org/pkg/handlers). ## Example diff --git a/vendor/github.com/gorilla/handlers/compress.go b/vendor/github.com/gorilla/handlers/compress.go index e8345d79..e46a7bfd 100644 --- a/vendor/github.com/gorilla/handlers/compress.go +++ b/vendor/github.com/gorilla/handlers/compress.go @@ -80,6 +80,7 @@ func CompressHandlerLevel(h http.Handler, level int) http.Handler { switch strings.TrimSpace(enc) { case "gzip": w.Header().Set("Content-Encoding", "gzip") + r.Header.Del("Accept-Encoding") w.Header().Add("Vary", "Accept-Encoding") gw, _ := gzip.NewWriterLevel(w, level) @@ -111,6 +112,7 @@ func CompressHandlerLevel(h http.Handler, level int) http.Handler { break L case "deflate": w.Header().Set("Content-Encoding", "deflate") + r.Header.Del("Accept-Encoding") w.Header().Add("Vary", "Accept-Encoding") fw, _ := flate.NewWriter(w, level) diff --git a/vendor/github.com/gorilla/handlers/cors.go b/vendor/github.com/gorilla/handlers/cors.go index 1acf80d1..0dcdffb3 100644 --- a/vendor/github.com/gorilla/handlers/cors.go +++ b/vendor/github.com/gorilla/handlers/cors.go @@ -19,14 +19,16 @@ type cors struct { maxAge int ignoreOptions bool allowCredentials bool + optionStatusCode int } // OriginValidator takes an origin string and returns whether or not that origin is allowed. type OriginValidator func(string) bool var ( - defaultCorsMethods = []string{"GET", "HEAD", "POST"} - defaultCorsHeaders = []string{"Accept", "Accept-Language", "Content-Language", "Origin"} + defaultCorsOptionStatusCode = 200 + defaultCorsMethods = []string{"GET", "HEAD", "POST"} + defaultCorsHeaders = []string{"Accept", "Accept-Language", "Content-Language", "Origin"} // (WebKit/Safari v9 sends the Origin header by default in AJAX requests) ) @@ -130,6 +132,7 @@ func (ch *cors) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Set(corsAllowOriginHeader, returnOrigin) if r.Method == corsOptionMethod { + w.WriteHeader(ch.optionStatusCode) return } ch.h.ServeHTTP(w, r) @@ -164,9 +167,10 @@ func CORS(opts ...CORSOption) func(http.Handler) http.Handler { func parseCORSOptions(opts ...CORSOption) *cors { ch := &cors{ - allowedMethods: defaultCorsMethods, - allowedHeaders: defaultCorsHeaders, - allowedOrigins: []string{}, + allowedMethods: defaultCorsMethods, + allowedHeaders: defaultCorsHeaders, + allowedOrigins: []string{}, + optionStatusCode: defaultCorsOptionStatusCode, } for _, option := range opts { @@ -251,7 +255,20 @@ func AllowedOriginValidator(fn OriginValidator) CORSOption { } } -// ExposeHeaders can be used to specify headers that are available +// OptionStatusCode sets a custom status code on the OPTIONS requests. +// Default behaviour sets it to 200 to reflect best practices. This is option is not mandatory +// and can be used if you need a custom status code (i.e 204). +// +// More informations on the spec: +// https://fetch.spec.whatwg.org/#cors-preflight-fetch +func OptionStatusCode(code int) CORSOption { + return func(ch *cors) error { + ch.optionStatusCode = code + return nil + } +} + +// ExposedHeaders can be used to specify headers that are available // and will not be stripped out by the user-agent. func ExposedHeaders(headers []string) CORSOption { return func(ch *cors) error { diff --git a/vendor/github.com/gorilla/handlers/go.mod b/vendor/github.com/gorilla/handlers/go.mod new file mode 100644 index 00000000..d9c9815c --- /dev/null +++ b/vendor/github.com/gorilla/handlers/go.mod @@ -0,0 +1 @@ +module github.com/gorilla/handlers diff --git a/vendor/github.com/gorilla/handlers/handlers_go18.go b/vendor/github.com/gorilla/handlers/handlers_go18.go index 35eb8d4f..40f69146 100644 --- a/vendor/github.com/gorilla/handlers/handlers_go18.go +++ b/vendor/github.com/gorilla/handlers/handlers_go18.go @@ -19,3 +19,11 @@ func (l *responseLogger) Push(target string, opts *http.PushOptions) error { } return p.Push(target, opts) } + +func (c *compressResponseWriter) Push(target string, opts *http.PushOptions) error { + p, ok := c.ResponseWriter.(http.Pusher) + if !ok { + return fmt.Errorf("compressResponseWriter does not implement http.Pusher") + } + return p.Push(target, opts) +} diff --git a/vendor/github.com/gorilla/handlers/logging.go b/vendor/github.com/gorilla/handlers/logging.go index cbd182f3..88c25e72 100644 --- a/vendor/github.com/gorilla/handlers/logging.go +++ b/vendor/github.com/gorilla/handlers/logging.go @@ -16,7 +16,7 @@ import ( // Logging -// FormatterParams is the structure any formatter will be handed when time to log comes +// LogFormatterParams is the structure any formatter will be handed when time to log comes type LogFormatterParams struct { Request *http.Request URL url.URL @@ -43,6 +43,9 @@ func (h loggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { url := *req.URL h.handler.ServeHTTP(logger, req) + if req.MultipartForm != nil { + req.MultipartForm.RemoveAll() + } params := LogFormatterParams{ Request: req, diff --git a/vendor/github.com/gorilla/handlers/proxy_headers.go b/vendor/github.com/gorilla/handlers/proxy_headers.go index 0be750fd..ed939dce 100644 --- a/vendor/github.com/gorilla/handlers/proxy_headers.go +++ b/vendor/github.com/gorilla/handlers/proxy_headers.go @@ -31,8 +31,8 @@ var ( // ProxyHeaders inspects common reverse proxy headers and sets the corresponding // fields in the HTTP request struct. These are X-Forwarded-For and X-Real-IP // for the remote (client) IP address, X-Forwarded-Proto or X-Forwarded-Scheme -// for the scheme (http|https) and the RFC7239 Forwarded header, which may -// include both client IPs and schemes. +// for the scheme (http|https), X-Forwarded-Host for the host and the RFC7239 +// Forwarded header, which may include both client IPs and schemes. // // NOTE: This middleware should only be used when behind a reverse // proxy like nginx, HAProxy or Apache. Reverse proxies that don't (or are diff --git a/vendor/github.com/gorilla/mux/.travis.yml b/vendor/github.com/gorilla/mux/.travis.yml deleted file mode 100644 index ad0935db..00000000 --- a/vendor/github.com/gorilla/mux/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -language: go -sudo: false - -matrix: - include: - - go: 1.5.x - - go: 1.6.x - - go: 1.7.x - - go: 1.8.x - - go: 1.9.x - - go: 1.10.x - - go: tip - allow_failures: - - go: tip - -install: - - # Skip - -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d .) - - go tool vet . - - go test -v -race ./... diff --git a/vendor/github.com/gorilla/mux/AUTHORS b/vendor/github.com/gorilla/mux/AUTHORS new file mode 100644 index 00000000..b722392e --- /dev/null +++ b/vendor/github.com/gorilla/mux/AUTHORS @@ -0,0 +1,8 @@ +# This is the official list of gorilla/mux authors for copyright purposes. +# +# Please keep the list sorted. + +Google LLC (https://opensource.google.com/) +Kamil Kisielk +Matt Silverlock +Rodrigo Moraes (https://github.com/moraes) diff --git a/vendor/github.com/gorilla/mux/ISSUE_TEMPLATE.md b/vendor/github.com/gorilla/mux/ISSUE_TEMPLATE.md deleted file mode 100644 index 232be82e..00000000 --- a/vendor/github.com/gorilla/mux/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,11 +0,0 @@ -**What version of Go are you running?** (Paste the output of `go version`) - - -**What version of gorilla/mux are you at?** (Paste the output of `git rev-parse HEAD` inside `$GOPATH/src/github.com/gorilla/mux`) - - -**Describe your problem** (and what you have tried so far) - - -**Paste a minimal, runnable, reproduction of your issue below** (use backticks to format it) - diff --git a/vendor/github.com/gorilla/mux/LICENSE b/vendor/github.com/gorilla/mux/LICENSE index 0e5fb872..6903df63 100644 --- a/vendor/github.com/gorilla/mux/LICENSE +++ b/vendor/github.com/gorilla/mux/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2012 Rodrigo Moraes. All rights reserved. +Copyright (c) 2012-2018 The Gorilla Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/vendor/github.com/gorilla/mux/README.md b/vendor/github.com/gorilla/mux/README.md index e424397a..35eea9f1 100644 --- a/vendor/github.com/gorilla/mux/README.md +++ b/vendor/github.com/gorilla/mux/README.md @@ -1,12 +1,12 @@ # gorilla/mux [![GoDoc](https://godoc.org/github.com/gorilla/mux?status.svg)](https://godoc.org/github.com/gorilla/mux) -[![Build Status](https://travis-ci.org/gorilla/mux.svg?branch=master)](https://travis-ci.org/gorilla/mux) +[![CircleCI](https://circleci.com/gh/gorilla/mux.svg?style=svg)](https://circleci.com/gh/gorilla/mux) [![Sourcegraph](https://sourcegraph.com/github.com/gorilla/mux/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/mux?badge) -![Gorilla Logo](http://www.gorillatoolkit.org/static/images/gorilla-icon-64.png) +![Gorilla Logo](https://cloud-cdn.questionable.services/gorilla-icon-64.png) -http://www.gorillatoolkit.org/pkg/mux +https://www.gorillatoolkit.org/pkg/mux Package `gorilla/mux` implements a request router and dispatcher for matching incoming requests to their respective handler. @@ -25,10 +25,12 @@ The name mux stands for "HTTP request multiplexer". Like the standard `http.Serv * [Examples](#examples) * [Matching Routes](#matching-routes) * [Static Files](#static-files) +* [Serving Single Page Applications](#serving-single-page-applications) (e.g. React, Vue, Ember.js, etc.) * [Registered URLs](#registered-urls) * [Walking Routes](#walking-routes) * [Graceful Shutdown](#graceful-shutdown) * [Middleware](#middleware) +* [Handling CORS Requests](#handling-cors-requests) * [Testing Handlers](#testing-handlers) * [Full Example](#full-example) @@ -88,7 +90,7 @@ r := mux.NewRouter() // Only matches if domain is "www.example.com". r.Host("www.example.com") // Matches a dynamic subdomain. -r.Host("{subdomain:[a-z]+}.domain.com") +r.Host("{subdomain:[a-z]+}.example.com") ``` There are several other matchers that can be added. To match path prefixes: @@ -210,6 +212,93 @@ func main() { } ``` +### Serving Single Page Applications + +Most of the time it makes sense to serve your SPA on a separate web server from your API, +but sometimes it's desirable to serve them both from one place. It's possible to write a simple +handler for serving your SPA (for use with React Router's [BrowserRouter](https://reacttraining.com/react-router/web/api/BrowserRouter) for example), and leverage +mux's powerful routing for your API endpoints. + +```go +package main + +import ( + "encoding/json" + "log" + "net/http" + "os" + "path/filepath" + "time" + + "github.com/gorilla/mux" +) + +// spaHandler implements the http.Handler interface, so we can use it +// to respond to HTTP requests. The path to the static directory and +// path to the index file within that static directory are used to +// serve the SPA in the given static directory. +type spaHandler struct { + staticPath string + indexPath string +} + +// ServeHTTP inspects the URL path to locate a file within the static dir +// on the SPA handler. If a file is found, it will be served. If not, the +// file located at the index path on the SPA handler will be served. This +// is suitable behavior for serving an SPA (single page application). +func (h spaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // get the absolute path to prevent directory traversal + path, err := filepath.Abs(r.URL.Path) + if err != nil { + // if we failed to get the absolute path respond with a 400 bad request + // and stop + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + // prepend the path with the path to the static directory + path = filepath.Join(h.staticPath, path) + + // check whether a file exists at the given path + _, err = os.Stat(path) + if os.IsNotExist(err) { + // file does not exist, serve index.html + http.ServeFile(w, r, filepath.Join(h.staticPath, h.indexPath)) + return + } else if err != nil { + // if we got an error (that wasn't that the file doesn't exist) stating the + // file, return a 500 internal server error and stop + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + // otherwise, use http.FileServer to serve the static dir + http.FileServer(http.Dir(h.staticPath)).ServeHTTP(w, r) +} + +func main() { + router := mux.NewRouter() + + router.HandleFunc("/api/health", func(w http.ResponseWriter, r *http.Request) { + // an example API handler + json.NewEncoder(w).Encode(map[string]bool{"ok": true}) + }) + + spa := spaHandler{staticPath: "build", indexPath: "index.html"} + router.PathPrefix("/").Handler(spa) + + srv := &http.Server{ + Handler: router, + Addr: "127.0.0.1:8000", + // Good practice: enforce timeouts for servers you create! + WriteTimeout: 15 * time.Second, + ReadTimeout: 15 * time.Second, + } + + log.Fatal(srv.ListenAndServe()) +} +``` + ### Registered URLs Now let's see how to build registered URLs. @@ -238,13 +327,13 @@ This also works for host and query value variables: ```go r := mux.NewRouter() -r.Host("{subdomain}.domain.com"). +r.Host("{subdomain}.example.com"). Path("/articles/{category}/{id:[0-9]+}"). Queries("filter", "{filter}"). HandlerFunc(ArticleHandler). Name("article") -// url.String() will be "http://news.domain.com/articles/technology/42?filter=gorilla" +// url.String() will be "http://news.example.com/articles/technology/42?filter=gorilla" url, err := r.Get("article").URL("subdomain", "news", "category", "technology", "id", "42", @@ -264,7 +353,7 @@ r.HeadersRegexp("Content-Type", "application/(text|json)") There's also a way to build only the URL host or path for a route: use the methods `URLHost()` or `URLPath()` instead. For the previous route, we would do: ```go -// "http://news.domain.com/" +// "http://news.example.com/" host, err := r.Get("article").URLHost("subdomain", "news") // "/articles/technology/42" @@ -275,12 +364,12 @@ And if you use subrouters, host and path defined separately can be built as well ```go r := mux.NewRouter() -s := r.Host("{subdomain}.domain.com").Subrouter() +s := r.Host("{subdomain}.example.com").Subrouter() s.Path("/articles/{category}/{id:[0-9]+}"). HandlerFunc(ArticleHandler). Name("article") -// "http://news.domain.com/articles/technology/42" +// "http://news.example.com/articles/technology/42" url, err := r.Get("article").URL("subdomain", "news", "category", "technology", "id", "42") @@ -491,6 +580,73 @@ r.Use(amw.Middleware) Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to. Middlewares _should_ write to `ResponseWriter` if they _are_ going to terminate the request, and they _should not_ write to `ResponseWriter` if they _are not_ going to terminate it. +### Handling CORS Requests + +[CORSMethodMiddleware](https://godoc.org/github.com/gorilla/mux#CORSMethodMiddleware) intends to make it easier to strictly set the `Access-Control-Allow-Methods` response header. + +* You will still need to use your own CORS handler to set the other CORS headers such as `Access-Control-Allow-Origin` +* The middleware will set the `Access-Control-Allow-Methods` header to all the method matchers (e.g. `r.Methods(http.MethodGet, http.MethodPut, http.MethodOptions)` -> `Access-Control-Allow-Methods: GET,PUT,OPTIONS`) on a route +* If you do not specify any methods, then: +> _Important_: there must be an `OPTIONS` method matcher for the middleware to set the headers. + +Here is an example of using `CORSMethodMiddleware` along with a custom `OPTIONS` handler to set all the required CORS headers: + +```go +package main + +import ( + "net/http" + "github.com/gorilla/mux" +) + +func main() { + r := mux.NewRouter() + + // IMPORTANT: you must specify an OPTIONS method matcher for the middleware to set CORS headers + r.HandleFunc("/foo", fooHandler).Methods(http.MethodGet, http.MethodPut, http.MethodPatch, http.MethodOptions) + r.Use(mux.CORSMethodMiddleware(r)) + + http.ListenAndServe(":8080", r) +} + +func fooHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + if r.Method == http.MethodOptions { + return + } + + w.Write([]byte("foo")) +} +``` + +And an request to `/foo` using something like: + +```bash +curl localhost:8080/foo -v +``` + +Would look like: + +```bash +* Trying ::1... +* TCP_NODELAY set +* Connected to localhost (::1) port 8080 (#0) +> GET /foo HTTP/1.1 +> Host: localhost:8080 +> User-Agent: curl/7.59.0 +> Accept: */* +> +< HTTP/1.1 200 OK +< Access-Control-Allow-Methods: GET,PUT,PATCH,OPTIONS +< Access-Control-Allow-Origin: * +< Date: Fri, 28 Jun 2019 20:13:30 GMT +< Content-Length: 3 +< Content-Type: text/plain; charset=utf-8 +< +* Connection #0 to host localhost left intact +foo +``` + ### Testing Handlers Testing handlers in a Go web application is straightforward, and _mux_ doesn't complicate this any further. Given two files: `endpoints.go` and `endpoints_test.go`, here's how we'd test an application using _mux_. @@ -503,8 +659,8 @@ package main func HealthCheckHandler(w http.ResponseWriter, r *http.Request) { // A very simple health check. - w.WriteHeader(http.StatusOK) w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) // In the future we could report back on the status of our DB, or our cache // (e.g. Redis) by performing a simple PING, and include them in the response. diff --git a/vendor/github.com/gorilla/mux/context_gorilla.go b/vendor/github.com/gorilla/mux/context_gorilla.go deleted file mode 100644 index d7adaa8f..00000000 --- a/vendor/github.com/gorilla/mux/context_gorilla.go +++ /dev/null @@ -1,26 +0,0 @@ -// +build !go1.7 - -package mux - -import ( - "net/http" - - "github.com/gorilla/context" -) - -func contextGet(r *http.Request, key interface{}) interface{} { - return context.Get(r, key) -} - -func contextSet(r *http.Request, key, val interface{}) *http.Request { - if val == nil { - return r - } - - context.Set(r, key, val) - return r -} - -func contextClear(r *http.Request) { - context.Clear(r) -} diff --git a/vendor/github.com/gorilla/mux/context_native.go b/vendor/github.com/gorilla/mux/context_native.go deleted file mode 100644 index 209cbea7..00000000 --- a/vendor/github.com/gorilla/mux/context_native.go +++ /dev/null @@ -1,24 +0,0 @@ -// +build go1.7 - -package mux - -import ( - "context" - "net/http" -) - -func contextGet(r *http.Request, key interface{}) interface{} { - return r.Context().Value(key) -} - -func contextSet(r *http.Request, key, val interface{}) *http.Request { - if val == nil { - return r - } - - return r.WithContext(context.WithValue(r.Context(), key, val)) -} - -func contextClear(r *http.Request) { - return -} diff --git a/vendor/github.com/gorilla/mux/doc.go b/vendor/github.com/gorilla/mux/doc.go index 38957dee..bd5a38b5 100644 --- a/vendor/github.com/gorilla/mux/doc.go +++ b/vendor/github.com/gorilla/mux/doc.go @@ -295,7 +295,7 @@ A more complex authentication middleware, which maps session token to users, cou r := mux.NewRouter() r.HandleFunc("/", handler) - amw := authenticationMiddleware{} + amw := authenticationMiddleware{tokenUsers: make(map[string]string)} amw.Populate() r.Use(amw.Middleware) diff --git a/vendor/github.com/gorilla/mux/go.mod b/vendor/github.com/gorilla/mux/go.mod new file mode 100644 index 00000000..df170a39 --- /dev/null +++ b/vendor/github.com/gorilla/mux/go.mod @@ -0,0 +1,3 @@ +module github.com/gorilla/mux + +go 1.12 diff --git a/vendor/github.com/gorilla/mux/middleware.go b/vendor/github.com/gorilla/mux/middleware.go index ceb812ce..cb51c565 100644 --- a/vendor/github.com/gorilla/mux/middleware.go +++ b/vendor/github.com/gorilla/mux/middleware.go @@ -32,37 +32,19 @@ func (r *Router) useInterface(mw middleware) { r.middlewares = append(r.middlewares, mw) } -// CORSMethodMiddleware sets the Access-Control-Allow-Methods response header -// on a request, by matching routes based only on paths. It also handles -// OPTIONS requests, by settings Access-Control-Allow-Methods, and then -// returning without calling the next http handler. +// CORSMethodMiddleware automatically sets the Access-Control-Allow-Methods response header +// on requests for routes that have an OPTIONS method matcher to all the method matchers on +// the route. Routes that do not explicitly handle OPTIONS requests will not be processed +// by the middleware. See examples for usage. func CORSMethodMiddleware(r *Router) MiddlewareFunc { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - var allMethods []string - - err := r.Walk(func(route *Route, _ *Router, _ []*Route) error { - for _, m := range route.matchers { - if _, ok := m.(*routeRegexp); ok { - if m.Match(req, &RouteMatch{}) { - methods, err := route.GetMethods() - if err != nil { - return err - } - - allMethods = append(allMethods, methods...) - } - break - } - } - return nil - }) - + allMethods, err := getAllMethodsForRoute(r, req) if err == nil { - w.Header().Set("Access-Control-Allow-Methods", strings.Join(append(allMethods, "OPTIONS"), ",")) - - if req.Method == "OPTIONS" { - return + for _, v := range allMethods { + if v == http.MethodOptions { + w.Header().Set("Access-Control-Allow-Methods", strings.Join(allMethods, ",")) + } } } @@ -70,3 +52,23 @@ func CORSMethodMiddleware(r *Router) MiddlewareFunc { }) } } + +// getAllMethodsForRoute returns all the methods from method matchers matching a given +// request. +func getAllMethodsForRoute(r *Router, req *http.Request) ([]string, error) { + var allMethods []string + + for _, route := range r.routes { + var match RouteMatch + if route.Match(req, &match) || match.MatchErr == ErrMethodMismatch { + methods, err := route.GetMethods() + if err != nil { + return nil, err + } + + allMethods = append(allMethods, methods...) + } + } + + return allMethods, nil +} diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go index 4bbafa51..c9ba6470 100644 --- a/vendor/github.com/gorilla/mux/mux.go +++ b/vendor/github.com/gorilla/mux/mux.go @@ -5,6 +5,7 @@ package mux import ( + "context" "errors" "fmt" "net/http" @@ -22,7 +23,7 @@ var ( // NewRouter returns a new router instance. func NewRouter() *Router { - return &Router{namedRoutes: make(map[string]*Route), KeepContext: false} + return &Router{namedRoutes: make(map[string]*Route)} } // Router registers routes to be matched and dispatches a handler. @@ -50,24 +51,75 @@ type Router struct { // Configurable Handler to be used when the request method does not match the route. MethodNotAllowedHandler http.Handler - // Parent route, if this is a subrouter. - parent parentRoute // Routes to be matched, in order. routes []*Route + // Routes by name for URL building. namedRoutes map[string]*Route - // See Router.StrictSlash(). This defines the flag for new routes. - strictSlash bool - // See Router.SkipClean(). This defines the flag for new routes. - skipClean bool + // If true, do not clear the request context after handling the request. - // This has no effect when go1.7+ is used, since the context is stored - // on the request itself. + // + // Deprecated: No effect, since the context is stored on the request itself. KeepContext bool - // see Router.UseEncodedPath(). This defines a flag for all routes. - useEncodedPath bool + // Slice of middlewares to be called after a match is found middlewares []middleware + + // configuration shared with `Route` + routeConf +} + +// common route configuration shared between `Router` and `Route` +type routeConf struct { + // If true, "/path/foo%2Fbar/to" will match the path "/path/{var}/to" + useEncodedPath bool + + // If true, when the path pattern is "/path/", accessing "/path" will + // redirect to the former and vice versa. + strictSlash bool + + // If true, when the path pattern is "/path//to", accessing "/path//to" + // will not redirect + skipClean bool + + // Manager for the variables from host and path. + regexp routeRegexpGroup + + // List of matchers. + matchers []matcher + + // The scheme used when building URLs. + buildScheme string + + buildVarsFunc BuildVarsFunc +} + +// returns an effective deep copy of `routeConf` +func copyRouteConf(r routeConf) routeConf { + c := r + + if r.regexp.path != nil { + c.regexp.path = copyRouteRegexp(r.regexp.path) + } + + if r.regexp.host != nil { + c.regexp.host = copyRouteRegexp(r.regexp.host) + } + + c.regexp.queries = make([]*routeRegexp, 0, len(r.regexp.queries)) + for _, q := range r.regexp.queries { + c.regexp.queries = append(c.regexp.queries, copyRouteRegexp(q)) + } + + c.matchers = make([]matcher, len(r.matchers)) + copy(c.matchers, r.matchers) + + return c +} + +func copyRouteRegexp(r *routeRegexp) *routeRegexp { + c := *r + return &c } // Match attempts to match the given request against the router's registered routes. @@ -143,8 +195,8 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { var handler http.Handler if r.Match(req, &match) { handler = match.Handler - req = setVars(req, match.Vars) - req = setCurrentRoute(req, match.Route) + req = requestWithVars(req, match.Vars) + req = requestWithRoute(req, match.Route) } if handler == nil && match.MatchErr == ErrMethodMismatch { @@ -155,22 +207,18 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { handler = http.NotFoundHandler() } - if !r.KeepContext { - defer contextClear(req) - } - handler.ServeHTTP(w, req) } // Get returns a route registered with the given name. func (r *Router) Get(name string) *Route { - return r.getNamedRoutes()[name] + return r.namedRoutes[name] } // GetRoute returns a route registered with the given name. This method // was renamed to Get() and remains here for backwards compatibility. func (r *Router) GetRoute(name string) *Route { - return r.getNamedRoutes()[name] + return r.namedRoutes[name] } // StrictSlash defines the trailing slash behavior for new routes. The initial @@ -221,55 +269,24 @@ func (r *Router) UseEncodedPath() *Router { return r } -// ---------------------------------------------------------------------------- -// parentRoute -// ---------------------------------------------------------------------------- - -func (r *Router) getBuildScheme() string { - if r.parent != nil { - return r.parent.getBuildScheme() - } - return "" -} - -// getNamedRoutes returns the map where named routes are registered. -func (r *Router) getNamedRoutes() map[string]*Route { - if r.namedRoutes == nil { - if r.parent != nil { - r.namedRoutes = r.parent.getNamedRoutes() - } else { - r.namedRoutes = make(map[string]*Route) - } - } - return r.namedRoutes -} - -// getRegexpGroup returns regexp definitions from the parent route, if any. -func (r *Router) getRegexpGroup() *routeRegexpGroup { - if r.parent != nil { - return r.parent.getRegexpGroup() - } - return nil -} - -func (r *Router) buildVars(m map[string]string) map[string]string { - if r.parent != nil { - m = r.parent.buildVars(m) - } - return m -} - // ---------------------------------------------------------------------------- // Route factories // ---------------------------------------------------------------------------- // NewRoute registers an empty route. func (r *Router) NewRoute() *Route { - route := &Route{parent: r, strictSlash: r.strictSlash, skipClean: r.skipClean, useEncodedPath: r.useEncodedPath} + // initialize a route with a copy of the parent router's configuration + route := &Route{routeConf: copyRouteConf(r.routeConf), namedRoutes: r.namedRoutes} r.routes = append(r.routes, route) return route } +// Name registers a new route with a name. +// See Route.Name(). +func (r *Router) Name(name string) *Route { + return r.NewRoute().Name(name) +} + // Handle registers a new route with a matcher for the URL path. // See Route.Path() and Route.Handler(). func (r *Router) Handle(path string, handler http.Handler) *Route { @@ -409,7 +426,7 @@ const ( // Vars returns the route variables for the current request, if any. func Vars(r *http.Request) map[string]string { - if rv := contextGet(r, varsKey); rv != nil { + if rv := r.Context().Value(varsKey); rv != nil { return rv.(map[string]string) } return nil @@ -421,18 +438,20 @@ func Vars(r *http.Request) map[string]string { // after the handler returns, unless the KeepContext option is set on the // Router. func CurrentRoute(r *http.Request) *Route { - if rv := contextGet(r, routeKey); rv != nil { + if rv := r.Context().Value(routeKey); rv != nil { return rv.(*Route) } return nil } -func setVars(r *http.Request, val interface{}) *http.Request { - return contextSet(r, varsKey, val) +func requestWithVars(r *http.Request, vars map[string]string) *http.Request { + ctx := context.WithValue(r.Context(), varsKey, vars) + return r.WithContext(ctx) } -func setCurrentRoute(r *http.Request, val interface{}) *http.Request { - return contextSet(r, routeKey, val) +func requestWithRoute(r *http.Request, route *Route) *http.Request { + ctx := context.WithValue(r.Context(), routeKey, route) + return r.WithContext(ctx) } // ---------------------------------------------------------------------------- diff --git a/vendor/github.com/gorilla/mux/regexp.go b/vendor/github.com/gorilla/mux/regexp.go index 2b57e562..96dd94ad 100644 --- a/vendor/github.com/gorilla/mux/regexp.go +++ b/vendor/github.com/gorilla/mux/regexp.go @@ -113,6 +113,13 @@ func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*ro if typ != regexpTypePrefix { pattern.WriteByte('$') } + + var wildcardHostPort bool + if typ == regexpTypeHost { + if !strings.Contains(pattern.String(), ":") { + wildcardHostPort = true + } + } reverse.WriteString(raw) if endSlash { reverse.WriteByte('/') @@ -131,13 +138,14 @@ func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*ro // Done! return &routeRegexp{ - template: template, - regexpType: typ, - options: options, - regexp: reg, - reverse: reverse.String(), - varsN: varsN, - varsR: varsR, + template: template, + regexpType: typ, + options: options, + regexp: reg, + reverse: reverse.String(), + varsN: varsN, + varsR: varsR, + wildcardHostPort: wildcardHostPort, }, nil } @@ -158,27 +166,36 @@ type routeRegexp struct { varsN []string // Variable regexps (validators). varsR []*regexp.Regexp + // Wildcard host-port (no strict port match in hostname) + wildcardHostPort bool } // Match matches the regexp against the URL host or path. func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { - if r.regexpType != regexpTypeHost { - if r.regexpType == regexpTypeQuery { - return r.matchQueryString(req) + if r.regexpType == regexpTypeHost { + host := getHost(req) + if r.wildcardHostPort { + // Don't be strict on the port match + if i := strings.Index(host, ":"); i != -1 { + host = host[:i] + } } - path := req.URL.Path - if r.options.useEncodedPath { - path = req.URL.EscapedPath() - } - return r.regexp.MatchString(path) + return r.regexp.MatchString(host) } - return r.regexp.MatchString(getHost(req)) + if r.regexpType == regexpTypeQuery { + return r.matchQueryString(req) + } + path := req.URL.Path + if r.options.useEncodedPath { + path = req.URL.EscapedPath() + } + return r.regexp.MatchString(path) } // url builds a URL part using the given values. func (r *routeRegexp) url(values map[string]string) (string, error) { - urlValues := make([]interface{}, len(r.varsN)) + urlValues := make([]interface{}, len(r.varsN), len(r.varsN)) for k, v := range r.varsN { value, ok := values[v] if !ok { @@ -213,14 +230,51 @@ func (r *routeRegexp) getURLQuery(req *http.Request) string { return "" } templateKey := strings.SplitN(r.template, "=", 2)[0] - for key, vals := range req.URL.Query() { - if key == templateKey && len(vals) > 0 { - return key + "=" + vals[0] - } + val, ok := findFirstQueryKey(req.URL.RawQuery, templateKey) + if ok { + return templateKey + "=" + val } return "" } +// findFirstQueryKey returns the same result as (*url.URL).Query()[key][0]. +// If key was not found, empty string and false is returned. +func findFirstQueryKey(rawQuery, key string) (value string, ok bool) { + query := []byte(rawQuery) + for len(query) > 0 { + foundKey := query + if i := bytes.IndexAny(foundKey, "&;"); i >= 0 { + foundKey, query = foundKey[:i], foundKey[i+1:] + } else { + query = query[:0] + } + if len(foundKey) == 0 { + continue + } + var value []byte + if i := bytes.IndexByte(foundKey, '='); i >= 0 { + foundKey, value = foundKey[:i], foundKey[i+1:] + } + if len(foundKey) < len(key) { + // Cannot possibly be key. + continue + } + keyString, err := url.QueryUnescape(string(foundKey)) + if err != nil { + continue + } + if keyString != key { + continue + } + valueString, err := url.QueryUnescape(string(value)) + if err != nil { + continue + } + return valueString, true + } + return "", false +} + func (r *routeRegexp) matchQueryString(req *http.Request) bool { return r.regexp.MatchString(r.getURLQuery(req)) } @@ -267,7 +321,7 @@ type routeRegexpGroup struct { } // setMatch extracts the variables from the URL once a route matches. -func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) { +func (v routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) { // Store host variables. if v.host != nil { host := getHost(req) @@ -296,7 +350,7 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) } else { u.Path += "/" } - m.Handler = http.RedirectHandler(u.String(), 301) + m.Handler = http.RedirectHandler(u.String(), http.StatusMovedPermanently) } } } @@ -312,17 +366,13 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) } // getHost tries its best to return the request host. +// According to section 14.23 of RFC 2616 the Host header +// can include the port number if the default value of 80 is not used. func getHost(r *http.Request) string { if r.URL.IsAbs() { return r.URL.Host } - host := r.Host - // Slice off any port information. - if i := strings.Index(host, ":"); i != -1 { - host = host[:i] - } - return host - + return r.Host } func extractVars(input string, matches []int, names []string, output map[string]string) { diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go index a591d735..750afe57 100644 --- a/vendor/github.com/gorilla/mux/route.go +++ b/vendor/github.com/gorilla/mux/route.go @@ -15,24 +15,8 @@ import ( // Route stores information to match a request and build URLs. type Route struct { - // Parent where the route was registered (a Router). - parent parentRoute // Request handler for the route. handler http.Handler - // List of matchers. - matchers []matcher - // Manager for the variables from host and path. - regexp *routeRegexpGroup - // If true, when the path pattern is "/path/", accessing "/path" will - // redirect to the former and vice versa. - strictSlash bool - // If true, when the path pattern is "/path//to", accessing "/path//to" - // will not redirect - skipClean bool - // If true, "/path/foo%2Fbar/to" will match the path "/path/{var}/to" - useEncodedPath bool - // The scheme used when building URLs. - buildScheme string // If true, this route never matches: it is only used to build URLs. buildOnly bool // The name used to build URLs. @@ -40,7 +24,11 @@ type Route struct { // Error resulted from building a route. err error - buildVarsFunc BuildVarsFunc + // "global" reference to all named routes + namedRoutes map[string]*Route + + // config possibly passed in from `Router` + routeConf } // SkipClean reports whether path cleaning is enabled for this route via @@ -64,6 +52,18 @@ func (r *Route) Match(req *http.Request, match *RouteMatch) bool { matchErr = ErrMethodMismatch continue } + + // Ignore ErrNotFound errors. These errors arise from match call + // to Subrouters. + // + // This prevents subsequent matching subrouters from failing to + // run middleware. If not ignored, the middleware would see a + // non-nil MatchErr and be skipped, even when there was a + // matching route. + if match.MatchErr == ErrNotFound { + match.MatchErr = nil + } + matchErr = nil return false } @@ -74,7 +74,7 @@ func (r *Route) Match(req *http.Request, match *RouteMatch) bool { return false } - if match.MatchErr == ErrMethodMismatch { + if match.MatchErr == ErrMethodMismatch && r.handler != nil { // We found a route which matches request method, clear MatchErr match.MatchErr = nil // Then override the mis-matched handler @@ -93,9 +93,7 @@ func (r *Route) Match(req *http.Request, match *RouteMatch) bool { } // Set variables. - if r.regexp != nil { - r.regexp.setMatch(req, match, r) - } + r.regexp.setMatch(req, match, r) return true } @@ -137,7 +135,7 @@ func (r *Route) GetHandler() http.Handler { // Name ----------------------------------------------------------------------- // Name sets the name for the route, used to build URLs. -// If the name was registered already it will be overwritten. +// It is an error to call Name more than once on a route. func (r *Route) Name(name string) *Route { if r.name != "" { r.err = fmt.Errorf("mux: route already has name %q, can't set %q", @@ -145,7 +143,7 @@ func (r *Route) Name(name string) *Route { } if r.err == nil { r.name = name - r.getNamedRoutes()[name] = r + r.namedRoutes[name] = r } return r } @@ -177,7 +175,6 @@ func (r *Route) addRegexpMatcher(tpl string, typ regexpType) error { if r.err != nil { return r.err } - r.regexp = r.getRegexpGroup() if typ == regexpTypePath || typ == regexpTypePrefix { if len(tpl) > 0 && tpl[0] != '/' { return fmt.Errorf("mux: path must start with a slash, got %q", tpl) @@ -386,7 +383,7 @@ func (r *Route) PathPrefix(tpl string) *Route { // The above route will only match if the URL contains the defined queries // values, e.g.: ?foo=bar&id=42. // -// It the value is an empty string, it will match any value if the key is set. +// If the value is an empty string, it will match any value if the key is set. // // Variables can define an optional regexp pattern to be matched: // @@ -415,16 +412,35 @@ func (r *Route) Queries(pairs ...string) *Route { type schemeMatcher []string func (m schemeMatcher) Match(r *http.Request, match *RouteMatch) bool { - return matchInArray(m, r.URL.Scheme) + scheme := r.URL.Scheme + // https://golang.org/pkg/net/http/#Request + // "For [most] server requests, fields other than Path and RawQuery will be + // empty." + // Since we're an http muxer, the scheme is either going to be http or https + // though, so we can just set it based on the tls termination state. + if scheme == "" { + if r.TLS == nil { + scheme = "http" + } else { + scheme = "https" + } + } + return matchInArray(m, scheme) } // Schemes adds a matcher for URL schemes. // It accepts a sequence of schemes to be matched, e.g.: "http", "https". +// If the request's URL has a scheme set, it will be matched against. +// Generally, the URL scheme will only be set if a previous handler set it, +// such as the ProxyHeaders handler from gorilla/handlers. +// If unset, the scheme will be determined based on the request's TLS +// termination state. +// The first argument to Schemes will be used when constructing a route URL. func (r *Route) Schemes(schemes ...string) *Route { for k, v := range schemes { schemes[k] = strings.ToLower(v) } - if r.buildScheme == "" && len(schemes) > 0 { + if len(schemes) > 0 { r.buildScheme = schemes[0] } return r.addMatcher(schemeMatcher(schemes)) @@ -439,7 +455,15 @@ type BuildVarsFunc func(map[string]string) map[string]string // BuildVarsFunc adds a custom function to be used to modify build variables // before a route's URL is built. func (r *Route) BuildVarsFunc(f BuildVarsFunc) *Route { - r.buildVarsFunc = f + if r.buildVarsFunc != nil { + // compose the old and new functions + old := r.buildVarsFunc + r.buildVarsFunc = func(m map[string]string) map[string]string { + return f(old(m)) + } + } else { + r.buildVarsFunc = f + } return r } @@ -458,7 +482,8 @@ func (r *Route) BuildVarsFunc(f BuildVarsFunc) *Route { // Here, the routes registered in the subrouter won't be tested if the host // doesn't match. func (r *Route) Subrouter() *Router { - router := &Router{parent: r, strictSlash: r.strictSlash} + // initialize a subrouter with a copy of the parent route's configuration + router := &Router{routeConf: copyRouteConf(r.routeConf), namedRoutes: r.namedRoutes} r.addMatcher(router) return router } @@ -487,8 +512,8 @@ func (r *Route) Subrouter() *Router { // This also works for host variables: // // r := mux.NewRouter() -// r.Host("{subdomain}.domain.com"). -// HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). +// r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). +// Host("{subdomain}.domain.com"). // Name("article") // // // url.String() will be "http://news.domain.com/articles/technology/42" @@ -496,15 +521,19 @@ func (r *Route) Subrouter() *Router { // "category", "technology", // "id", "42") // +// The scheme of the resulting url will be the first argument that was passed to Schemes: +// +// // url.String() will be "https://example.com" +// r := mux.NewRouter() +// url, err := r.Host("example.com") +// .Schemes("https", "http").URL() +// // All variables defined in the route are required, and their values must // conform to the corresponding patterns. func (r *Route) URL(pairs ...string) (*url.URL, error) { if r.err != nil { return nil, r.err } - if r.regexp == nil { - return nil, errors.New("mux: route doesn't have a host or path") - } values, err := r.prepareVars(pairs...) if err != nil { return nil, err @@ -516,8 +545,8 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) { return nil, err } scheme = "http" - if s := r.getBuildScheme(); s != "" { - scheme = s + if r.buildScheme != "" { + scheme = r.buildScheme } } if r.regexp.path != nil { @@ -547,7 +576,7 @@ func (r *Route) URLHost(pairs ...string) (*url.URL, error) { if r.err != nil { return nil, r.err } - if r.regexp == nil || r.regexp.host == nil { + if r.regexp.host == nil { return nil, errors.New("mux: route doesn't have a host") } values, err := r.prepareVars(pairs...) @@ -562,8 +591,8 @@ func (r *Route) URLHost(pairs ...string) (*url.URL, error) { Scheme: "http", Host: host, } - if s := r.getBuildScheme(); s != "" { - u.Scheme = s + if r.buildScheme != "" { + u.Scheme = r.buildScheme } return u, nil } @@ -575,7 +604,7 @@ func (r *Route) URLPath(pairs ...string) (*url.URL, error) { if r.err != nil { return nil, r.err } - if r.regexp == nil || r.regexp.path == nil { + if r.regexp.path == nil { return nil, errors.New("mux: route doesn't have a path") } values, err := r.prepareVars(pairs...) @@ -600,7 +629,7 @@ func (r *Route) GetPathTemplate() (string, error) { if r.err != nil { return "", r.err } - if r.regexp == nil || r.regexp.path == nil { + if r.regexp.path == nil { return "", errors.New("mux: route doesn't have a path") } return r.regexp.path.template, nil @@ -614,7 +643,7 @@ func (r *Route) GetPathRegexp() (string, error) { if r.err != nil { return "", r.err } - if r.regexp == nil || r.regexp.path == nil { + if r.regexp.path == nil { return "", errors.New("mux: route does not have a path") } return r.regexp.path.regexp.String(), nil @@ -629,10 +658,10 @@ func (r *Route) GetQueriesRegexp() ([]string, error) { if r.err != nil { return nil, r.err } - if r.regexp == nil || r.regexp.queries == nil { + if r.regexp.queries == nil { return nil, errors.New("mux: route doesn't have queries") } - var queries []string + queries := make([]string, 0, len(r.regexp.queries)) for _, query := range r.regexp.queries { queries = append(queries, query.regexp.String()) } @@ -648,10 +677,10 @@ func (r *Route) GetQueriesTemplates() ([]string, error) { if r.err != nil { return nil, r.err } - if r.regexp == nil || r.regexp.queries == nil { + if r.regexp.queries == nil { return nil, errors.New("mux: route doesn't have queries") } - var queries []string + queries := make([]string, 0, len(r.regexp.queries)) for _, query := range r.regexp.queries { queries = append(queries, query.template) } @@ -683,7 +712,7 @@ func (r *Route) GetHostTemplate() (string, error) { if r.err != nil { return "", r.err } - if r.regexp == nil || r.regexp.host == nil { + if r.regexp.host == nil { return "", errors.New("mux: route doesn't have a host") } return r.regexp.host.template, nil @@ -700,64 +729,8 @@ func (r *Route) prepareVars(pairs ...string) (map[string]string, error) { } func (r *Route) buildVars(m map[string]string) map[string]string { - if r.parent != nil { - m = r.parent.buildVars(m) - } if r.buildVarsFunc != nil { m = r.buildVarsFunc(m) } return m } - -// ---------------------------------------------------------------------------- -// parentRoute -// ---------------------------------------------------------------------------- - -// parentRoute allows routes to know about parent host and path definitions. -type parentRoute interface { - getBuildScheme() string - getNamedRoutes() map[string]*Route - getRegexpGroup() *routeRegexpGroup - buildVars(map[string]string) map[string]string -} - -func (r *Route) getBuildScheme() string { - if r.buildScheme != "" { - return r.buildScheme - } - if r.parent != nil { - return r.parent.getBuildScheme() - } - return "" -} - -// getNamedRoutes returns the map where named routes are registered. -func (r *Route) getNamedRoutes() map[string]*Route { - if r.parent == nil { - // During tests router is not always set. - r.parent = NewRouter() - } - return r.parent.getNamedRoutes() -} - -// getRegexpGroup returns regexp definitions from this route. -func (r *Route) getRegexpGroup() *routeRegexpGroup { - if r.regexp == nil { - if r.parent == nil { - // During tests router is not always set. - r.parent = NewRouter() - } - regexp := r.parent.getRegexpGroup() - if regexp == nil { - r.regexp = new(routeRegexpGroup) - } else { - // Copy. - r.regexp = &routeRegexpGroup{ - host: regexp.host, - path: regexp.path, - queries: regexp.queries, - } - } - } - return r.regexp -} diff --git a/vendor/github.com/gorilla/mux/test_helpers.go b/vendor/github.com/gorilla/mux/test_helpers.go index 32ecffde..5f5c496d 100644 --- a/vendor/github.com/gorilla/mux/test_helpers.go +++ b/vendor/github.com/gorilla/mux/test_helpers.go @@ -15,5 +15,5 @@ import "net/http" // can be set by making a route that captures the required variables, // starting a server and sending the request to that server. func SetURLVars(r *http.Request, val map[string]string) *http.Request { - return setVars(r, val) + return requestWithVars(r, val) } diff --git a/vendor/github.com/lib/pq/.travis.yml b/vendor/github.com/lib/pq/.travis.yml index 8396f5d9..3498c53d 100644 --- a/vendor/github.com/lib/pq/.travis.yml +++ b/vendor/github.com/lib/pq/.travis.yml @@ -1,8 +1,8 @@ language: go go: - - 1.11.x - - 1.12.x + - 1.13.x + - 1.14.x - master sudo: true @@ -27,7 +27,7 @@ before_install: - ./.travis.sh client_configure - go get golang.org/x/tools/cmd/goimports - go get golang.org/x/lint/golint - - GO111MODULE=on go get honnef.co/go/tools/cmd/staticcheck@2019.2.1 + - GO111MODULE=on go get honnef.co/go/tools/cmd/staticcheck@2020.1.3 before_script: - createdb pqgotest @@ -38,7 +38,7 @@ script: - > goimports -d -e $(find -name '*.go') | awk '{ print } END { exit NR == 0 ? 0 : 1 }' - go vet ./... - - staticcheck -go 1.11 ./... + - staticcheck -go 1.13 ./... - golint ./... - PQTEST_BINARY_PARAMETERS=no go test -race -v ./... - PQTEST_BINARY_PARAMETERS=yes go test -race -v ./... diff --git a/vendor/github.com/lib/pq/CONTRIBUTING.md b/vendor/github.com/lib/pq/CONTRIBUTING.md deleted file mode 100644 index 84c937f1..00000000 --- a/vendor/github.com/lib/pq/CONTRIBUTING.md +++ /dev/null @@ -1,29 +0,0 @@ -## Contributing to pq - -`pq` has a backlog of pull requests, but contributions are still very -much welcome. You can help with patch review, submitting bug reports, -or adding new functionality. There is no formal style guide, but -please conform to the style of existing code and general Go formatting -conventions when submitting patches. - -### Patch review - -Help review existing open pull requests by commenting on the code or -proposed functionality. - -### Bug reports - -We appreciate any bug reports, but especially ones with self-contained -(doesn't depend on code outside of pq), minimal (can't be simplified -further) test cases. It's especially helpful if you can submit a pull -request with just the failing test case (you'll probably want to -pattern it after the tests in -[conn_test.go](https://github.com/lib/pq/blob/master/conn_test.go). - -### New functionality - -There are a number of pending patches for new functionality, so -additional feature patches will take a while to merge. Still, patches -are generally reviewed based on usefulness and complexity in addition -to time-in-queue, so if you have a knockout idea, take a shot. Feel -free to open an issue discussion your proposed patch beforehand. diff --git a/vendor/github.com/lib/pq/README.md b/vendor/github.com/lib/pq/README.md index 385fe735..16fc31cd 100644 --- a/vendor/github.com/lib/pq/README.md +++ b/vendor/github.com/lib/pq/README.md @@ -1,21 +1,11 @@ # pq - A pure Go postgres driver for Go's database/sql package -[![GoDoc](https://godoc.org/github.com/lib/pq?status.svg)](https://godoc.org/github.com/lib/pq) -[![Build Status](https://travis-ci.org/lib/pq.svg?branch=master)](https://travis-ci.org/lib/pq) +[![GoDoc](https://godoc.org/github.com/lib/pq?status.svg)](https://pkg.go.dev/github.com/lib/pq?tab=doc) ## Install go get github.com/lib/pq -## Docs - -For detailed documentation and basic usage examples, please see the package -documentation at . - -## Tests - -`go test` is used for testing. See [TESTS.md](TESTS.md) for more details. - ## Features * SSL @@ -30,66 +20,10 @@ documentation at . * Notifications: `LISTEN`/`NOTIFY` * pgpass support -## Future / Things you can help with +## Tests -* Better COPY FROM / COPY TO (see discussion in #181) +`go test` is used for testing. See [TESTS.md](TESTS.md) for more details. -## Thank you (alphabetical) +## Status -Some of these contributors are from the original library `bmizerany/pq.go` whose -code still exists in here. - -* Andy Balholm (andybalholm) -* Ben Berkert (benburkert) -* Benjamin Heatwole (bheatwole) -* Bill Mill (llimllib) -* Bjørn Madsen (aeons) -* Blake Gentry (bgentry) -* Brad Fitzpatrick (bradfitz) -* Charlie Melbye (cmelbye) -* Chris Bandy (cbandy) -* Chris Gilling (cgilling) -* Chris Walsh (cwds) -* Dan Sosedoff (sosedoff) -* Daniel Farina (fdr) -* Eric Chlebek (echlebek) -* Eric Garrido (minusnine) -* Eric Urban (hydrogen18) -* Everyone at The Go Team -* Evan Shaw (edsrzf) -* Ewan Chou (coocood) -* Fazal Majid (fazalmajid) -* Federico Romero (federomero) -* Fumin (fumin) -* Gary Burd (garyburd) -* Heroku (heroku) -* James Pozdena (jpoz) -* Jason McVetta (jmcvetta) -* Jeremy Jay (pbnjay) -* Joakim Sernbrant (serbaut) -* John Gallagher (jgallagher) -* Jonathan Rudenberg (titanous) -* Joël Stemmer (jstemmer) -* Kamil Kisiel (kisielk) -* Kelly Dunn (kellydunn) -* Keith Rarick (kr) -* Kir Shatrov (kirs) -* Lann Martin (lann) -* Maciek Sakrejda (uhoh-itsmaciek) -* Marc Brinkmann (mbr) -* Marko Tiikkaja (johto) -* Matt Newberry (MattNewberry) -* Matt Robenolt (mattrobenolt) -* Martin Olsen (martinolsen) -* Mike Lewis (mikelikespie) -* Nicolas Patry (Narsil) -* Oliver Tonnhofer (olt) -* Patrick Hayes (phayes) -* Paul Hammond (paulhammond) -* Ryan Smith (ryandotsmith) -* Samuel Stauffer (samuel) -* Timothée Peignier (cyberdelia) -* Travis Cline (tmc) -* TruongSinh Tran-Nguyen (truongsinh) -* Yaismel Miranda (ympons) -* notedit (notedit) +This package is effectively in maintenance mode and is not actively developed. Small patches and features are only rarely reviewed and merged. We recommend using [pgx](https://github.com/jackc/pgx) which is actively maintained. diff --git a/vendor/github.com/lib/pq/conn.go b/vendor/github.com/lib/pq/conn.go index 55152b12..77c36134 100644 --- a/vendor/github.com/lib/pq/conn.go +++ b/vendor/github.com/lib/pq/conn.go @@ -149,6 +149,12 @@ type conn struct { // If true this connection is in the middle of a COPY inCopy bool + + // If not nil, notices will be synchronously sent here + noticeHandler func(*Error) + + // If not nil, notifications will be synchronously sent here + notificationHandler func(*Notification) } // Handle driver-side settings in parsed connection string. @@ -971,7 +977,13 @@ func (cn *conn) recv() (t byte, r *readBuf) { case 'E': panic(parseError(r)) case 'N': - // ignore + if n := cn.noticeHandler; n != nil { + n(parseError(r)) + } + case 'A': + if n := cn.notificationHandler; n != nil { + n(recvNotification(r)) + } default: return } @@ -988,8 +1000,14 @@ func (cn *conn) recv1Buf(r *readBuf) byte { } switch t { - case 'A', 'N': - // ignore + case 'A': + if n := cn.notificationHandler; n != nil { + n(recvNotification(r)) + } + case 'N': + if n := cn.noticeHandler; n != nil { + n(parseError(r)) + } case 'S': cn.processParameterStatus(r) default: diff --git a/vendor/github.com/lib/pq/conn_go18.go b/vendor/github.com/lib/pq/conn_go18.go index 0fdd06a6..09e2ea46 100644 --- a/vendor/github.com/lib/pq/conn_go18.go +++ b/vendor/github.com/lib/pq/conn_go18.go @@ -79,7 +79,7 @@ func (cn *conn) Ping(ctx context.Context) error { if finish := cn.watchCancel(ctx); finish != nil { defer finish() } - rows, err := cn.simpleQuery("SELECT 'lib/pq ping test';") + rows, err := cn.simpleQuery(";") if err != nil { return driver.ErrBadConn // https://golang.org/pkg/database/sql/driver/#Pinger } diff --git a/vendor/github.com/lib/pq/copy.go b/vendor/github.com/lib/pq/copy.go index 345c2398..d3bc1edd 100644 --- a/vendor/github.com/lib/pq/copy.go +++ b/vendor/github.com/lib/pq/copy.go @@ -152,7 +152,9 @@ func (ci *copyin) resploop() { case 'C': // complete case 'N': - // NoticeResponse + if n := ci.cn.noticeHandler; n != nil { + n(parseError(&r)) + } case 'Z': ci.cn.processReadyForQuery(&r) ci.done <- true @@ -229,7 +231,7 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) { } if len(v) == 0 { - return nil, ci.Close() + return driver.RowsAffected(0), ci.Close() } numValues := len(v) diff --git a/vendor/github.com/lib/pq/encode.go b/vendor/github.com/lib/pq/encode.go index a6902fae..c4dafe27 100644 --- a/vendor/github.com/lib/pq/encode.go +++ b/vendor/github.com/lib/pq/encode.go @@ -8,6 +8,7 @@ import ( "errors" "fmt" "math" + "regexp" "strconv" "strings" "sync" @@ -16,6 +17,8 @@ import ( "github.com/lib/pq/oid" ) +var time2400Regex = regexp.MustCompile(`^(24:00(?::00(?:\.0+)?)?)(?:[Z+-].*)?$`) + func binaryEncode(parameterStatus *parameterStatus, x interface{}) []byte { switch v := x.(type) { case []byte: @@ -202,10 +205,27 @@ func mustParse(f string, typ oid.Oid, s []byte) time.Time { str[len(str)-3] == ':' { f += ":00" } + // Special case for 24:00 time. + // Unfortunately, golang does not parse 24:00 as a proper time. + // In this case, we want to try "round to the next day", to differentiate. + // As such, we find if the 24:00 time matches at the beginning; if so, + // we default it back to 00:00 but add a day later. + var is2400Time bool + switch typ { + case oid.T_timetz, oid.T_time: + if matches := time2400Regex.FindStringSubmatch(str); matches != nil { + // Concatenate timezone information at the back. + str = "00:00:00" + str[len(matches[1]):] + is2400Time = true + } + } t, err := time.Parse(f, str) if err != nil { errorf("decode: %s", err) } + if is2400Time { + t = t.Add(24 * time.Hour) + } return t } @@ -487,7 +507,7 @@ func FormatTimestamp(t time.Time) []byte { b := []byte(t.Format("2006-01-02 15:04:05.999999999Z07:00")) _, offset := t.Zone() - offset = offset % 60 + offset %= 60 if offset != 0 { // RFC3339Nano already printed the minus sign if offset < 0 { diff --git a/vendor/github.com/lib/pq/notice.go b/vendor/github.com/lib/pq/notice.go new file mode 100644 index 00000000..01dd8c72 --- /dev/null +++ b/vendor/github.com/lib/pq/notice.go @@ -0,0 +1,71 @@ +// +build go1.10 + +package pq + +import ( + "context" + "database/sql/driver" +) + +// NoticeHandler returns the notice handler on the given connection, if any. A +// runtime panic occurs if c is not a pq connection. This is rarely used +// directly, use ConnectorNoticeHandler and ConnectorWithNoticeHandler instead. +func NoticeHandler(c driver.Conn) func(*Error) { + return c.(*conn).noticeHandler +} + +// SetNoticeHandler sets the given notice handler on the given connection. A +// runtime panic occurs if c is not a pq connection. A nil handler may be used +// to unset it. This is rarely used directly, use ConnectorNoticeHandler and +// ConnectorWithNoticeHandler instead. +// +// Note: Notice handlers are executed synchronously by pq meaning commands +// won't continue to be processed until the handler returns. +func SetNoticeHandler(c driver.Conn, handler func(*Error)) { + c.(*conn).noticeHandler = handler +} + +// NoticeHandlerConnector wraps a regular connector and sets a notice handler +// on it. +type NoticeHandlerConnector struct { + driver.Connector + noticeHandler func(*Error) +} + +// Connect calls the underlying connector's connect method and then sets the +// notice handler. +func (n *NoticeHandlerConnector) Connect(ctx context.Context) (driver.Conn, error) { + c, err := n.Connector.Connect(ctx) + if err == nil { + SetNoticeHandler(c, n.noticeHandler) + } + return c, err +} + +// ConnectorNoticeHandler returns the currently set notice handler, if any. If +// the given connector is not a result of ConnectorWithNoticeHandler, nil is +// returned. +func ConnectorNoticeHandler(c driver.Connector) func(*Error) { + if c, ok := c.(*NoticeHandlerConnector); ok { + return c.noticeHandler + } + return nil +} + +// ConnectorWithNoticeHandler creates or sets the given handler for the given +// connector. If the given connector is a result of calling this function +// previously, it is simply set on the given connector and returned. Otherwise, +// this returns a new connector wrapping the given one and setting the notice +// handler. A nil notice handler may be used to unset it. +// +// The returned connector is intended to be used with database/sql.OpenDB. +// +// Note: Notice handlers are executed synchronously by pq meaning commands +// won't continue to be processed until the handler returns. +func ConnectorWithNoticeHandler(c driver.Connector, handler func(*Error)) *NoticeHandlerConnector { + if c, ok := c.(*NoticeHandlerConnector); ok { + c.noticeHandler = handler + return c + } + return &NoticeHandlerConnector{Connector: c, noticeHandler: handler} +} diff --git a/vendor/github.com/lib/pq/notify.go b/vendor/github.com/lib/pq/notify.go index 850bb904..5c421fdb 100644 --- a/vendor/github.com/lib/pq/notify.go +++ b/vendor/github.com/lib/pq/notify.go @@ -4,6 +4,8 @@ package pq // This module contains support for Postgres LISTEN/NOTIFY. import ( + "context" + "database/sql/driver" "errors" "fmt" "sync" @@ -29,6 +31,61 @@ func recvNotification(r *readBuf) *Notification { return &Notification{bePid, channel, extra} } +// SetNotificationHandler sets the given notification handler on the given +// connection. A runtime panic occurs if c is not a pq connection. A nil handler +// may be used to unset it. +// +// Note: Notification handlers are executed synchronously by pq meaning commands +// won't continue to be processed until the handler returns. +func SetNotificationHandler(c driver.Conn, handler func(*Notification)) { + c.(*conn).notificationHandler = handler +} + +// NotificationHandlerConnector wraps a regular connector and sets a notification handler +// on it. +type NotificationHandlerConnector struct { + driver.Connector + notificationHandler func(*Notification) +} + +// Connect calls the underlying connector's connect method and then sets the +// notification handler. +func (n *NotificationHandlerConnector) Connect(ctx context.Context) (driver.Conn, error) { + c, err := n.Connector.Connect(ctx) + if err == nil { + SetNotificationHandler(c, n.notificationHandler) + } + return c, err +} + +// ConnectorNotificationHandler returns the currently set notification handler, if any. If +// the given connector is not a result of ConnectorWithNotificationHandler, nil is +// returned. +func ConnectorNotificationHandler(c driver.Connector) func(*Notification) { + if c, ok := c.(*NotificationHandlerConnector); ok { + return c.notificationHandler + } + return nil +} + +// ConnectorWithNotificationHandler creates or sets the given handler for the given +// connector. If the given connector is a result of calling this function +// previously, it is simply set on the given connector and returned. Otherwise, +// this returns a new connector wrapping the given one and setting the notification +// handler. A nil notification handler may be used to unset it. +// +// The returned connector is intended to be used with database/sql.OpenDB. +// +// Note: Notification handlers are executed synchronously by pq meaning commands +// won't continue to be processed until the handler returns. +func ConnectorWithNotificationHandler(c driver.Connector, handler func(*Notification)) *NotificationHandlerConnector { + if c, ok := c.(*NotificationHandlerConnector); ok { + c.notificationHandler = handler + return c + } + return &NotificationHandlerConnector{Connector: c, notificationHandler: handler} +} + const ( connStateIdle int32 = iota connStateExpectResponse @@ -174,8 +231,12 @@ func (l *ListenerConn) listenerConnLoop() (err error) { } l.replyChan <- message{t, nil} - case 'N', 'S': + case 'S': // ignore + case 'N': + if n := l.cn.noticeHandler; n != nil { + n(parseError(r)) + } default: return fmt.Errorf("unexpected message %q from server in listenerConnLoop", t) } diff --git a/vendor/github.com/lib/pq/scram/scram.go b/vendor/github.com/lib/pq/scram/scram.go index 484f378a..477216b6 100644 --- a/vendor/github.com/lib/pq/scram/scram.go +++ b/vendor/github.com/lib/pq/scram/scram.go @@ -94,7 +94,7 @@ func (c *Client) Out() []byte { return c.out.Bytes() } -// Err returns the error that ocurred, or nil if there were no errors. +// Err returns the error that occurred, or nil if there were no errors. func (c *Client) Err() error { return c.err } diff --git a/vendor/github.com/lib/pq/user_posix.go b/vendor/github.com/lib/pq/user_posix.go index bf982524..a5101920 100644 --- a/vendor/github.com/lib/pq/user_posix.go +++ b/vendor/github.com/lib/pq/user_posix.go @@ -1,6 +1,6 @@ // Package pq is a pure Go Postgres driver for the database/sql package. -// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris rumprun +// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris rumprun package pq diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml index 588ceca1..9159de03 100644 --- a/vendor/github.com/pkg/errors/.travis.yml +++ b/vendor/github.com/pkg/errors/.travis.yml @@ -1,11 +1,10 @@ language: go go_import_path: github.com/pkg/errors go: - - 1.4.3 - - 1.5.4 - - 1.6.2 - - 1.7.1 + - 1.11.x + - 1.12.x + - 1.13.x - tip script: - - go test -v ./... + - make check diff --git a/vendor/github.com/pkg/errors/Makefile b/vendor/github.com/pkg/errors/Makefile new file mode 100644 index 00000000..ce9d7cde --- /dev/null +++ b/vendor/github.com/pkg/errors/Makefile @@ -0,0 +1,44 @@ +PKGS := github.com/pkg/errors +SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS)) +GO := go + +check: test vet gofmt misspell unconvert staticcheck ineffassign unparam + +test: + $(GO) test $(PKGS) + +vet: | test + $(GO) vet $(PKGS) + +staticcheck: + $(GO) get honnef.co/go/tools/cmd/staticcheck + staticcheck -checks all $(PKGS) + +misspell: + $(GO) get github.com/client9/misspell/cmd/misspell + misspell \ + -locale GB \ + -error \ + *.md *.go + +unconvert: + $(GO) get github.com/mdempsky/unconvert + unconvert -v $(PKGS) + +ineffassign: + $(GO) get github.com/gordonklaus/ineffassign + find $(SRCDIRS) -name '*.go' | xargs ineffassign + +pedantic: check errcheck + +unparam: + $(GO) get mvdan.cc/unparam + unparam ./... + +errcheck: + $(GO) get github.com/kisielk/errcheck + errcheck $(PKGS) + +gofmt: + @echo Checking code is gofmted + @test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)" diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md index 273db3c9..54dfdcb1 100644 --- a/vendor/github.com/pkg/errors/README.md +++ b/vendor/github.com/pkg/errors/README.md @@ -1,4 +1,4 @@ -# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) +# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) Package errors provides simple error handling primitives. @@ -41,12 +41,19 @@ default: [Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). +## Roadmap + +With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows: + +- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible) +- 1.0. Final release. + ## Contributing -We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high. +Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. -Before proposing a change, please discuss your change by raising an issue. +Before sending a PR, please discuss your change by raising an issue. -## Licence +## License BSD-2-Clause diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go index 842ee804..161aea25 100644 --- a/vendor/github.com/pkg/errors/errors.go +++ b/vendor/github.com/pkg/errors/errors.go @@ -6,7 +6,7 @@ // return err // } // -// which applied recursively up the call stack results in error reports +// which when applied recursively up the call stack results in error reports // without context or debugging information. The errors package allows // programmers to add context to the failure path in their code in a way // that does not destroy the original value of the error. @@ -15,16 +15,17 @@ // // The errors.Wrap function returns a new error that adds context to the // original error by recording a stack trace at the point Wrap is called, -// and the supplied message. For example +// together with the supplied message. For example // // _, err := ioutil.ReadAll(r) // if err != nil { // return errors.Wrap(err, "read failed") // } // -// If additional control is required the errors.WithStack and errors.WithMessage -// functions destructure errors.Wrap into its component operations of annotating -// an error with a stack trace and an a message, respectively. +// If additional control is required, the errors.WithStack and +// errors.WithMessage functions destructure errors.Wrap into its component +// operations: annotating an error with a stack trace and with a message, +// respectively. // // Retrieving the cause of an error // @@ -38,7 +39,7 @@ // } // // can be inspected by errors.Cause. errors.Cause will recursively retrieve -// the topmost error which does not implement causer, which is assumed to be +// the topmost error that does not implement causer, which is assumed to be // the original cause. For example: // // switch err := errors.Cause(err).(type) { @@ -48,16 +49,16 @@ // // unknown error // } // -// causer interface is not exported by this package, but is considered a part -// of stable public API. +// Although the causer interface is not exported by this package, it is +// considered a part of its stable public interface. // // Formatted printing of errors // // All error values returned from this package implement fmt.Formatter and can -// be formatted by the fmt package. The following verbs are supported +// be formatted by the fmt package. The following verbs are supported: // // %s print the error. If the error has a Cause it will be -// printed recursively +// printed recursively. // %v see %s // %+v extended format. Each Frame of the error's StackTrace will // be printed in detail. @@ -65,13 +66,13 @@ // Retrieving the stack trace of an error or wrapper // // New, Errorf, Wrap, and Wrapf record a stack trace at the point they are -// invoked. This information can be retrieved with the following interface. +// invoked. This information can be retrieved with the following interface: // // type stackTracer interface { // StackTrace() errors.StackTrace // } // -// Where errors.StackTrace is defined as +// The returned errors.StackTrace type is defined as // // type StackTrace []Frame // @@ -81,12 +82,12 @@ // // if err, ok := err.(stackTracer); ok { // for _, f := range err.StackTrace() { -// fmt.Printf("%+s:%d", f) +// fmt.Printf("%+s:%d\n", f, f) // } // } // -// stackTracer interface is not exported by this package, but is considered a part -// of stable public API. +// Although the stackTracer interface is not exported by this package, it is +// considered a part of its stable public interface. // // See the documentation for Frame.Format for more details. package errors @@ -158,6 +159,9 @@ type withStack struct { func (w *withStack) Cause() error { return w.error } +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withStack) Unwrap() error { return w.error } + func (w *withStack) Format(s fmt.State, verb rune) { switch verb { case 'v': @@ -192,7 +196,7 @@ func Wrap(err error, message string) error { } // Wrapf returns an error annotating err with a stack trace -// at the point Wrapf is call, and the format specifier. +// at the point Wrapf is called, and the format specifier. // If err is nil, Wrapf returns nil. func Wrapf(err error, format string, args ...interface{}) error { if err == nil { @@ -220,6 +224,18 @@ func WithMessage(err error, message string) error { } } +// WithMessagef annotates err with the format specifier. +// If err is nil, WithMessagef returns nil. +func WithMessagef(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } +} + type withMessage struct { cause error msg string @@ -228,6 +244,9 @@ type withMessage struct { func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } func (w *withMessage) Cause() error { return w.cause } +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withMessage) Unwrap() error { return w.cause } + func (w *withMessage) Format(s fmt.State, verb rune) { switch verb { case 'v': diff --git a/vendor/github.com/pkg/errors/go113.go b/vendor/github.com/pkg/errors/go113.go new file mode 100644 index 00000000..be0d10d0 --- /dev/null +++ b/vendor/github.com/pkg/errors/go113.go @@ -0,0 +1,38 @@ +// +build go1.13 + +package errors + +import ( + stderrors "errors" +) + +// Is reports whether any error in err's chain matches target. +// +// The chain consists of err itself followed by the sequence of errors obtained by +// repeatedly calling Unwrap. +// +// An error is considered to match a target if it is equal to that target or if +// it implements a method Is(error) bool such that Is(target) returns true. +func Is(err, target error) bool { return stderrors.Is(err, target) } + +// As finds the first error in err's chain that matches target, and if so, sets +// target to that error value and returns true. +// +// The chain consists of err itself followed by the sequence of errors obtained by +// repeatedly calling Unwrap. +// +// An error matches target if the error's concrete value is assignable to the value +// pointed to by target, or if the error has a method As(interface{}) bool such that +// As(target) returns true. In the latter case, the As method is responsible for +// setting target. +// +// As will panic if target is not a non-nil pointer to either a type that implements +// error, or to any interface type. As returns false if err is nil. +func As(err error, target interface{}) bool { return stderrors.As(err, target) } + +// Unwrap returns the result of calling the Unwrap method on err, if err's +// type contains an Unwrap method returning error. +// Otherwise, Unwrap returns nil. +func Unwrap(err error) error { + return stderrors.Unwrap(err) +} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go index 6b1f2891..779a8348 100644 --- a/vendor/github.com/pkg/errors/stack.go +++ b/vendor/github.com/pkg/errors/stack.go @@ -5,10 +5,13 @@ import ( "io" "path" "runtime" + "strconv" "strings" ) // Frame represents a program counter inside a stack frame. +// For historical reasons if Frame is interpreted as a uintptr +// its value represents the program counter + 1. type Frame uintptr // pc returns the program counter for this frame; @@ -37,6 +40,15 @@ func (f Frame) line() int { return line } +// name returns the name of this function, if known. +func (f Frame) name() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + return fn.Name() +} + // Format formats the frame according to the fmt.Formatter interface. // // %s source file @@ -46,29 +58,24 @@ func (f Frame) line() int { // // Format accepts flags that alter the printing of some verbs, as follows: // -// %+s path of source file relative to the compile time GOPATH +// %+s function name and path of source file relative to the compile time +// GOPATH separated by \n\t (\n\t) // %+v equivalent to %+s:%d func (f Frame) Format(s fmt.State, verb rune) { switch verb { case 's': switch { case s.Flag('+'): - pc := f.pc() - fn := runtime.FuncForPC(pc) - if fn == nil { - io.WriteString(s, "unknown") - } else { - file, _ := fn.FileLine(pc) - fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) - } + io.WriteString(s, f.name()) + io.WriteString(s, "\n\t") + io.WriteString(s, f.file()) default: io.WriteString(s, path.Base(f.file())) } case 'd': - fmt.Fprintf(s, "%d", f.line()) + io.WriteString(s, strconv.Itoa(f.line())) case 'n': - name := runtime.FuncForPC(f.pc()).Name() - io.WriteString(s, funcname(name)) + io.WriteString(s, funcname(f.name())) case 'v': f.Format(s, 's') io.WriteString(s, ":") @@ -76,27 +83,59 @@ func (f Frame) Format(s fmt.State, verb rune) { } } +// MarshalText formats a stacktrace Frame as a text string. The output is the +// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs. +func (f Frame) MarshalText() ([]byte, error) { + name := f.name() + if name == "unknown" { + return []byte(name), nil + } + return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil +} + // StackTrace is stack of Frames from innermost (newest) to outermost (oldest). type StackTrace []Frame +// Format formats the stack of Frames according to the fmt.Formatter interface. +// +// %s lists source files for each Frame in the stack +// %v lists the source file and line number for each Frame in the stack +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+v Prints filename, function, and line number for each Frame in the stack. func (st StackTrace) Format(s fmt.State, verb rune) { switch verb { case 'v': switch { case s.Flag('+'): for _, f := range st { - fmt.Fprintf(s, "\n%+v", f) + io.WriteString(s, "\n") + f.Format(s, verb) } case s.Flag('#'): fmt.Fprintf(s, "%#v", []Frame(st)) default: - fmt.Fprintf(s, "%v", []Frame(st)) + st.formatSlice(s, verb) } case 's': - fmt.Fprintf(s, "%s", []Frame(st)) + st.formatSlice(s, verb) } } +// formatSlice will format this StackTrace into the given buffer as a slice of +// Frame, only valid when called with '%s' or '%v'. +func (st StackTrace) formatSlice(s fmt.State, verb rune) { + io.WriteString(s, "[") + for i, f := range st { + if i > 0 { + io.WriteString(s, " ") + } + f.Format(s, verb) + } + io.WriteString(s, "]") +} + // stack represents a stack of program counters. type stack []uintptr @@ -136,43 +175,3 @@ func funcname(name string) string { i = strings.Index(name, ".") return name[i+1:] } - -func trimGOPATH(name, file string) string { - // Here we want to get the source file path relative to the compile time - // GOPATH. As of Go 1.6.x there is no direct way to know the compiled - // GOPATH at runtime, but we can infer the number of path segments in the - // GOPATH. We note that fn.Name() returns the function name qualified by - // the import path, which does not include the GOPATH. Thus we can trim - // segments from the beginning of the file path until the number of path - // separators remaining is one more than the number of path separators in - // the function name. For example, given: - // - // GOPATH /home/user - // file /home/user/src/pkg/sub/file.go - // fn.Name() pkg/sub.Type.Method - // - // We want to produce: - // - // pkg/sub/file.go - // - // From this we can easily see that fn.Name() has one less path separator - // than our desired output. We count separators from the end of the file - // path until it finds two more than in the function name and then move - // one character forward to preserve the initial path segment without a - // leading separator. - const sep = "/" - goal := strings.Count(name, sep) + 2 - i := len(file) - for n := 0; n < goal; n++ { - i = strings.LastIndex(file[:i], sep) - if i == -1 { - // not enough separators found, set i so that the slice expression - // below leaves file unmodified - i = -len(sep) - break - } - } - // get back to 0 or trim the leading separator - file = file[i+len(sep):] - return file -} diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/go.mod b/vendor/github.com/shurcooL/sanitized_anchor_name/go.mod new file mode 100644 index 00000000..1e255347 --- /dev/null +++ b/vendor/github.com/shurcooL/sanitized_anchor_name/go.mod @@ -0,0 +1 @@ +module github.com/shurcooL/sanitized_anchor_name diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go index a3a918f0..73804d34 100644 --- a/vendor/golang.org/x/net/html/const.go +++ b/vendor/golang.org/x/net/html/const.go @@ -52,7 +52,6 @@ var isSpecialElementMap = map[string]bool{ "iframe": true, "img": true, "input": true, - "isindex": true, // The 'isindex' element has been removed, but keep it for backwards compatibility. "keygen": true, "li": true, "link": true, diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go index 01477a96..74774c45 100644 --- a/vendor/golang.org/x/net/html/foreign.go +++ b/vendor/golang.org/x/net/html/foreign.go @@ -172,7 +172,6 @@ var svgAttributeAdjustments = map[string]string{ "diffuseconstant": "diffuseConstant", "edgemode": "edgeMode", "externalresourcesrequired": "externalResourcesRequired", - "filterres": "filterRes", "filterunits": "filterUnits", "glyphref": "glyphRef", "gradienttransform": "gradientTransform", diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go index 633ee15d..1350eef2 100644 --- a/vendor/golang.org/x/net/html/node.go +++ b/vendor/golang.org/x/net/html/node.go @@ -18,6 +18,11 @@ const ( ElementNode CommentNode DoctypeNode + // RawNode nodes are not returned by the parser, but can be part of the + // Node tree passed to func Render to insert raw HTML (without escaping). + // If so, this package makes no guarantee that the rendered HTML is secure + // (from e.g. Cross Site Scripting attacks) or well-formed. + RawNode scopeMarkerNode ) diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go index 1d3c198a..2cd12fc8 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -184,6 +184,17 @@ func (p *parser) clearStackToContext(s scope) { } } +// parseGenericRawTextElements implements the generic raw text element parsing +// algorithm defined in 12.2.6.2. +// https://html.spec.whatwg.org/multipage/parsing.html#parsing-elements-that-contain-only-text +// TODO: Since both RAWTEXT and RCDATA states are treated as tokenizer's part +// officially, need to make tokenizer consider both states. +func (p *parser) parseGenericRawTextElement() { + p.addElement() + p.originalIM = p.im + p.im = textIM +} + // generateImpliedEndTags pops nodes off the stack of open elements as long as // the top node has a tag name of dd, dt, li, optgroup, option, p, rb, rp, rt or rtc. // If exceptions are specified, nodes with that name will not be popped off. @@ -192,16 +203,17 @@ func (p *parser) generateImpliedEndTags(exceptions ...string) { loop: for i = len(p.oe) - 1; i >= 0; i-- { n := p.oe[i] - if n.Type == ElementNode { - switch n.DataAtom { - case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc: - for _, except := range exceptions { - if n.Data == except { - break loop - } + if n.Type != ElementNode { + break + } + switch n.DataAtom { + case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc: + for _, except := range exceptions { + if n.Data == except { + break loop } - continue } + continue } break } @@ -369,8 +381,7 @@ findIdenticalElements: // Section 12.2.4.3. func (p *parser) clearActiveFormattingElements() { for { - n := p.afe.pop() - if len(p.afe) == 0 || n.Type == scopeMarkerNode { + if n := p.afe.pop(); len(p.afe) == 0 || n.Type == scopeMarkerNode { return } } @@ -625,16 +636,29 @@ func inHeadIM(p *parser) bool { switch p.tok.DataAtom { case a.Html: return inBodyIM(p) - case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta: + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta: p.addElement() p.oe.pop() p.acknowledgeSelfClosingTag() return true - case a.Script, a.Title, a.Noscript, a.Noframes, a.Style: + case a.Noscript: + if p.scripting { + p.parseGenericRawTextElement() + return true + } + p.addElement() + p.im = inHeadNoscriptIM + // Don't let the tokenizer go into raw text mode when scripting is disabled. + p.tokenizer.NextIsNotRawText() + return true + case a.Script, a.Title: p.addElement() p.setOriginalIM() p.im = textIM return true + case a.Noframes, a.Style: + p.parseGenericRawTextElement() + return true case a.Head: // Ignore the token. return true @@ -692,6 +716,49 @@ func inHeadIM(p *parser) bool { return false } +// 12.2.6.4.5. +func inHeadNoscriptIM(p *parser) bool { + switch p.tok.Type { + case DoctypeToken: + // Ignore the token. + return true + case StartTagToken: + switch p.tok.DataAtom { + case a.Html: + return inBodyIM(p) + case a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Style: + return inHeadIM(p) + case a.Head, a.Noscript: + // Ignore the token. + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Noscript, a.Br: + default: + // Ignore the token. + return true + } + case TextToken: + s := strings.TrimLeft(p.tok.Data, whitespace) + if len(s) == 0 { + // It was all whitespace. + return inHeadIM(p) + } + case CommentToken: + return inHeadIM(p) + } + p.oe.pop() + if p.top().DataAtom != a.Head { + panic("html: the new current node will be a head element.") + } + p.im = inHeadIM + if p.tok.DataAtom == a.Noscript { + return true + } + return false +} + // Section 12.2.6.4.6. func afterHeadIM(p *parser) bool { switch p.tok.Type { @@ -803,7 +870,7 @@ func inBodyIM(p *parser) bool { return true } copyAttributes(p.oe[0], p.tok) - case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: return inHeadIM(p) case a.Body: if p.oe.contains(a.Template) { @@ -829,7 +896,7 @@ func inBodyIM(p *parser) bool { p.addElement() p.im = inFramesetIM return true - case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul: + case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Main, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul: p.popUntil(buttonScope, a.P) p.addElement() case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6: @@ -962,53 +1029,6 @@ func inBodyIM(p *parser) bool { p.tok.DataAtom = a.Img p.tok.Data = a.Img.String() return false - case a.Isindex: - if p.form != nil { - // Ignore the token. - return true - } - action := "" - prompt := "This is a searchable index. Enter search keywords: " - attr := []Attribute{{Key: "name", Val: "isindex"}} - for _, t := range p.tok.Attr { - switch t.Key { - case "action": - action = t.Val - case "name": - // Ignore the attribute. - case "prompt": - prompt = t.Val - default: - attr = append(attr, t) - } - } - p.acknowledgeSelfClosingTag() - p.popUntil(buttonScope, a.P) - p.parseImpliedToken(StartTagToken, a.Form, a.Form.String()) - if p.form == nil { - // NOTE: The 'isindex' element has been removed, - // and the 'template' element has not been designed to be - // collaborative with the index element. - // - // Ignore the token. - return true - } - if action != "" { - p.form.Attr = []Attribute{{Key: "action", Val: action}} - } - p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String()) - p.parseImpliedToken(StartTagToken, a.Label, a.Label.String()) - p.addText(prompt) - p.addChild(&Node{ - Type: ElementNode, - DataAtom: a.Input, - Data: a.Input.String(), - Attr: attr, - }) - p.oe.pop() - p.parseImpliedToken(EndTagToken, a.Label, a.Label.String()) - p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String()) - p.parseImpliedToken(EndTagToken, a.Form, a.Form.String()) case a.Textarea: p.addElement() p.setOriginalIM() @@ -1018,18 +1038,21 @@ func inBodyIM(p *parser) bool { p.popUntil(buttonScope, a.P) p.reconstructActiveFormattingElements() p.framesetOK = false - p.addElement() - p.setOriginalIM() - p.im = textIM + p.parseGenericRawTextElement() case a.Iframe: p.framesetOK = false + p.parseGenericRawTextElement() + case a.Noembed: + p.parseGenericRawTextElement() + case a.Noscript: + if p.scripting { + p.parseGenericRawTextElement() + return true + } + p.reconstructActiveFormattingElements() p.addElement() - p.setOriginalIM() - p.im = textIM - case a.Noembed, a.Noscript: - p.addElement() - p.setOriginalIM() - p.im = textIM + // Don't let the tokenizer go into raw text mode when scripting is disabled. + p.tokenizer.NextIsNotRawText() case a.Select: p.reconstructActiveFormattingElements() p.addElement() @@ -1085,7 +1108,7 @@ func inBodyIM(p *parser) bool { return false } return true - case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul: + case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Main, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul: p.popUntil(defaultScope, p.tok.DataAtom) case a.Form: if p.oe.contains(a.Template) { @@ -1146,14 +1169,13 @@ func inBodyIM(p *parser) bool { if len(p.templateStack) > 0 { p.im = inTemplateIM return false - } else { - for _, e := range p.oe { - switch e.DataAtom { - case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc, a.Tbody, a.Td, a.Tfoot, a.Th, - a.Thead, a.Tr, a.Body, a.Html: - default: - return true - } + } + for _, e := range p.oe { + switch e.DataAtom { + case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc, a.Tbody, a.Td, a.Tfoot, a.Th, + a.Thead, a.Tr, a.Body, a.Html: + default: + return true } } } @@ -1169,9 +1191,15 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) { // Once the code successfully parses the comprehensive test suite, we should // refactor this code to be more idiomatic. - // Steps 1-4. The outer loop. + // Steps 1-2 + if current := p.oe.top(); current.Data == tagName && p.afe.index(current) == -1 { + p.oe.pop() + return + } + + // Steps 3-5. The outer loop. for i := 0; i < 8; i++ { - // Step 5. Find the formatting element. + // Step 6. Find the formatting element. var formattingElement *Node for j := len(p.afe) - 1; j >= 0; j-- { if p.afe[j].Type == scopeMarkerNode { @@ -1186,17 +1214,22 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) { p.inBodyEndTagOther(tagAtom, tagName) return } + + // Step 7. Ignore the tag if formatting element is not in the stack of open elements. feIndex := p.oe.index(formattingElement) if feIndex == -1 { p.afe.remove(formattingElement) return } + // Step 8. Ignore the tag if formatting element is not in the scope. if !p.elementInScope(defaultScope, tagAtom) { // Ignore the tag. return } - // Steps 9-10. Find the furthest block. + // Step 9. This step is omitted because it's just a parse error but no need to return. + + // Steps 10-11. Find the furthest block. var furthestBlock *Node for _, e := range p.oe[feIndex:] { if isSpecialElement(e) { @@ -1213,47 +1246,65 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) { return } - // Steps 11-12. Find the common ancestor and bookmark node. + // Steps 12-13. Find the common ancestor and bookmark node. commonAncestor := p.oe[feIndex-1] bookmark := p.afe.index(formattingElement) - // Step 13. The inner loop. Find the lastNode to reparent. + // Step 14. The inner loop. Find the lastNode to reparent. lastNode := furthestBlock node := furthestBlock x := p.oe.index(node) - // Steps 13.1-13.2 - for j := 0; j < 3; j++ { - // Step 13.3. + // Step 14.1. + j := 0 + for { + // Step 14.2. + j++ + // Step. 14.3. x-- node = p.oe[x] - // Step 13.4 - 13.5. + // Step 14.4. Go to the next step if node is formatting element. + if node == formattingElement { + break + } + // Step 14.5. Remove node from the list of active formatting elements if + // inner loop counter is greater than three and node is in the list of + // active formatting elements. + if ni := p.afe.index(node); j > 3 && ni > -1 { + p.afe.remove(node) + // If any element of the list of active formatting elements is removed, + // we need to take care whether bookmark should be decremented or not. + // This is because the value of bookmark may exceed the size of the + // list by removing elements from the list. + if ni <= bookmark { + bookmark-- + } + continue + } + // Step 14.6. Continue the next inner loop if node is not in the list of + // active formatting elements. if p.afe.index(node) == -1 { p.oe.remove(node) continue } - // Step 13.6. - if node == formattingElement { - break - } - // Step 13.7. + // Step 14.7. clone := node.clone() p.afe[p.afe.index(node)] = clone p.oe[p.oe.index(node)] = clone node = clone - // Step 13.8. + // Step 14.8. if lastNode == furthestBlock { bookmark = p.afe.index(node) + 1 } - // Step 13.9. + // Step 14.9. if lastNode.Parent != nil { lastNode.Parent.RemoveChild(lastNode) } node.AppendChild(lastNode) - // Step 13.10. + // Step 14.10. lastNode = node } - // Step 14. Reparent lastNode to the common ancestor, + // Step 15. Reparent lastNode to the common ancestor, // or for misnested table nodes, to the foster parent. if lastNode.Parent != nil { lastNode.Parent.RemoveChild(lastNode) @@ -1265,13 +1316,13 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) { commonAncestor.AppendChild(lastNode) } - // Steps 15-17. Reparent nodes from the furthest block's children + // Steps 16-18. Reparent nodes from the furthest block's children // to a clone of the formatting element. clone := formattingElement.clone() reparentChildren(clone, furthestBlock) furthestBlock.AppendChild(clone) - // Step 18. Fix up the list of active formatting elements. + // Step 19. Fix up the list of active formatting elements. if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark { // Move the bookmark with the rest of the list. bookmark-- @@ -1279,7 +1330,7 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) { p.afe.remove(formattingElement) p.afe.insert(bookmark, clone) - // Step 19. Fix up the stack of open elements. + // Step 20. Fix up the stack of open elements. p.oe.remove(formattingElement) p.oe.insert(p.oe.index(furthestBlock)+1, clone) } @@ -1450,14 +1501,13 @@ func inCaptionIM(p *parser) bool { case StartTagToken: switch p.tok.DataAtom { case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Thead, a.Tr: - if p.popUntil(tableScope, a.Caption) { - p.clearActiveFormattingElements() - p.im = inTableIM - return false - } else { + if !p.popUntil(tableScope, a.Caption) { // Ignore the token. return true } + p.clearActiveFormattingElements() + p.im = inTableIM + return false case a.Select: p.reconstructActiveFormattingElements() p.addElement() @@ -1474,14 +1524,13 @@ func inCaptionIM(p *parser) bool { } return true case a.Table: - if p.popUntil(tableScope, a.Caption) { - p.clearActiveFormattingElements() - p.im = inTableIM - return false - } else { + if !p.popUntil(tableScope, a.Caption) { // Ignore the token. return true } + p.clearActiveFormattingElements() + p.im = inTableIM + return false case a.Body, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr: // Ignore the token. return true @@ -1692,8 +1741,9 @@ func inCellIM(p *parser) bool { return true } // Close the cell and reprocess. - p.popUntil(tableScope, a.Td, a.Th) - p.clearActiveFormattingElements() + if p.popUntil(tableScope, a.Td, a.Th) { + p.clearActiveFormattingElements() + } p.im = inRowIM return false } @@ -1724,12 +1774,11 @@ func inSelectIM(p *parser) bool { } p.addElement() case a.Select: - if p.popUntil(selectScope, a.Select) { - p.resetInsertionMode() - } else { + if !p.popUntil(selectScope, a.Select) { // Ignore the token. return true } + p.resetInsertionMode() case a.Input, a.Keygen, a.Textarea: if p.elementInScope(selectScope, a.Select) { p.parseImpliedToken(EndTagToken, a.Select, a.Select.String()) @@ -1757,12 +1806,11 @@ func inSelectIM(p *parser) bool { p.oe = p.oe[:i] } case a.Select: - if p.popUntil(selectScope, a.Select) { - p.resetInsertionMode() - } else { + if !p.popUntil(selectScope, a.Select) { // Ignore the token. return true } + p.resetInsertionMode() case a.Template: return inHeadIM(p) } @@ -2083,28 +2131,31 @@ func parseForeignContent(p *parser) bool { Data: p.tok.Data, }) case StartTagToken: - b := breakout[p.tok.Data] - if p.tok.DataAtom == a.Font { - loop: - for _, attr := range p.tok.Attr { - switch attr.Key { - case "color", "face", "size": - b = true - break loop + if !p.fragment { + b := breakout[p.tok.Data] + if p.tok.DataAtom == a.Font { + loop: + for _, attr := range p.tok.Attr { + switch attr.Key { + case "color", "face", "size": + b = true + break loop + } } } - } - if b { - for i := len(p.oe) - 1; i >= 0; i-- { - n := p.oe[i] - if n.Namespace == "" || htmlIntegrationPoint(n) || mathMLTextIntegrationPoint(n) { - p.oe = p.oe[:i+1] - break + if b { + for i := len(p.oe) - 1; i >= 0; i-- { + n := p.oe[i] + if n.Namespace == "" || htmlIntegrationPoint(n) || mathMLTextIntegrationPoint(n) { + p.oe = p.oe[:i+1] + break + } } + return false } - return false } - switch p.top().Namespace { + current := p.adjustedCurrentNode() + switch current.Namespace { case "math": adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments) case "svg": @@ -2119,7 +2170,7 @@ func parseForeignContent(p *parser) bool { panic("html: bad parser state: unexpected namespace") } adjustForeignAttributes(p.tok.Attr) - namespace := p.top().Namespace + namespace := current.Namespace p.addElement() p.top().Namespace = namespace if namespace != "" { @@ -2148,12 +2199,20 @@ func parseForeignContent(p *parser) bool { return true } +// Section 12.2.4.2. +func (p *parser) adjustedCurrentNode() *Node { + if len(p.oe) == 1 && p.fragment && p.context != nil { + return p.context + } + return p.oe.top() +} + // Section 12.2.6. func (p *parser) inForeignContent() bool { if len(p.oe) == 0 { return false } - n := p.oe[len(p.oe)-1] + n := p.adjustedCurrentNode() if n.Namespace == "" { return false } @@ -2247,6 +2306,33 @@ func (p *parser) parse() error { // // The input is assumed to be UTF-8 encoded. func Parse(r io.Reader) (*Node, error) { + return ParseWithOptions(r) +} + +// ParseFragment parses a fragment of HTML and returns the nodes that were +// found. If the fragment is the InnerHTML for an existing element, pass that +// element in context. +// +// It has the same intricacies as Parse. +func ParseFragment(r io.Reader, context *Node) ([]*Node, error) { + return ParseFragmentWithOptions(r, context) +} + +// ParseOption configures a parser. +type ParseOption func(p *parser) + +// ParseOptionEnableScripting configures the scripting flag. +// https://html.spec.whatwg.org/multipage/webappapis.html#enabling-and-disabling-scripting +// +// By default, scripting is enabled. +func ParseOptionEnableScripting(enable bool) ParseOption { + return func(p *parser) { + p.scripting = enable + } +} + +// ParseWithOptions is like Parse, with options. +func ParseWithOptions(r io.Reader, opts ...ParseOption) (*Node, error) { p := &parser{ tokenizer: NewTokenizer(r), doc: &Node{ @@ -2256,19 +2342,19 @@ func Parse(r io.Reader) (*Node, error) { framesetOK: true, im: initialIM, } - err := p.parse() - if err != nil { + + for _, f := range opts { + f(p) + } + + if err := p.parse(); err != nil { return nil, err } return p.doc, nil } -// ParseFragment parses a fragment of HTML and returns the nodes that were -// found. If the fragment is the InnerHTML for an existing element, pass that -// element in context. -// -// It has the same intricacies as Parse. -func ParseFragment(r io.Reader, context *Node) ([]*Node, error) { +// ParseFragmentWithOptions is like ParseFragment, with options. +func ParseFragmentWithOptions(r io.Reader, context *Node, opts ...ParseOption) ([]*Node, error) { contextTag := "" if context != nil { if context.Type != ElementNode { @@ -2283,7 +2369,6 @@ func ParseFragment(r io.Reader, context *Node) ([]*Node, error) { contextTag = context.DataAtom.String() } p := &parser{ - tokenizer: NewTokenizerFragment(r, contextTag), doc: &Node{ Type: DocumentNode, }, @@ -2291,6 +2376,15 @@ func ParseFragment(r io.Reader, context *Node) ([]*Node, error) { fragment: true, context: context, } + if context != nil && context.Namespace != "" { + p.tokenizer = NewTokenizer(r) + } else { + p.tokenizer = NewTokenizerFragment(r, contextTag) + } + + for _, f := range opts { + f(p) + } root := &Node{ Type: ElementNode, @@ -2311,8 +2405,7 @@ func ParseFragment(r io.Reader, context *Node) ([]*Node, error) { } } - err := p.parse() - if err != nil { + if err := p.parse(); err != nil { return nil, err } diff --git a/vendor/golang.org/x/net/html/render.go b/vendor/golang.org/x/net/html/render.go index d34564f4..46879c08 100644 --- a/vendor/golang.org/x/net/html/render.go +++ b/vendor/golang.org/x/net/html/render.go @@ -134,6 +134,9 @@ func render1(w writer, n *Node) error { } } return w.WriteByte('>') + case RawNode: + _, err := w.WriteString(n.Data) + return err default: return errors.New("html: unknown node type") } @@ -252,20 +255,19 @@ func writeQuoted(w writer, s string) error { // Section 12.1.2, "Elements", gives this list of void elements. Void elements // are those that can't have any contents. var voidElements = map[string]bool{ - "area": true, - "base": true, - "br": true, - "col": true, - "command": true, - "embed": true, - "hr": true, - "img": true, - "input": true, - "keygen": true, - "link": true, - "meta": true, - "param": true, - "source": true, - "track": true, - "wbr": true, + "area": true, + "base": true, + "br": true, + "col": true, + "embed": true, + "hr": true, + "img": true, + "input": true, + "keygen": true, + "link": true, + "meta": true, + "param": true, + "source": true, + "track": true, + "wbr": true, } diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go index e3c01d7c..877709f9 100644 --- a/vendor/golang.org/x/net/html/token.go +++ b/vendor/golang.org/x/net/html/token.go @@ -296,8 +296,7 @@ func (z *Tokenizer) Buffered() []byte { // too many times in succession. func readAtLeastOneByte(r io.Reader, b []byte) (int, error) { for i := 0; i < 100; i++ { - n, err := r.Read(b) - if n != 0 || err != nil { + if n, err := r.Read(b); n != 0 || err != nil { return n, err } } @@ -347,6 +346,7 @@ loop: break loop } if c != '/' { + z.raw.end-- continue loop } if z.readRawEndTag() || z.err != nil { @@ -1067,6 +1067,11 @@ loop: // Raw returns the unmodified text of the current token. Calling Next, Token, // Text, TagName or TagAttr may change the contents of the returned slice. +// +// The token stream's raw bytes partition the byte stream (up until an +// ErrorToken). There are no overlaps or gaps between two consecutive token's +// raw bytes. One implication is that the byte offset of the current token is +// the sum of the lengths of all previous tokens' raw bytes. func (z *Tokenizer) Raw() []byte { return z.buf[z.raw.start:z.raw.end] } diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md index 0f443e69..8cfd6063 100644 --- a/vendor/golang.org/x/oauth2/README.md +++ b/vendor/golang.org/x/oauth2/README.md @@ -16,15 +16,16 @@ Or you can manually git clone the repository to See godoc for further documentation and examples. -* [godoc.org/golang.org/x/oauth2](http://godoc.org/golang.org/x/oauth2) -* [godoc.org/golang.org/x/oauth2/google](http://godoc.org/golang.org/x/oauth2/google) +* [godoc.org/golang.org/x/oauth2](https://godoc.org/golang.org/x/oauth2) +* [godoc.org/golang.org/x/oauth2/google](https://godoc.org/golang.org/x/oauth2/google) ## Policy for new packages -We no longer accept new provider-specific packages in this repo. For -defining provider endpoints and provider-specific OAuth2 behavior, we -encourage you to create packages elsewhere. We'll keep the existing -packages for compatibility. +We no longer accept new provider-specific packages in this repo if all +they do is add a single endpoint variable. If you just want to add a +single endpoint, add it to the +[godoc.org/golang.org/x/oauth2/endpoints](https://godoc.org/golang.org/x/oauth2/endpoints) +package. ## Report Issues / Send Patches diff --git a/vendor/golang.org/x/oauth2/internal/token.go b/vendor/golang.org/x/oauth2/internal/token.go index 83f7847e..355c3869 100644 --- a/vendor/golang.org/x/oauth2/internal/token.go +++ b/vendor/golang.org/x/oauth2/internal/token.go @@ -63,16 +63,12 @@ type tokenJSON struct { TokenType string `json:"token_type"` RefreshToken string `json:"refresh_token"` ExpiresIn expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number - Expires expirationTime `json:"expires"` // broken Facebook spelling of expires_in } func (e *tokenJSON) expiry() (t time.Time) { if v := e.ExpiresIn; v != 0 { return time.Now().Add(time.Duration(v) * time.Second) } - if v := e.Expires; v != 0 { - return time.Now().Add(time.Duration(v) * time.Second) - } return } @@ -264,12 +260,6 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { Raw: vals, } e := vals.Get("expires_in") - if e == "" || e == "null" { - // TODO(jbd): Facebook's OAuth2 implementation is broken and - // returns expires_in field in expires. Remove the fallback to expires, - // when Facebook fixes their implementation. - e = vals.Get("expires") - } expires, _ := strconv.Atoi(e) if expires != 0 { token.Expiry = time.Now().Add(time.Duration(expires) * time.Second) diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go index 428283f0..291df5c8 100644 --- a/vendor/golang.org/x/oauth2/oauth2.go +++ b/vendor/golang.org/x/oauth2/oauth2.go @@ -117,7 +117,7 @@ var ( // ApprovalForce forces the users to view the consent dialog // and confirm the permissions request at the URL returned // from AuthCodeURL, even if they've already done so. - ApprovalForce AuthCodeOption = SetAuthURLParam("approval_prompt", "force") + ApprovalForce AuthCodeOption = SetAuthURLParam("prompt", "consent") ) // An AuthCodeOption is passed to Config.AuthCodeURL. diff --git a/vendor/golang.org/x/oauth2/transport.go b/vendor/golang.org/x/oauth2/transport.go index aa0d34f1..90657915 100644 --- a/vendor/golang.org/x/oauth2/transport.go +++ b/vendor/golang.org/x/oauth2/transport.go @@ -6,7 +6,7 @@ package oauth2 import ( "errors" - "io" + "log" "net/http" "sync" ) @@ -25,9 +25,6 @@ type Transport struct { // Base is the base RoundTripper used to make HTTP requests. // If nil, http.DefaultTransport is used. Base http.RoundTripper - - mu sync.Mutex // guards modReq - modReq map[*http.Request]*http.Request // original -> modified } // RoundTrip authorizes and authenticates the request with an @@ -52,35 +49,22 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { req2 := cloneRequest(req) // per RoundTripper contract token.SetAuthHeader(req2) - t.setModReq(req, req2) - res, err := t.base().RoundTrip(req2) - // req.Body is assumed to have been closed by the base RoundTripper. + // req.Body is assumed to be closed by the base RoundTripper. reqBodyClosed = true - - if err != nil { - t.setModReq(req, nil) - return nil, err - } - res.Body = &onEOFReader{ - rc: res.Body, - fn: func() { t.setModReq(req, nil) }, - } - return res, nil + return t.base().RoundTrip(req2) } -// CancelRequest cancels an in-flight request by closing its connection. +var cancelOnce sync.Once + +// CancelRequest does nothing. It used to be a legacy cancellation mechanism +// but now only it only logs on first use to warn that it's deprecated. +// +// Deprecated: use contexts for cancellation instead. func (t *Transport) CancelRequest(req *http.Request) { - type canceler interface { - CancelRequest(*http.Request) - } - if cr, ok := t.base().(canceler); ok { - t.mu.Lock() - modReq := t.modReq[req] - delete(t.modReq, req) - t.mu.Unlock() - cr.CancelRequest(modReq) - } + cancelOnce.Do(func() { + log.Printf("deprecated: golang.org/x/oauth2: Transport.CancelRequest no longer does anything; use contexts") + }) } func (t *Transport) base() http.RoundTripper { @@ -90,19 +74,6 @@ func (t *Transport) base() http.RoundTripper { return http.DefaultTransport } -func (t *Transport) setModReq(orig, mod *http.Request) { - t.mu.Lock() - defer t.mu.Unlock() - if t.modReq == nil { - t.modReq = make(map[*http.Request]*http.Request) - } - if mod == nil { - delete(t.modReq, orig) - } else { - t.modReq[orig] = mod - } -} - // cloneRequest returns a clone of the provided *http.Request. // The clone is a shallow copy of the struct and its Header map. func cloneRequest(r *http.Request) *http.Request { @@ -116,29 +87,3 @@ func cloneRequest(r *http.Request) *http.Request { } return r2 } - -type onEOFReader struct { - rc io.ReadCloser - fn func() -} - -func (r *onEOFReader) Read(p []byte) (n int, err error) { - n, err = r.rc.Read(p) - if err == io.EOF { - r.runFunc() - } - return -} - -func (r *onEOFReader) Close() error { - err := r.rc.Close() - r.runFunc() - return err -} - -func (r *onEOFReader) runFunc() { - if fn := r.fn; fn != nil { - fn() - r.fn = nil - } -} diff --git a/vendor/google.golang.org/appengine/cloudsql/cloudsql.go b/vendor/google.golang.org/appengine/cloudsql/cloudsql.go deleted file mode 100644 index 7b27e6b1..00000000 --- a/vendor/google.golang.org/appengine/cloudsql/cloudsql.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -/* -Package cloudsql exposes access to Google Cloud SQL databases. - -This package does not work in App Engine "flexible environment". - -This package is intended for MySQL drivers to make App Engine-specific -connections. Applications should use this package through database/sql: -Select a pure Go MySQL driver that supports this package, and use sql.Open -with protocol "cloudsql" and an address of the Cloud SQL instance. - -A Go MySQL driver that has been tested to work well with Cloud SQL -is the go-sql-driver: - import "database/sql" - import _ "github.com/go-sql-driver/mysql" - - db, err := sql.Open("mysql", "user@cloudsql(project-id:instance-name)/dbname") - - -Another driver that works well with Cloud SQL is the mymysql driver: - import "database/sql" - import _ "github.com/ziutek/mymysql/godrv" - - db, err := sql.Open("mymysql", "cloudsql:instance-name*dbname/user/password") - - -Using either of these drivers, you can perform a standard SQL query. -This example assumes there is a table named 'users' with -columns 'first_name' and 'last_name': - - rows, err := db.Query("SELECT first_name, last_name FROM users") - if err != nil { - log.Errorf(ctx, "db.Query: %v", err) - } - defer rows.Close() - - for rows.Next() { - var firstName string - var lastName string - if err := rows.Scan(&firstName, &lastName); err != nil { - log.Errorf(ctx, "rows.Scan: %v", err) - continue - } - log.Infof(ctx, "First: %v - Last: %v", firstName, lastName) - } - if err := rows.Err(); err != nil { - log.Errorf(ctx, "Row error: %v", err) - } -*/ -package cloudsql - -import ( - "net" -) - -// Dial connects to the named Cloud SQL instance. -func Dial(instance string) (net.Conn, error) { - return connect(instance) -} diff --git a/vendor/google.golang.org/appengine/cloudsql/cloudsql_classic.go b/vendor/google.golang.org/appengine/cloudsql/cloudsql_classic.go deleted file mode 100644 index af62dba1..00000000 --- a/vendor/google.golang.org/appengine/cloudsql/cloudsql_classic.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -// +build appengine - -package cloudsql - -import ( - "net" - - "appengine/cloudsql" -) - -func connect(instance string) (net.Conn, error) { - return cloudsql.Dial(instance) -} diff --git a/vendor/google.golang.org/appengine/cloudsql/cloudsql_vm.go b/vendor/google.golang.org/appengine/cloudsql/cloudsql_vm.go deleted file mode 100644 index 90fa7b31..00000000 --- a/vendor/google.golang.org/appengine/cloudsql/cloudsql_vm.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -// +build !appengine - -package cloudsql - -import ( - "errors" - "net" -) - -func connect(instance string) (net.Conn, error) { - return nil, errors.New(`cloudsql: not supported in App Engine "flexible environment"`) -} diff --git a/vendor/google.golang.org/appengine/internal/api.go b/vendor/google.golang.org/appengine/internal/api.go index bbc1cb9c..721053c2 100644 --- a/vendor/google.golang.org/appengine/internal/api.go +++ b/vendor/google.golang.org/appengine/internal/api.go @@ -44,6 +44,7 @@ var ( curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace") userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP") remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr") + devRequestIdHeader = http.CanonicalHeaderKey("X-Appengine-Dev-Request-Id") // Outgoing headers. apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint") @@ -57,8 +58,11 @@ var ( apiHTTPClient = &http.Client{ Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - Dial: limitDial, + Proxy: http.ProxyFromEnvironment, + Dial: limitDial, + MaxIdleConns: 1000, + MaxIdleConnsPerHost: 10000, + IdleConnTimeout: 90 * time.Second, }, } @@ -494,6 +498,9 @@ func Call(ctx netcontext.Context, service, method string, in, out proto.Message) if ticket == "" { ticket = DefaultTicket() } + if dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != "" { + ticket = dri + } req := &remotepb.Request{ ServiceName: &service, Method: &method, diff --git a/vendor/google.golang.org/appengine/internal/net.go b/vendor/google.golang.org/appengine/internal/net.go index 3b94cf0c..fe429720 100644 --- a/vendor/google.golang.org/appengine/internal/net.go +++ b/vendor/google.golang.org/appengine/internal/net.go @@ -32,7 +32,7 @@ func limitDial(network, addr string) (net.Conn, error) { // Dial with a timeout in case the API host is MIA. // The connection should normally be very fast. - conn, err := net.DialTimeout(network, addr, 500*time.Millisecond) + conn, err := net.DialTimeout(network, addr, 10*time.Second) if err != nil { limitRelease() return nil, err diff --git a/vendor/google.golang.org/protobuf/AUTHORS b/vendor/google.golang.org/protobuf/AUTHORS new file mode 100644 index 00000000..2b00ddba --- /dev/null +++ b/vendor/google.golang.org/protobuf/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/google.golang.org/protobuf/CONTRIBUTORS b/vendor/google.golang.org/protobuf/CONTRIBUTORS new file mode 100644 index 00000000..1fbd3e97 --- /dev/null +++ b/vendor/google.golang.org/protobuf/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/github.com/gorilla/context/LICENSE b/vendor/google.golang.org/protobuf/LICENSE similarity index 83% rename from vendor/github.com/gorilla/context/LICENSE rename to vendor/google.golang.org/protobuf/LICENSE index 0e5fb872..49ea0f92 100644 --- a/vendor/github.com/gorilla/context/LICENSE +++ b/vendor/google.golang.org/protobuf/LICENSE @@ -1,16 +1,16 @@ -Copyright (c) 2012 Rodrigo Moraes. All rights reserved. +Copyright (c) 2018 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/google.golang.org/protobuf/PATENTS b/vendor/google.golang.org/protobuf/PATENTS new file mode 100644 index 00000000..73309904 --- /dev/null +++ b/vendor/google.golang.org/protobuf/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/decode.go b/vendor/google.golang.org/protobuf/encoding/prototext/decode.go new file mode 100644 index 00000000..cde2c20d --- /dev/null +++ b/vendor/google.golang.org/protobuf/encoding/prototext/decode.go @@ -0,0 +1,788 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package prototext + +import ( + "fmt" + "strings" + "unicode/utf8" + + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/encoding/text" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/fieldnum" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/set" + "google.golang.org/protobuf/proto" + pref "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Unmarshal reads the given []byte into the given proto.Message. +func Unmarshal(b []byte, m proto.Message) error { + return UnmarshalOptions{}.Unmarshal(b, m) +} + +// UnmarshalOptions is a configurable textproto format unmarshaler. +type UnmarshalOptions struct { + pragma.NoUnkeyedLiterals + + // AllowPartial accepts input for messages that will result in missing + // required fields. If AllowPartial is false (the default), Unmarshal will + // return error if there are any missing required fields. + AllowPartial bool + + // DiscardUnknown specifies whether to ignore unknown fields when parsing. + // An unknown field is any field whose field name or field number does not + // resolve to any known or extension field in the message. + // By default, unmarshal rejects unknown fields as an error. + DiscardUnknown bool + + // Resolver is used for looking up types when unmarshaling + // google.protobuf.Any messages or extension fields. + // If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + protoregistry.MessageTypeResolver + protoregistry.ExtensionTypeResolver + } +} + +// Unmarshal reads the given []byte and populates the given proto.Message using options in +// UnmarshalOptions object. +func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error { + proto.Reset(m) + + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + + dec := decoder{text.NewDecoder(b), o} + if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil { + return err + } + if o.AllowPartial { + return nil + } + return proto.CheckInitialized(m) +} + +type decoder struct { + *text.Decoder + opts UnmarshalOptions +} + +// newError returns an error object with position info. +func (d decoder) newError(pos int, f string, x ...interface{}) error { + line, column := d.Position(pos) + head := fmt.Sprintf("(line %d:%d): ", line, column) + return errors.New(head+f, x...) +} + +// unexpectedTokenError returns a syntax error for the given unexpected token. +func (d decoder) unexpectedTokenError(tok text.Token) error { + return d.syntaxError(tok.Pos(), "unexpected token: %s", tok.RawString()) +} + +// syntaxError returns a syntax error for given position. +func (d decoder) syntaxError(pos int, f string, x ...interface{}) error { + line, column := d.Position(pos) + head := fmt.Sprintf("syntax error (line %d:%d): ", line, column) + return errors.New(head+f, x...) +} + +// unmarshalMessage unmarshals into the given protoreflect.Message. +func (d decoder) unmarshalMessage(m pref.Message, checkDelims bool) error { + messageDesc := m.Descriptor() + if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) { + return errors.New("no support for proto1 MessageSets") + } + + if messageDesc.FullName() == "google.protobuf.Any" { + return d.unmarshalAny(m, checkDelims) + } + + if checkDelims { + tok, err := d.Read() + if err != nil { + return err + } + + if tok.Kind() != text.MessageOpen { + return d.unexpectedTokenError(tok) + } + } + + var seenNums set.Ints + var seenOneofs set.Ints + fieldDescs := messageDesc.Fields() + + for { + // Read field name. + tok, err := d.Read() + if err != nil { + return err + } + switch typ := tok.Kind(); typ { + case text.Name: + // Continue below. + case text.EOF: + if checkDelims { + return text.ErrUnexpectedEOF + } + return nil + default: + if checkDelims && typ == text.MessageClose { + return nil + } + return d.unexpectedTokenError(tok) + } + + // Resolve the field descriptor. + var name pref.Name + var fd pref.FieldDescriptor + var xt pref.ExtensionType + var xtErr error + var isFieldNumberName bool + + switch tok.NameKind() { + case text.IdentName: + name = pref.Name(tok.IdentName()) + fd = fieldDescs.ByName(name) + if fd == nil { + // The proto name of a group field is in all lowercase, + // while the textproto field name is the group message name. + gd := fieldDescs.ByName(pref.Name(strings.ToLower(string(name)))) + if gd != nil && gd.Kind() == pref.GroupKind && gd.Message().Name() == name { + fd = gd + } + } else if fd.Kind() == pref.GroupKind && fd.Message().Name() != name { + fd = nil // reset since field name is actually the message name + } + + case text.TypeName: + // Handle extensions only. This code path is not for Any. + xt, xtErr = d.findExtension(pref.FullName(tok.TypeName())) + + case text.FieldNumber: + isFieldNumberName = true + num := pref.FieldNumber(tok.FieldNumber()) + if !num.IsValid() { + return d.newError(tok.Pos(), "invalid field number: %d", num) + } + fd = fieldDescs.ByNumber(num) + if fd == nil { + xt, xtErr = d.opts.Resolver.FindExtensionByNumber(messageDesc.FullName(), num) + } + } + + if xt != nil { + fd = xt.TypeDescriptor() + if !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() { + return d.newError(tok.Pos(), "message %v cannot be extended by %v", messageDesc.FullName(), fd.FullName()) + } + } else if xtErr != nil && xtErr != protoregistry.NotFound { + return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr) + } + if flags.ProtoLegacy { + if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { + fd = nil // reset since the weak reference is not linked in + } + } + + // Handle unknown fields. + if fd == nil { + if d.opts.DiscardUnknown || messageDesc.ReservedNames().Has(name) { + d.skipValue() + continue + } + return d.newError(tok.Pos(), "unknown field: %v", tok.RawString()) + } + + // Handle fields identified by field number. + if isFieldNumberName { + // TODO: Add an option to permit parsing field numbers. + // + // This requires careful thought as the MarshalOptions.EmitUnknown + // option allows formatting unknown fields as the field number and the + // best-effort textual representation of the field value. In that case, + // it may not be possible to unmarshal the value from a parser that does + // have information about the unknown field. + return d.newError(tok.Pos(), "cannot specify field by number: %v", tok.RawString()) + } + + switch { + case fd.IsList(): + kind := fd.Kind() + if kind != pref.MessageKind && kind != pref.GroupKind && !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + + list := m.Mutable(fd).List() + if err := d.unmarshalList(fd, list); err != nil { + return err + } + + case fd.IsMap(): + mmap := m.Mutable(fd).Map() + if err := d.unmarshalMap(fd, mmap); err != nil { + return err + } + + default: + kind := fd.Kind() + if kind != pref.MessageKind && kind != pref.GroupKind && !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + + // If field is a oneof, check if it has already been set. + if od := fd.ContainingOneof(); od != nil { + idx := uint64(od.Index()) + if seenOneofs.Has(idx) { + return d.newError(tok.Pos(), "error parsing %q, oneof %v is already set", tok.RawString(), od.FullName()) + } + seenOneofs.Set(idx) + } + + num := uint64(fd.Number()) + if seenNums.Has(num) { + return d.newError(tok.Pos(), "non-repeated field %q is repeated", tok.RawString()) + } + + if err := d.unmarshalSingular(fd, m); err != nil { + return err + } + seenNums.Set(num) + } + } + + return nil +} + +// findExtension returns protoreflect.ExtensionType from the Resolver if found. +func (d decoder) findExtension(xtName pref.FullName) (pref.ExtensionType, error) { + xt, err := d.opts.Resolver.FindExtensionByName(xtName) + if err == nil { + return xt, nil + } + return messageset.FindMessageSetExtension(d.opts.Resolver, xtName) +} + +// unmarshalSingular unmarshals a non-repeated field value specified by the +// given FieldDescriptor. +func (d decoder) unmarshalSingular(fd pref.FieldDescriptor, m pref.Message) error { + var val pref.Value + var err error + switch fd.Kind() { + case pref.MessageKind, pref.GroupKind: + val = m.NewField(fd) + err = d.unmarshalMessage(val.Message(), true) + default: + val, err = d.unmarshalScalar(fd) + } + if err == nil { + m.Set(fd, val) + } + return err +} + +// unmarshalScalar unmarshals a scalar/enum protoreflect.Value specified by the +// given FieldDescriptor. +func (d decoder) unmarshalScalar(fd pref.FieldDescriptor) (pref.Value, error) { + tok, err := d.Read() + if err != nil { + return pref.Value{}, err + } + + if tok.Kind() != text.Scalar { + return pref.Value{}, d.unexpectedTokenError(tok) + } + + kind := fd.Kind() + switch kind { + case pref.BoolKind: + if b, ok := tok.Bool(); ok { + return pref.ValueOfBool(b), nil + } + + case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: + if n, ok := tok.Int32(); ok { + return pref.ValueOfInt32(n), nil + } + + case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: + if n, ok := tok.Int64(); ok { + return pref.ValueOfInt64(n), nil + } + + case pref.Uint32Kind, pref.Fixed32Kind: + if n, ok := tok.Uint32(); ok { + return pref.ValueOfUint32(n), nil + } + + case pref.Uint64Kind, pref.Fixed64Kind: + if n, ok := tok.Uint64(); ok { + return pref.ValueOfUint64(n), nil + } + + case pref.FloatKind: + if n, ok := tok.Float32(); ok { + return pref.ValueOfFloat32(n), nil + } + + case pref.DoubleKind: + if n, ok := tok.Float64(); ok { + return pref.ValueOfFloat64(n), nil + } + + case pref.StringKind: + if s, ok := tok.String(); ok { + if utf8.ValidString(s) { + return pref.ValueOfString(s), nil + } + return pref.Value{}, d.newError(tok.Pos(), "contains invalid UTF-8") + } + + case pref.BytesKind: + if b, ok := tok.String(); ok { + return pref.ValueOfBytes([]byte(b)), nil + } + + case pref.EnumKind: + if lit, ok := tok.Enum(); ok { + // Lookup EnumNumber based on name. + if enumVal := fd.Enum().Values().ByName(pref.Name(lit)); enumVal != nil { + return pref.ValueOfEnum(enumVal.Number()), nil + } + } + if num, ok := tok.Int32(); ok { + return pref.ValueOfEnum(pref.EnumNumber(num)), nil + } + + default: + panic(fmt.Sprintf("invalid scalar kind %v", kind)) + } + + return pref.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString()) +} + +// unmarshalList unmarshals into given protoreflect.List. A list value can +// either be in [] syntax or simply just a single scalar/message value. +func (d decoder) unmarshalList(fd pref.FieldDescriptor, list pref.List) error { + tok, err := d.Peek() + if err != nil { + return err + } + + switch fd.Kind() { + case pref.MessageKind, pref.GroupKind: + switch tok.Kind() { + case text.ListOpen: + d.Read() + for { + tok, err := d.Peek() + if err != nil { + return err + } + + switch tok.Kind() { + case text.ListClose: + d.Read() + return nil + case text.MessageOpen: + pval := list.NewElement() + if err := d.unmarshalMessage(pval.Message(), true); err != nil { + return err + } + list.Append(pval) + default: + return d.unexpectedTokenError(tok) + } + } + + case text.MessageOpen: + pval := list.NewElement() + if err := d.unmarshalMessage(pval.Message(), true); err != nil { + return err + } + list.Append(pval) + return nil + } + + default: + switch tok.Kind() { + case text.ListOpen: + d.Read() + for { + tok, err := d.Peek() + if err != nil { + return err + } + + switch tok.Kind() { + case text.ListClose: + d.Read() + return nil + case text.Scalar: + pval, err := d.unmarshalScalar(fd) + if err != nil { + return err + } + list.Append(pval) + default: + return d.unexpectedTokenError(tok) + } + } + + case text.Scalar: + pval, err := d.unmarshalScalar(fd) + if err != nil { + return err + } + list.Append(pval) + return nil + } + } + + return d.unexpectedTokenError(tok) +} + +// unmarshalMap unmarshals into given protoreflect.Map. A map value is a +// textproto message containing {key: , value: }. +func (d decoder) unmarshalMap(fd pref.FieldDescriptor, mmap pref.Map) error { + // Determine ahead whether map entry is a scalar type or a message type in + // order to call the appropriate unmarshalMapValue func inside + // unmarshalMapEntry. + var unmarshalMapValue func() (pref.Value, error) + switch fd.MapValue().Kind() { + case pref.MessageKind, pref.GroupKind: + unmarshalMapValue = func() (pref.Value, error) { + pval := mmap.NewValue() + if err := d.unmarshalMessage(pval.Message(), true); err != nil { + return pref.Value{}, err + } + return pval, nil + } + default: + unmarshalMapValue = func() (pref.Value, error) { + return d.unmarshalScalar(fd.MapValue()) + } + } + + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.MessageOpen: + return d.unmarshalMapEntry(fd, mmap, unmarshalMapValue) + + case text.ListOpen: + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.ListClose: + return nil + case text.MessageOpen: + if err := d.unmarshalMapEntry(fd, mmap, unmarshalMapValue); err != nil { + return err + } + default: + return d.unexpectedTokenError(tok) + } + } + + default: + return d.unexpectedTokenError(tok) + } +} + +// unmarshalMap unmarshals into given protoreflect.Map. A map value is a +// textproto message containing {key: , value: }. +func (d decoder) unmarshalMapEntry(fd pref.FieldDescriptor, mmap pref.Map, unmarshalMapValue func() (pref.Value, error)) error { + var key pref.MapKey + var pval pref.Value +Loop: + for { + // Read field name. + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.Name: + if tok.NameKind() != text.IdentName { + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "unknown map entry field %q", tok.RawString()) + } + d.skipValue() + continue Loop + } + // Continue below. + case text.MessageClose: + break Loop + default: + return d.unexpectedTokenError(tok) + } + + name := tok.IdentName() + switch name { + case "key": + if !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + if key.IsValid() { + return d.newError(tok.Pos(), `map entry "key" cannot be repeated`) + } + val, err := d.unmarshalScalar(fd.MapKey()) + if err != nil { + return err + } + key = val.MapKey() + + case "value": + if kind := fd.MapValue().Kind(); (kind != pref.MessageKind) && (kind != pref.GroupKind) { + if !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + } + if pval.IsValid() { + return d.newError(tok.Pos(), `map entry "value" cannot be repeated`) + } + pval, err = unmarshalMapValue() + if err != nil { + return err + } + + default: + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "unknown map entry field %q", name) + } + d.skipValue() + } + } + + if !key.IsValid() { + key = fd.MapKey().Default().MapKey() + } + if !pval.IsValid() { + switch fd.MapValue().Kind() { + case pref.MessageKind, pref.GroupKind: + // If value field is not set for message/group types, construct an + // empty one as default. + pval = mmap.NewValue() + default: + pval = fd.MapValue().Default() + } + } + mmap.Set(key, pval) + return nil +} + +// unmarshalAny unmarshals an Any textproto. It can either be in expanded form +// or non-expanded form. +func (d decoder) unmarshalAny(m pref.Message, checkDelims bool) error { + var typeURL string + var bValue []byte + + // hasFields tracks which valid fields have been seen in the loop below in + // order to flag an error if there are duplicates or conflicts. It may + // contain the strings "type_url", "value" and "expanded". The literal + // "expanded" is used to indicate that the expanded form has been + // encountered already. + hasFields := map[string]bool{} + + if checkDelims { + tok, err := d.Read() + if err != nil { + return err + } + + if tok.Kind() != text.MessageOpen { + return d.unexpectedTokenError(tok) + } + } + +Loop: + for { + // Read field name. Can only have 3 possible field names, i.e. type_url, + // value and type URL name inside []. + tok, err := d.Read() + if err != nil { + return err + } + if typ := tok.Kind(); typ != text.Name { + if checkDelims { + if typ == text.MessageClose { + break Loop + } + } else if typ == text.EOF { + break Loop + } + return d.unexpectedTokenError(tok) + } + + switch tok.NameKind() { + case text.IdentName: + // Both type_url and value fields require field separator :. + if !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + + switch tok.IdentName() { + case "type_url": + if hasFields["type_url"] { + return d.newError(tok.Pos(), "duplicate Any type_url field") + } + if hasFields["expanded"] { + return d.newError(tok.Pos(), "conflict with [%s] field", typeURL) + } + tok, err := d.Read() + if err != nil { + return err + } + var ok bool + typeURL, ok = tok.String() + if !ok { + return d.newError(tok.Pos(), "invalid Any type_url: %v", tok.RawString()) + } + hasFields["type_url"] = true + + case "value": + if hasFields["value"] { + return d.newError(tok.Pos(), "duplicate Any value field") + } + if hasFields["expanded"] { + return d.newError(tok.Pos(), "conflict with [%s] field", typeURL) + } + tok, err := d.Read() + if err != nil { + return err + } + s, ok := tok.String() + if !ok { + return d.newError(tok.Pos(), "invalid Any value: %v", tok.RawString()) + } + bValue = []byte(s) + hasFields["value"] = true + + default: + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "invalid field name %q in google.protobuf.Any message", tok.RawString()) + } + } + + case text.TypeName: + if hasFields["expanded"] { + return d.newError(tok.Pos(), "cannot have more than one type") + } + if hasFields["type_url"] { + return d.newError(tok.Pos(), "conflict with type_url field") + } + typeURL = tok.TypeName() + var err error + bValue, err = d.unmarshalExpandedAny(typeURL, tok.Pos()) + if err != nil { + return err + } + hasFields["expanded"] = true + + default: + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "invalid field name %q in google.protobuf.Any message", tok.RawString()) + } + } + } + + fds := m.Descriptor().Fields() + if len(typeURL) > 0 { + m.Set(fds.ByNumber(fieldnum.Any_TypeUrl), pref.ValueOfString(typeURL)) + } + if len(bValue) > 0 { + m.Set(fds.ByNumber(fieldnum.Any_Value), pref.ValueOfBytes(bValue)) + } + return nil +} + +func (d decoder) unmarshalExpandedAny(typeURL string, pos int) ([]byte, error) { + mt, err := d.opts.Resolver.FindMessageByURL(typeURL) + if err != nil { + return nil, d.newError(pos, "unable to resolve message [%v]: %v", typeURL, err) + } + // Create new message for the embedded message type and unmarshal the value + // field into it. + m := mt.New() + if err := d.unmarshalMessage(m, true); err != nil { + return nil, err + } + // Serialize the embedded message and return the resulting bytes. + b, err := proto.MarshalOptions{ + AllowPartial: true, // Never check required fields inside an Any. + Deterministic: true, + }.Marshal(m.Interface()) + if err != nil { + return nil, d.newError(pos, "error in marshaling message into Any.value: %v", err) + } + return b, nil +} + +// skipValue makes the decoder parse a field value in order to advance the read +// to the next field. It relies on Read returning an error if the types are not +// in valid sequence. +func (d decoder) skipValue() error { + tok, err := d.Read() + if err != nil { + return err + } + // Only need to continue reading for messages and lists. + switch tok.Kind() { + case text.MessageOpen: + return d.skipMessageValue() + + case text.ListOpen: + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.ListClose: + return nil + case text.MessageOpen: + return d.skipMessageValue() + default: + // Skip items. This will not validate whether skipped values are + // of the same type or not, same behavior as C++ + // TextFormat::Parser::AllowUnknownField(true) version 3.8.0. + if err := d.skipValue(); err != nil { + return err + } + } + } + } + return nil +} + +// skipMessageValue makes the decoder parse and skip over all fields in a +// message. It assumes that the previous read type is MessageOpen. +func (d decoder) skipMessageValue() error { + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.MessageClose: + return nil + case text.Name: + if err := d.skipValue(); err != nil { + return err + } + } + } +} diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/doc.go b/vendor/google.golang.org/protobuf/encoding/prototext/doc.go new file mode 100644 index 00000000..162b4f98 --- /dev/null +++ b/vendor/google.golang.org/protobuf/encoding/prototext/doc.go @@ -0,0 +1,7 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package prototext marshals and unmarshals protocol buffer messages as the +// textproto format. +package prototext diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go new file mode 100644 index 00000000..83b65a66 --- /dev/null +++ b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go @@ -0,0 +1,410 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package prototext + +import ( + "fmt" + "sort" + "strconv" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/encoding/text" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/fieldnum" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/mapsort" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/proto" + pref "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +const defaultIndent = " " + +// Format formats the message as a multiline string. +// This function is only intended for human consumption and ignores errors. +// Do not depend on the output being stable. It may change over time across +// different versions of the program. +func Format(m proto.Message) string { + return MarshalOptions{Multiline: true}.Format(m) +} + +// Marshal writes the given proto.Message in textproto format using default +// options. Do not depend on the output being stable. It may change over time +// across different versions of the program. +func Marshal(m proto.Message) ([]byte, error) { + return MarshalOptions{}.Marshal(m) +} + +// MarshalOptions is a configurable text format marshaler. +type MarshalOptions struct { + pragma.NoUnkeyedLiterals + + // Multiline specifies whether the marshaler should format the output in + // indented-form with every textual element on a new line. + // If Indent is an empty string, then an arbitrary indent is chosen. + Multiline bool + + // Indent specifies the set of indentation characters to use in a multiline + // formatted output such that every entry is preceded by Indent and + // terminated by a newline. If non-empty, then Multiline is treated as true. + // Indent can only be composed of space or tab characters. + Indent string + + // AllowPartial allows messages that have missing required fields to marshal + // without returning an error. If AllowPartial is false (the default), + // Marshal will return error if there are any missing required fields. + AllowPartial bool + + // EmitUnknown specifies whether to emit unknown fields in the output. + // If specified, the unmarshaler may be unable to parse the output. + // The default is to exclude unknown fields. + EmitUnknown bool + + // Resolver is used for looking up types when expanding google.protobuf.Any + // messages. If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + protoregistry.ExtensionTypeResolver + protoregistry.MessageTypeResolver + } +} + +// Format formats the message as a string. +// This method is only intended for human consumption and ignores errors. +// Do not depend on the output being stable. It may change over time across +// different versions of the program. +func (o MarshalOptions) Format(m proto.Message) string { + if m == nil || !m.ProtoReflect().IsValid() { + return "" // invalid syntax, but okay since this is for debugging + } + o.AllowPartial = true + o.EmitUnknown = true + b, _ := o.Marshal(m) + return string(b) +} + +// Marshal writes the given proto.Message in textproto format using options in +// MarshalOptions object. Do not depend on the output being stable. It may +// change over time across different versions of the program. +func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { + const outputASCII = false + var delims = [2]byte{'{', '}'} + + if o.Multiline && o.Indent == "" { + o.Indent = defaultIndent + } + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + + internalEnc, err := text.NewEncoder(o.Indent, delims, outputASCII) + if err != nil { + return nil, err + } + + enc := encoder{internalEnc, o} + err = enc.marshalMessage(m.ProtoReflect(), false) + if err != nil { + return nil, err + } + out := enc.Bytes() + if len(o.Indent) > 0 && len(out) > 0 { + out = append(out, '\n') + } + if o.AllowPartial { + return out, nil + } + return out, proto.CheckInitialized(m) +} + +type encoder struct { + *text.Encoder + opts MarshalOptions +} + +// marshalMessage marshals the given protoreflect.Message. +func (e encoder) marshalMessage(m pref.Message, inclDelims bool) error { + messageDesc := m.Descriptor() + if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) { + return errors.New("no support for proto1 MessageSets") + } + + if inclDelims { + e.StartMessage() + defer e.EndMessage() + } + + // Handle Any expansion. + if messageDesc.FullName() == "google.protobuf.Any" { + if e.marshalAny(m) { + return nil + } + // If unable to expand, continue on to marshal Any as a regular message. + } + + // Marshal known fields. + fieldDescs := messageDesc.Fields() + size := fieldDescs.Len() + for i := 0; i < size; { + fd := fieldDescs.Get(i) + if od := fd.ContainingOneof(); od != nil { + fd = m.WhichOneof(od) + i += od.Fields().Len() + } else { + i++ + } + + if fd == nil || !m.Has(fd) { + continue + } + + name := fd.Name() + // Use type name for group field name. + if fd.Kind() == pref.GroupKind { + name = fd.Message().Name() + } + val := m.Get(fd) + if err := e.marshalField(string(name), val, fd); err != nil { + return err + } + } + + // Marshal extensions. + if err := e.marshalExtensions(m); err != nil { + return err + } + + // Marshal unknown fields. + if e.opts.EmitUnknown { + e.marshalUnknown(m.GetUnknown()) + } + + return nil +} + +// marshalField marshals the given field with protoreflect.Value. +func (e encoder) marshalField(name string, val pref.Value, fd pref.FieldDescriptor) error { + switch { + case fd.IsList(): + return e.marshalList(name, val.List(), fd) + case fd.IsMap(): + return e.marshalMap(name, val.Map(), fd) + default: + e.WriteName(name) + return e.marshalSingular(val, fd) + } +} + +// marshalSingular marshals the given non-repeated field value. This includes +// all scalar types, enums, messages, and groups. +func (e encoder) marshalSingular(val pref.Value, fd pref.FieldDescriptor) error { + kind := fd.Kind() + switch kind { + case pref.BoolKind: + e.WriteBool(val.Bool()) + + case pref.StringKind: + s := val.String() + if !utf8.ValidString(s) { + return errors.InvalidUTF8(string(fd.FullName())) + } + e.WriteString(s) + + case pref.Int32Kind, pref.Int64Kind, + pref.Sint32Kind, pref.Sint64Kind, + pref.Sfixed32Kind, pref.Sfixed64Kind: + e.WriteInt(val.Int()) + + case pref.Uint32Kind, pref.Uint64Kind, + pref.Fixed32Kind, pref.Fixed64Kind: + e.WriteUint(val.Uint()) + + case pref.FloatKind: + // Encoder.WriteFloat handles the special numbers NaN and infinites. + e.WriteFloat(val.Float(), 32) + + case pref.DoubleKind: + // Encoder.WriteFloat handles the special numbers NaN and infinites. + e.WriteFloat(val.Float(), 64) + + case pref.BytesKind: + e.WriteString(string(val.Bytes())) + + case pref.EnumKind: + num := val.Enum() + if desc := fd.Enum().Values().ByNumber(num); desc != nil { + e.WriteLiteral(string(desc.Name())) + } else { + // Use numeric value if there is no enum description. + e.WriteInt(int64(num)) + } + + case pref.MessageKind, pref.GroupKind: + return e.marshalMessage(val.Message(), true) + + default: + panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind)) + } + return nil +} + +// marshalList marshals the given protoreflect.List as multiple name-value fields. +func (e encoder) marshalList(name string, list pref.List, fd pref.FieldDescriptor) error { + size := list.Len() + for i := 0; i < size; i++ { + e.WriteName(name) + if err := e.marshalSingular(list.Get(i), fd); err != nil { + return err + } + } + return nil +} + +// marshalMap marshals the given protoreflect.Map as multiple name-value fields. +func (e encoder) marshalMap(name string, mmap pref.Map, fd pref.FieldDescriptor) error { + var err error + mapsort.Range(mmap, fd.MapKey().Kind(), func(key pref.MapKey, val pref.Value) bool { + e.WriteName(name) + e.StartMessage() + defer e.EndMessage() + + e.WriteName("key") + err = e.marshalSingular(key.Value(), fd.MapKey()) + if err != nil { + return false + } + + e.WriteName("value") + err = e.marshalSingular(val, fd.MapValue()) + if err != nil { + return false + } + return true + }) + return err +} + +// marshalExtensions marshals extension fields. +func (e encoder) marshalExtensions(m pref.Message) error { + type entry struct { + key string + value pref.Value + desc pref.FieldDescriptor + } + + // Get a sorted list based on field key first. + var entries []entry + m.Range(func(fd pref.FieldDescriptor, v pref.Value) bool { + if !fd.IsExtension() { + return true + } + // For MessageSet extensions, the name used is the parent message. + name := fd.FullName() + if messageset.IsMessageSetExtension(fd) { + name = name.Parent() + } + entries = append(entries, entry{ + key: string(name), + value: v, + desc: fd, + }) + return true + }) + // Sort extensions lexicographically. + sort.Slice(entries, func(i, j int) bool { + return entries[i].key < entries[j].key + }) + + // Write out sorted list. + for _, entry := range entries { + // Extension field name is the proto field name enclosed in []. + name := "[" + entry.key + "]" + if err := e.marshalField(name, entry.value, entry.desc); err != nil { + return err + } + } + return nil +} + +// marshalUnknown parses the given []byte and marshals fields out. +// This function assumes proper encoding in the given []byte. +func (e encoder) marshalUnknown(b []byte) { + const dec = 10 + const hex = 16 + for len(b) > 0 { + num, wtype, n := protowire.ConsumeTag(b) + b = b[n:] + e.WriteName(strconv.FormatInt(int64(num), dec)) + + switch wtype { + case protowire.VarintType: + var v uint64 + v, n = protowire.ConsumeVarint(b) + e.WriteUint(v) + case protowire.Fixed32Type: + var v uint32 + v, n = protowire.ConsumeFixed32(b) + e.WriteLiteral("0x" + strconv.FormatUint(uint64(v), hex)) + case protowire.Fixed64Type: + var v uint64 + v, n = protowire.ConsumeFixed64(b) + e.WriteLiteral("0x" + strconv.FormatUint(v, hex)) + case protowire.BytesType: + var v []byte + v, n = protowire.ConsumeBytes(b) + e.WriteString(string(v)) + case protowire.StartGroupType: + e.StartMessage() + var v []byte + v, n = protowire.ConsumeGroup(num, b) + e.marshalUnknown(v) + e.EndMessage() + default: + panic(fmt.Sprintf("prototext: error parsing unknown field wire type: %v", wtype)) + } + + b = b[n:] + } +} + +// marshalAny marshals the given google.protobuf.Any message in expanded form. +// It returns true if it was able to marshal, else false. +func (e encoder) marshalAny(any pref.Message) bool { + // Construct the embedded message. + fds := any.Descriptor().Fields() + fdType := fds.ByNumber(fieldnum.Any_TypeUrl) + typeURL := any.Get(fdType).String() + mt, err := e.opts.Resolver.FindMessageByURL(typeURL) + if err != nil { + return false + } + m := mt.New().Interface() + + // Unmarshal bytes into embedded message. + fdValue := fds.ByNumber(fieldnum.Any_Value) + value := any.Get(fdValue) + err = proto.UnmarshalOptions{ + AllowPartial: true, + Resolver: e.opts.Resolver, + }.Unmarshal(value.Bytes(), m) + if err != nil { + return false + } + + // Get current encoder position. If marshaling fails, reset encoder output + // back to this position. + pos := e.Snapshot() + + // Field name is the proto field name enclosed in []. + e.WriteName("[" + typeURL + "]") + err = e.marshalMessage(m.ProtoReflect(), true) + if err != nil { + e.Reset(pos) + return false + } + return true +} diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go new file mode 100644 index 00000000..a427f8b7 --- /dev/null +++ b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go @@ -0,0 +1,538 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protowire parses and formats the raw wire encoding. +// See https://developers.google.com/protocol-buffers/docs/encoding. +// +// For marshaling and unmarshaling entire protobuf messages, +// use the "google.golang.org/protobuf/proto" package instead. +package protowire + +import ( + "io" + "math" + "math/bits" + + "google.golang.org/protobuf/internal/errors" +) + +// Number represents the field number. +type Number int32 + +const ( + MinValidNumber Number = 1 + FirstReservedNumber Number = 19000 + LastReservedNumber Number = 19999 + MaxValidNumber Number = 1<<29 - 1 +) + +// IsValid reports whether the field number is semantically valid. +// +// Note that while numbers within the reserved range are semantically invalid, +// they are syntactically valid in the wire format. +// Implementations may treat records with reserved field numbers as unknown. +func (n Number) IsValid() bool { + return MinValidNumber <= n && n < FirstReservedNumber || LastReservedNumber < n && n <= MaxValidNumber +} + +// Type represents the wire type. +type Type int8 + +const ( + VarintType Type = 0 + Fixed32Type Type = 5 + Fixed64Type Type = 1 + BytesType Type = 2 + StartGroupType Type = 3 + EndGroupType Type = 4 +) + +const ( + _ = -iota + errCodeTruncated + errCodeFieldNumber + errCodeOverflow + errCodeReserved + errCodeEndGroup +) + +var ( + errFieldNumber = errors.New("invalid field number") + errOverflow = errors.New("variable length integer overflow") + errReserved = errors.New("cannot parse reserved wire type") + errEndGroup = errors.New("mismatching end group marker") + errParse = errors.New("parse error") +) + +// ParseError converts an error code into an error value. +// This returns nil if n is a non-negative number. +func ParseError(n int) error { + if n >= 0 { + return nil + } + switch n { + case errCodeTruncated: + return io.ErrUnexpectedEOF + case errCodeFieldNumber: + return errFieldNumber + case errCodeOverflow: + return errOverflow + case errCodeReserved: + return errReserved + case errCodeEndGroup: + return errEndGroup + default: + return errParse + } +} + +// ConsumeField parses an entire field record (both tag and value) and returns +// the field number, the wire type, and the total length. +// This returns a negative length upon an error (see ParseError). +// +// The total length includes the tag header and the end group marker (if the +// field is a group). +func ConsumeField(b []byte) (Number, Type, int) { + num, typ, n := ConsumeTag(b) + if n < 0 { + return 0, 0, n // forward error code + } + m := ConsumeFieldValue(num, typ, b[n:]) + if m < 0 { + return 0, 0, m // forward error code + } + return num, typ, n + m +} + +// ConsumeFieldValue parses a field value and returns its length. +// This assumes that the field Number and wire Type have already been parsed. +// This returns a negative length upon an error (see ParseError). +// +// When parsing a group, the length includes the end group marker and +// the end group is verified to match the starting field number. +func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { + switch typ { + case VarintType: + _, n = ConsumeVarint(b) + return n + case Fixed32Type: + _, n = ConsumeFixed32(b) + return n + case Fixed64Type: + _, n = ConsumeFixed64(b) + return n + case BytesType: + _, n = ConsumeBytes(b) + return n + case StartGroupType: + n0 := len(b) + for { + num2, typ2, n := ConsumeTag(b) + if n < 0 { + return n // forward error code + } + b = b[n:] + if typ2 == EndGroupType { + if num != num2 { + return errCodeEndGroup + } + return n0 - len(b) + } + + n = ConsumeFieldValue(num2, typ2, b) + if n < 0 { + return n // forward error code + } + b = b[n:] + } + case EndGroupType: + return errCodeEndGroup + default: + return errCodeReserved + } +} + +// AppendTag encodes num and typ as a varint-encoded tag and appends it to b. +func AppendTag(b []byte, num Number, typ Type) []byte { + return AppendVarint(b, EncodeTag(num, typ)) +} + +// ConsumeTag parses b as a varint-encoded tag, reporting its length. +// This returns a negative length upon an error (see ParseError). +func ConsumeTag(b []byte) (Number, Type, int) { + v, n := ConsumeVarint(b) + if n < 0 { + return 0, 0, n // forward error code + } + num, typ := DecodeTag(v) + if num < MinValidNumber { + return 0, 0, errCodeFieldNumber + } + return num, typ, n +} + +func SizeTag(num Number) int { + return SizeVarint(EncodeTag(num, 0)) // wire type has no effect on size +} + +// AppendVarint appends v to b as a varint-encoded uint64. +func AppendVarint(b []byte, v uint64) []byte { + switch { + case v < 1<<7: + b = append(b, byte(v)) + case v < 1<<14: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte(v>>7)) + case v < 1<<21: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte(v>>14)) + case v < 1<<28: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte(v>>21)) + case v < 1<<35: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte(v>>28)) + case v < 1<<42: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte(v>>35)) + case v < 1<<49: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte(v>>42)) + case v < 1<<56: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte(v>>49)) + case v < 1<<63: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte(v>>56)) + default: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte((v>>56)&0x7f|0x80), + 1) + } + return b +} + +// ConsumeVarint parses b as a varint-encoded uint64, reporting its length. +// This returns a negative length upon an error (see ParseError). +func ConsumeVarint(b []byte) (v uint64, n int) { + var y uint64 + if len(b) <= 0 { + return 0, errCodeTruncated + } + v = uint64(b[0]) + if v < 0x80 { + return v, 1 + } + v -= 0x80 + + if len(b) <= 1 { + return 0, errCodeTruncated + } + y = uint64(b[1]) + v += y << 7 + if y < 0x80 { + return v, 2 + } + v -= 0x80 << 7 + + if len(b) <= 2 { + return 0, errCodeTruncated + } + y = uint64(b[2]) + v += y << 14 + if y < 0x80 { + return v, 3 + } + v -= 0x80 << 14 + + if len(b) <= 3 { + return 0, errCodeTruncated + } + y = uint64(b[3]) + v += y << 21 + if y < 0x80 { + return v, 4 + } + v -= 0x80 << 21 + + if len(b) <= 4 { + return 0, errCodeTruncated + } + y = uint64(b[4]) + v += y << 28 + if y < 0x80 { + return v, 5 + } + v -= 0x80 << 28 + + if len(b) <= 5 { + return 0, errCodeTruncated + } + y = uint64(b[5]) + v += y << 35 + if y < 0x80 { + return v, 6 + } + v -= 0x80 << 35 + + if len(b) <= 6 { + return 0, errCodeTruncated + } + y = uint64(b[6]) + v += y << 42 + if y < 0x80 { + return v, 7 + } + v -= 0x80 << 42 + + if len(b) <= 7 { + return 0, errCodeTruncated + } + y = uint64(b[7]) + v += y << 49 + if y < 0x80 { + return v, 8 + } + v -= 0x80 << 49 + + if len(b) <= 8 { + return 0, errCodeTruncated + } + y = uint64(b[8]) + v += y << 56 + if y < 0x80 { + return v, 9 + } + v -= 0x80 << 56 + + if len(b) <= 9 { + return 0, errCodeTruncated + } + y = uint64(b[9]) + v += y << 63 + if y < 2 { + return v, 10 + } + return 0, errCodeOverflow +} + +// SizeVarint returns the encoded size of a varint. +// The size is guaranteed to be within 1 and 10, inclusive. +func SizeVarint(v uint64) int { + // This computes 1 + (bits.Len64(v)-1)/7. + // 9/64 is a good enough approximation of 1/7 + return int(9*uint32(bits.Len64(v))+64) / 64 +} + +// AppendFixed32 appends v to b as a little-endian uint32. +func AppendFixed32(b []byte, v uint32) []byte { + return append(b, + byte(v>>0), + byte(v>>8), + byte(v>>16), + byte(v>>24)) +} + +// ConsumeFixed32 parses b as a little-endian uint32, reporting its length. +// This returns a negative length upon an error (see ParseError). +func ConsumeFixed32(b []byte) (v uint32, n int) { + if len(b) < 4 { + return 0, errCodeTruncated + } + v = uint32(b[0])<<0 | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + return v, 4 +} + +// SizeFixed32 returns the encoded size of a fixed32; which is always 4. +func SizeFixed32() int { + return 4 +} + +// AppendFixed64 appends v to b as a little-endian uint64. +func AppendFixed64(b []byte, v uint64) []byte { + return append(b, + byte(v>>0), + byte(v>>8), + byte(v>>16), + byte(v>>24), + byte(v>>32), + byte(v>>40), + byte(v>>48), + byte(v>>56)) +} + +// ConsumeFixed64 parses b as a little-endian uint64, reporting its length. +// This returns a negative length upon an error (see ParseError). +func ConsumeFixed64(b []byte) (v uint64, n int) { + if len(b) < 8 { + return 0, errCodeTruncated + } + v = uint64(b[0])<<0 | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + return v, 8 +} + +// SizeFixed64 returns the encoded size of a fixed64; which is always 8. +func SizeFixed64() int { + return 8 +} + +// AppendBytes appends v to b as a length-prefixed bytes value. +func AppendBytes(b []byte, v []byte) []byte { + return append(AppendVarint(b, uint64(len(v))), v...) +} + +// ConsumeBytes parses b as a length-prefixed bytes value, reporting its length. +// This returns a negative length upon an error (see ParseError). +func ConsumeBytes(b []byte) (v []byte, n int) { + m, n := ConsumeVarint(b) + if n < 0 { + return nil, n // forward error code + } + if m > uint64(len(b[n:])) { + return nil, errCodeTruncated + } + return b[n:][:m], n + int(m) +} + +// SizeBytes returns the encoded size of a length-prefixed bytes value, +// given only the length. +func SizeBytes(n int) int { + return SizeVarint(uint64(n)) + n +} + +// AppendString appends v to b as a length-prefixed bytes value. +func AppendString(b []byte, v string) []byte { + return append(AppendVarint(b, uint64(len(v))), v...) +} + +// ConsumeString parses b as a length-prefixed bytes value, reporting its length. +// This returns a negative length upon an error (see ParseError). +func ConsumeString(b []byte) (v string, n int) { + bb, n := ConsumeBytes(b) + return string(bb), n +} + +// AppendGroup appends v to b as group value, with a trailing end group marker. +// The value v must not contain the end marker. +func AppendGroup(b []byte, num Number, v []byte) []byte { + return AppendVarint(append(b, v...), EncodeTag(num, EndGroupType)) +} + +// ConsumeGroup parses b as a group value until the trailing end group marker, +// and verifies that the end marker matches the provided num. The value v +// does not contain the end marker, while the length does contain the end marker. +// This returns a negative length upon an error (see ParseError). +func ConsumeGroup(num Number, b []byte) (v []byte, n int) { + n = ConsumeFieldValue(num, StartGroupType, b) + if n < 0 { + return nil, n // forward error code + } + b = b[:n] + + // Truncate off end group marker, but need to handle denormalized varints. + // Assuming end marker is never 0 (which is always the case since + // EndGroupType is non-zero), we can truncate all trailing bytes where the + // lower 7 bits are all zero (implying that the varint is denormalized). + for len(b) > 0 && b[len(b)-1]&0x7f == 0 { + b = b[:len(b)-1] + } + b = b[:len(b)-SizeTag(num)] + return b, n +} + +// SizeGroup returns the encoded size of a group, given only the length. +func SizeGroup(num Number, n int) int { + return n + SizeTag(num) +} + +// DecodeTag decodes the field Number and wire Type from its unified form. +// The Number is -1 if the decoded field number overflows int32. +// Other than overflow, this does not check for field number validity. +func DecodeTag(x uint64) (Number, Type) { + // NOTE: MessageSet allows for larger field numbers than normal. + if x>>3 > uint64(math.MaxInt32) { + return -1, 0 + } + return Number(x >> 3), Type(x & 7) +} + +// EncodeTag encodes the field Number and wire Type into its unified form. +func EncodeTag(num Number, typ Type) uint64 { + return uint64(num)<<3 | uint64(typ&7) +} + +// DecodeZigZag decodes a zig-zag-encoded uint64 as an int64. +// Input: {…, 5, 3, 1, 0, 2, 4, 6, …} +// Output: {…, -3, -2, -1, 0, +1, +2, +3, …} +func DecodeZigZag(x uint64) int64 { + return int64(x>>1) ^ int64(x)<<63>>63 +} + +// EncodeZigZag encodes an int64 as a zig-zag-encoded uint64. +// Input: {…, -3, -2, -1, 0, +1, +2, +3, …} +// Output: {…, 5, 3, 1, 0, 2, 4, 6, …} +func EncodeZigZag(x int64) uint64 { + return uint64(x<<1) ^ uint64(x>>63) +} + +// DecodeBool decodes a uint64 as a bool. +// Input: { 0, 1, 2, …} +// Output: {false, true, true, …} +func DecodeBool(x uint64) bool { + return x != 0 +} + +// EncodeBool encodes a bool as a uint64. +// Input: {false, true} +// Output: { 0, 1} +func EncodeBool(x bool) uint64 { + if x { + return 1 + } + return 0 +} diff --git a/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go b/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go new file mode 100644 index 00000000..4cb8d6df --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go @@ -0,0 +1,316 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package descfmt provides functionality to format descriptors. +package descfmt + +import ( + "fmt" + "io" + "reflect" + "strconv" + "strings" + + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/pragma" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type list interface { + Len() int + pragma.DoNotImplement +} + +func FormatList(s fmt.State, r rune, vs list) { + io.WriteString(s, formatListOpt(vs, true, r == 'v' && (s.Flag('+') || s.Flag('#')))) +} +func formatListOpt(vs list, isRoot, allowMulti bool) string { + start, end := "[", "]" + if isRoot { + var name string + switch vs.(type) { + case pref.Names: + name = "Names" + case pref.FieldNumbers: + name = "FieldNumbers" + case pref.FieldRanges: + name = "FieldRanges" + case pref.EnumRanges: + name = "EnumRanges" + case pref.FileImports: + name = "FileImports" + case pref.Descriptor: + name = reflect.ValueOf(vs).MethodByName("Get").Type().Out(0).Name() + "s" + } + start, end = name+"{", "}" + } + + var ss []string + switch vs := vs.(type) { + case pref.Names: + for i := 0; i < vs.Len(); i++ { + ss = append(ss, fmt.Sprint(vs.Get(i))) + } + return start + joinStrings(ss, false) + end + case pref.FieldNumbers: + for i := 0; i < vs.Len(); i++ { + ss = append(ss, fmt.Sprint(vs.Get(i))) + } + return start + joinStrings(ss, false) + end + case pref.FieldRanges: + for i := 0; i < vs.Len(); i++ { + r := vs.Get(i) + if r[0]+1 == r[1] { + ss = append(ss, fmt.Sprintf("%d", r[0])) + } else { + ss = append(ss, fmt.Sprintf("%d:%d", r[0], r[1])) // enum ranges are end exclusive + } + } + return start + joinStrings(ss, false) + end + case pref.EnumRanges: + for i := 0; i < vs.Len(); i++ { + r := vs.Get(i) + if r[0] == r[1] { + ss = append(ss, fmt.Sprintf("%d", r[0])) + } else { + ss = append(ss, fmt.Sprintf("%d:%d", r[0], int64(r[1])+1)) // enum ranges are end inclusive + } + } + return start + joinStrings(ss, false) + end + case pref.FileImports: + for i := 0; i < vs.Len(); i++ { + var rs records + rs.Append(reflect.ValueOf(vs.Get(i)), "Path", "Package", "IsPublic", "IsWeak") + ss = append(ss, "{"+rs.Join()+"}") + } + return start + joinStrings(ss, allowMulti) + end + default: + _, isEnumValue := vs.(pref.EnumValueDescriptors) + for i := 0; i < vs.Len(); i++ { + m := reflect.ValueOf(vs).MethodByName("Get") + v := m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface() + ss = append(ss, formatDescOpt(v.(pref.Descriptor), false, allowMulti && !isEnumValue)) + } + return start + joinStrings(ss, allowMulti && isEnumValue) + end + } +} + +// descriptorAccessors is a list of accessors to print for each descriptor. +// +// Do not print all accessors since some contain redundant information, +// while others are pointers that we do not want to follow since the descriptor +// is actually a cyclic graph. +// +// Using a list allows us to print the accessors in a sensible order. +var descriptorAccessors = map[reflect.Type][]string{ + reflect.TypeOf((*pref.FileDescriptor)(nil)).Elem(): {"Path", "Package", "Imports", "Messages", "Enums", "Extensions", "Services"}, + reflect.TypeOf((*pref.MessageDescriptor)(nil)).Elem(): {"IsMapEntry", "Fields", "Oneofs", "ReservedNames", "ReservedRanges", "RequiredNumbers", "ExtensionRanges", "Messages", "Enums", "Extensions"}, + reflect.TypeOf((*pref.FieldDescriptor)(nil)).Elem(): {"Number", "Cardinality", "Kind", "HasJSONName", "JSONName", "IsPacked", "IsExtension", "IsWeak", "IsList", "IsMap", "MapKey", "MapValue", "HasDefault", "Default", "ContainingOneof", "ContainingMessage", "Message", "Enum"}, + reflect.TypeOf((*pref.OneofDescriptor)(nil)).Elem(): {"Fields"}, // not directly used; must keep in sync with formatDescOpt + reflect.TypeOf((*pref.EnumDescriptor)(nil)).Elem(): {"Values", "ReservedNames", "ReservedRanges"}, + reflect.TypeOf((*pref.EnumValueDescriptor)(nil)).Elem(): {"Number"}, + reflect.TypeOf((*pref.ServiceDescriptor)(nil)).Elem(): {"Methods"}, + reflect.TypeOf((*pref.MethodDescriptor)(nil)).Elem(): {"Input", "Output", "IsStreamingClient", "IsStreamingServer"}, +} + +func FormatDesc(s fmt.State, r rune, t pref.Descriptor) { + io.WriteString(s, formatDescOpt(t, true, r == 'v' && (s.Flag('+') || s.Flag('#')))) +} +func formatDescOpt(t pref.Descriptor, isRoot, allowMulti bool) string { + rv := reflect.ValueOf(t) + rt := rv.MethodByName("ProtoType").Type().In(0) + + start, end := "{", "}" + if isRoot { + start = rt.Name() + "{" + } + + _, isFile := t.(pref.FileDescriptor) + rs := records{allowMulti: allowMulti} + if t.IsPlaceholder() { + if isFile { + rs.Append(rv, "Path", "Package", "IsPlaceholder") + } else { + rs.Append(rv, "FullName", "IsPlaceholder") + } + } else { + switch { + case isFile: + rs.Append(rv, "Syntax") + case isRoot: + rs.Append(rv, "Syntax", "FullName") + default: + rs.Append(rv, "Name") + } + switch t := t.(type) { + case pref.FieldDescriptor: + for _, s := range descriptorAccessors[rt] { + switch s { + case "MapKey": + if k := t.MapKey(); k != nil { + rs.recs = append(rs.recs, [2]string{"MapKey", k.Kind().String()}) + } + case "MapValue": + if v := t.MapValue(); v != nil { + switch v.Kind() { + case pref.EnumKind: + rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Enum().FullName())}) + case pref.MessageKind, pref.GroupKind: + rs.recs = append(rs.recs, [2]string{"MapValue", string(v.Message().FullName())}) + default: + rs.recs = append(rs.recs, [2]string{"MapValue", v.Kind().String()}) + } + } + case "ContainingOneof": + if od := t.ContainingOneof(); od != nil { + rs.recs = append(rs.recs, [2]string{"Oneof", string(od.Name())}) + } + case "ContainingMessage": + if t.IsExtension() { + rs.recs = append(rs.recs, [2]string{"Extendee", string(t.ContainingMessage().FullName())}) + } + case "Message": + if !t.IsMap() { + rs.Append(rv, s) + } + default: + rs.Append(rv, s) + } + } + case pref.OneofDescriptor: + var ss []string + fs := t.Fields() + for i := 0; i < fs.Len(); i++ { + ss = append(ss, string(fs.Get(i).Name())) + } + if len(ss) > 0 { + rs.recs = append(rs.recs, [2]string{"Fields", "[" + joinStrings(ss, false) + "]"}) + } + default: + rs.Append(rv, descriptorAccessors[rt]...) + } + if rv.MethodByName("GoType").IsValid() { + rs.Append(rv, "GoType") + } + } + return start + rs.Join() + end +} + +type records struct { + recs [][2]string + allowMulti bool +} + +func (rs *records) Append(v reflect.Value, accessors ...string) { + for _, a := range accessors { + var rv reflect.Value + if m := v.MethodByName(a); m.IsValid() { + rv = m.Call(nil)[0] + } + if v.Kind() == reflect.Struct && !rv.IsValid() { + rv = v.FieldByName(a) + } + if !rv.IsValid() { + panic(fmt.Sprintf("unknown accessor: %v.%s", v.Type(), a)) + } + if _, ok := rv.Interface().(pref.Value); ok { + rv = rv.MethodByName("Interface").Call(nil)[0] + if !rv.IsNil() { + rv = rv.Elem() + } + } + + // Ignore zero values. + var isZero bool + switch rv.Kind() { + case reflect.Interface, reflect.Slice: + isZero = rv.IsNil() + case reflect.Bool: + isZero = rv.Bool() == false + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + isZero = rv.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + isZero = rv.Uint() == 0 + case reflect.String: + isZero = rv.String() == "" + } + if n, ok := rv.Interface().(list); ok { + isZero = n.Len() == 0 + } + if isZero { + continue + } + + // Format the value. + var s string + v := rv.Interface() + switch v := v.(type) { + case list: + s = formatListOpt(v, false, rs.allowMulti) + case pref.FieldDescriptor, pref.OneofDescriptor, pref.EnumValueDescriptor, pref.MethodDescriptor: + s = string(v.(pref.Descriptor).Name()) + case pref.Descriptor: + s = string(v.FullName()) + case string: + s = strconv.Quote(v) + case []byte: + s = fmt.Sprintf("%q", v) + default: + s = fmt.Sprint(v) + } + rs.recs = append(rs.recs, [2]string{a, s}) + } +} + +func (rs *records) Join() string { + var ss []string + + // In single line mode, simply join all records with commas. + if !rs.allowMulti { + for _, r := range rs.recs { + ss = append(ss, r[0]+formatColon(0)+r[1]) + } + return joinStrings(ss, false) + } + + // In allowMulti line mode, align single line records for more readable output. + var maxLen int + flush := func(i int) { + for _, r := range rs.recs[len(ss):i] { + ss = append(ss, r[0]+formatColon(maxLen-len(r[0]))+r[1]) + } + maxLen = 0 + } + for i, r := range rs.recs { + if isMulti := strings.Contains(r[1], "\n"); isMulti { + flush(i) + ss = append(ss, r[0]+formatColon(0)+strings.Join(strings.Split(r[1], "\n"), "\n\t")) + } else if maxLen < len(r[0]) { + maxLen = len(r[0]) + } + } + flush(len(rs.recs)) + return joinStrings(ss, true) +} + +func formatColon(padding int) string { + // Deliberately introduce instability into the debug output to + // discourage users from performing string comparisons. + // This provides us flexibility to change the output in the future. + if detrand.Bool() { + return ":" + strings.Repeat(" ", 1+padding) // use non-breaking spaces (U+00a0) + } else { + return ":" + strings.Repeat(" ", 1+padding) // use regular spaces (U+0020) + } +} + +func joinStrings(ss []string, isMulti bool) string { + if len(ss) == 0 { + return "" + } + if isMulti { + return "\n\t" + strings.Join(ss, "\n\t") + "\n" + } + return strings.Join(ss, ", ") +} diff --git a/vendor/google.golang.org/protobuf/internal/descopts/options.go b/vendor/google.golang.org/protobuf/internal/descopts/options.go new file mode 100644 index 00000000..8401be8c --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/descopts/options.go @@ -0,0 +1,29 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package descopts contains the nil pointers to concrete descriptor options. +// +// This package exists as a form of reverse dependency injection so that certain +// packages (e.g., internal/filedesc and internal/filetype can avoid a direct +// dependency on the descriptor proto package). +package descopts + +import pref "google.golang.org/protobuf/reflect/protoreflect" + +// These variables are set by the init function in descriptor.pb.go via logic +// in internal/filetype. In other words, so long as the descriptor proto package +// is linked in, these variables will be populated. +// +// Each variable is populated with a nil pointer to the options struct. +var ( + File pref.ProtoMessage + Enum pref.ProtoMessage + EnumValue pref.ProtoMessage + Message pref.ProtoMessage + Field pref.ProtoMessage + Oneof pref.ProtoMessage + ExtensionRange pref.ProtoMessage + Service pref.ProtoMessage + Method pref.ProtoMessage +) diff --git a/vendor/google.golang.org/protobuf/internal/detrand/rand.go b/vendor/google.golang.org/protobuf/internal/detrand/rand.go new file mode 100644 index 00000000..a904dd1f --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/detrand/rand.go @@ -0,0 +1,61 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package detrand provides deterministically random functionality. +// +// The pseudo-randomness of these functions is seeded by the program binary +// itself and guarantees that the output does not change within a program, +// while ensuring that the output is unstable across different builds. +package detrand + +import ( + "encoding/binary" + "hash/fnv" + "os" +) + +// Disable disables detrand such that all functions returns the zero value. +// This function is not concurrent-safe and must be called during program init. +func Disable() { + randSeed = 0 +} + +// Bool returns a deterministically random boolean. +func Bool() bool { + return randSeed%2 == 1 +} + +// randSeed is a best-effort at an approximate hash of the Go binary. +var randSeed = binaryHash() + +func binaryHash() uint64 { + // Open the Go binary. + s, err := os.Executable() + if err != nil { + return 0 + } + f, err := os.Open(s) + if err != nil { + return 0 + } + defer f.Close() + + // Hash the size and several samples of the Go binary. + const numSamples = 8 + var buf [64]byte + h := fnv.New64() + fi, err := f.Stat() + if err != nil { + return 0 + } + binary.LittleEndian.PutUint64(buf[:8], uint64(fi.Size())) + h.Write(buf[:8]) + for i := int64(0); i < numSamples; i++ { + if _, err := f.ReadAt(buf[:], i*fi.Size()/numSamples); err != nil { + return 0 + } + h.Write(buf[:]) + } + return h.Sum64() +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go b/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go new file mode 100644 index 00000000..fdd9b13f --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go @@ -0,0 +1,213 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package defval marshals and unmarshals textual forms of default values. +// +// This package handles both the form historically used in Go struct field tags +// and also the form used by google.protobuf.FieldDescriptorProto.default_value +// since they differ in superficial ways. +package defval + +import ( + "fmt" + "math" + "strconv" + + ptext "google.golang.org/protobuf/internal/encoding/text" + errors "google.golang.org/protobuf/internal/errors" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// Format is the serialization format used to represent the default value. +type Format int + +const ( + _ Format = iota + + // Descriptor uses the serialization format that protoc uses with the + // google.protobuf.FieldDescriptorProto.default_value field. + Descriptor + + // GoTag uses the historical serialization format in Go struct field tags. + GoTag +) + +// Unmarshal deserializes the default string s according to the given kind k. +// When k is an enum, a list of enum value descriptors must be provided. +func Unmarshal(s string, k pref.Kind, evs pref.EnumValueDescriptors, f Format) (pref.Value, pref.EnumValueDescriptor, error) { + switch k { + case pref.BoolKind: + if f == GoTag { + switch s { + case "1": + return pref.ValueOfBool(true), nil, nil + case "0": + return pref.ValueOfBool(false), nil, nil + } + } else { + switch s { + case "true": + return pref.ValueOfBool(true), nil, nil + case "false": + return pref.ValueOfBool(false), nil, nil + } + } + case pref.EnumKind: + if f == GoTag { + // Go tags use the numeric form of the enum value. + if n, err := strconv.ParseInt(s, 10, 32); err == nil { + if ev := evs.ByNumber(pref.EnumNumber(n)); ev != nil { + return pref.ValueOfEnum(ev.Number()), ev, nil + } + } + } else { + // Descriptor default_value use the enum identifier. + ev := evs.ByName(pref.Name(s)) + if ev != nil { + return pref.ValueOfEnum(ev.Number()), ev, nil + } + } + case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: + if v, err := strconv.ParseInt(s, 10, 32); err == nil { + return pref.ValueOfInt32(int32(v)), nil, nil + } + case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: + if v, err := strconv.ParseInt(s, 10, 64); err == nil { + return pref.ValueOfInt64(int64(v)), nil, nil + } + case pref.Uint32Kind, pref.Fixed32Kind: + if v, err := strconv.ParseUint(s, 10, 32); err == nil { + return pref.ValueOfUint32(uint32(v)), nil, nil + } + case pref.Uint64Kind, pref.Fixed64Kind: + if v, err := strconv.ParseUint(s, 10, 64); err == nil { + return pref.ValueOfUint64(uint64(v)), nil, nil + } + case pref.FloatKind, pref.DoubleKind: + var v float64 + var err error + switch s { + case "-inf": + v = math.Inf(-1) + case "inf": + v = math.Inf(+1) + case "nan": + v = math.NaN() + default: + v, err = strconv.ParseFloat(s, 64) + } + if err == nil { + if k == pref.FloatKind { + return pref.ValueOfFloat32(float32(v)), nil, nil + } else { + return pref.ValueOfFloat64(float64(v)), nil, nil + } + } + case pref.StringKind: + // String values are already unescaped and can be used as is. + return pref.ValueOfString(s), nil, nil + case pref.BytesKind: + if b, ok := unmarshalBytes(s); ok { + return pref.ValueOfBytes(b), nil, nil + } + } + return pref.Value{}, nil, errors.New("could not parse value for %v: %q", k, s) +} + +// Marshal serializes v as the default string according to the given kind k. +// When specifying the Descriptor format for an enum kind, the associated +// enum value descriptor must be provided. +func Marshal(v pref.Value, ev pref.EnumValueDescriptor, k pref.Kind, f Format) (string, error) { + switch k { + case pref.BoolKind: + if f == GoTag { + if v.Bool() { + return "1", nil + } else { + return "0", nil + } + } else { + if v.Bool() { + return "true", nil + } else { + return "false", nil + } + } + case pref.EnumKind: + if f == GoTag { + return strconv.FormatInt(int64(v.Enum()), 10), nil + } else { + return string(ev.Name()), nil + } + case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind, pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: + return strconv.FormatInt(v.Int(), 10), nil + case pref.Uint32Kind, pref.Fixed32Kind, pref.Uint64Kind, pref.Fixed64Kind: + return strconv.FormatUint(v.Uint(), 10), nil + case pref.FloatKind, pref.DoubleKind: + f := v.Float() + switch { + case math.IsInf(f, -1): + return "-inf", nil + case math.IsInf(f, +1): + return "inf", nil + case math.IsNaN(f): + return "nan", nil + default: + if k == pref.FloatKind { + return strconv.FormatFloat(f, 'g', -1, 32), nil + } else { + return strconv.FormatFloat(f, 'g', -1, 64), nil + } + } + case pref.StringKind: + // String values are serialized as is without any escaping. + return v.String(), nil + case pref.BytesKind: + if s, ok := marshalBytes(v.Bytes()); ok { + return s, nil + } + } + return "", errors.New("could not format value for %v: %v", k, v) +} + +// unmarshalBytes deserializes bytes by applying C unescaping. +func unmarshalBytes(s string) ([]byte, bool) { + // Bytes values use the same escaping as the text format, + // however they lack the surrounding double quotes. + v, err := ptext.UnmarshalString(`"` + s + `"`) + if err != nil { + return nil, false + } + return []byte(v), true +} + +// marshalBytes serializes bytes by using C escaping. +// To match the exact output of protoc, this is identical to the +// CEscape function in strutil.cc of the protoc source code. +func marshalBytes(b []byte) (string, bool) { + var s []byte + for _, c := range b { + switch c { + case '\n': + s = append(s, `\n`...) + case '\r': + s = append(s, `\r`...) + case '\t': + s = append(s, `\t`...) + case '"': + s = append(s, `\"`...) + case '\'': + s = append(s, `\'`...) + case '\\': + s = append(s, `\\`...) + default: + if printableASCII := c >= 0x20 && c <= 0x7e; printableASCII { + s = append(s, c) + } else { + s = append(s, fmt.Sprintf(`\%03o`, c)...) + } + } + } + return string(s), true +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go b/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go new file mode 100644 index 00000000..b1eeea50 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go @@ -0,0 +1,258 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package messageset encodes and decodes the obsolete MessageSet wire format. +package messageset + +import ( + "math" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" +) + +// The MessageSet wire format is equivalent to a message defiend as follows, +// where each Item defines an extension field with a field number of 'type_id' +// and content of 'message'. MessageSet extensions must be non-repeated message +// fields. +// +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// } +// } +const ( + FieldItem = protowire.Number(1) + FieldTypeID = protowire.Number(2) + FieldMessage = protowire.Number(3) +) + +// ExtensionName is the field name for extensions of MessageSet. +// +// A valid MessageSet extension must be of the form: +// message MyMessage { +// extend proto2.bridge.MessageSet { +// optional MyMessage message_set_extension = 1234; +// } +// ... +// } +const ExtensionName = "message_set_extension" + +// IsMessageSet returns whether the message uses the MessageSet wire format. +func IsMessageSet(md pref.MessageDescriptor) bool { + xmd, ok := md.(interface{ IsMessageSet() bool }) + return ok && xmd.IsMessageSet() +} + +// IsMessageSetExtension reports this field extends a MessageSet. +func IsMessageSetExtension(fd pref.FieldDescriptor) bool { + if fd.Name() != ExtensionName { + return false + } + if fd.FullName().Parent() != fd.Message().FullName() { + return false + } + return IsMessageSet(fd.ContainingMessage()) +} + +// FindMessageSetExtension locates a MessageSet extension field by name. +// In text and JSON formats, the extension name used is the message itself. +// The extension field name is derived by appending ExtensionName. +func FindMessageSetExtension(r preg.ExtensionTypeResolver, s pref.FullName) (pref.ExtensionType, error) { + name := s.Append(ExtensionName) + xt, err := r.FindExtensionByName(name) + if err != nil { + if err == preg.NotFound { + return nil, err + } + return nil, errors.Wrap(err, "%q", name) + } + if !IsMessageSetExtension(xt.TypeDescriptor()) { + return nil, preg.NotFound + } + return xt, nil +} + +// SizeField returns the size of a MessageSet item field containing an extension +// with the given field number, not counting the contents of the message subfield. +func SizeField(num protowire.Number) int { + return 2*protowire.SizeTag(FieldItem) + protowire.SizeTag(FieldTypeID) + protowire.SizeVarint(uint64(num)) +} + +// Unmarshal parses a MessageSet. +// +// It calls fn with the type ID and value of each item in the MessageSet. +// Unknown fields are discarded. +// +// If wantLen is true, the item values include the varint length prefix. +// This is ugly, but simplifies the fast-path decoder in internal/impl. +func Unmarshal(b []byte, wantLen bool, fn func(typeID protowire.Number, value []byte) error) error { + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return protowire.ParseError(n) + } + b = b[n:] + if num != FieldItem || wtyp != protowire.StartGroupType { + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return protowire.ParseError(n) + } + b = b[n:] + continue + } + typeID, value, n, err := ConsumeFieldValue(b, wantLen) + if err != nil { + return err + } + b = b[n:] + if typeID == 0 { + continue + } + if err := fn(typeID, value); err != nil { + return err + } + } + return nil +} + +// ConsumeFieldValue parses b as a MessageSet item field value until and including +// the trailing end group marker. It assumes the start group tag has already been parsed. +// It returns the contents of the type_id and message subfields and the total +// item length. +// +// If wantLen is true, the returned message value includes the length prefix. +func ConsumeFieldValue(b []byte, wantLen bool) (typeid protowire.Number, message []byte, n int, err error) { + ilen := len(b) + for { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + b = b[n:] + switch { + case num == FieldItem && wtyp == protowire.EndGroupType: + if wantLen && len(message) == 0 { + // The message field was missing, which should never happen. + // Be prepared for this case anyway. + message = protowire.AppendVarint(message, 0) + } + return typeid, message, ilen - len(b), nil + case num == FieldTypeID && wtyp == protowire.VarintType: + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + b = b[n:] + if v < 1 || v > math.MaxInt32 { + return 0, nil, 0, errors.New("invalid type_id in message set") + } + typeid = protowire.Number(v) + case num == FieldMessage && wtyp == protowire.BytesType: + m, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + if message == nil { + if wantLen { + message = b[:n:n] + } else { + message = m[:len(m):len(m)] + } + } else { + // This case should never happen in practice, but handle it for + // correctness: The MessageSet item contains multiple message + // fields, which need to be merged. + // + // In the case where we're returning the length, this becomes + // quite inefficient since we need to strip the length off + // the existing data and reconstruct it with the combined length. + if wantLen { + _, nn := protowire.ConsumeVarint(message) + m0 := message[nn:] + message = nil + message = protowire.AppendVarint(message, uint64(len(m0)+len(m))) + message = append(message, m0...) + message = append(message, m...) + } else { + message = append(message, m...) + } + } + b = b[n:] + default: + // We have no place to put it, so we just ignore unknown fields. + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + b = b[n:] + } + } +} + +// AppendFieldStart appends the start of a MessageSet item field containing +// an extension with the given number. The caller must add the message +// subfield (including the tag). +func AppendFieldStart(b []byte, num protowire.Number) []byte { + b = protowire.AppendTag(b, FieldItem, protowire.StartGroupType) + b = protowire.AppendTag(b, FieldTypeID, protowire.VarintType) + b = protowire.AppendVarint(b, uint64(num)) + return b +} + +// AppendFieldEnd appends the trailing end group marker for a MessageSet item field. +func AppendFieldEnd(b []byte) []byte { + return protowire.AppendTag(b, FieldItem, protowire.EndGroupType) +} + +// SizeUnknown returns the size of an unknown fields section in MessageSet format. +// +// See AppendUnknown. +func SizeUnknown(unknown []byte) (size int) { + for len(unknown) > 0 { + num, typ, n := protowire.ConsumeTag(unknown) + if n < 0 || typ != protowire.BytesType { + return 0 + } + unknown = unknown[n:] + _, n = protowire.ConsumeBytes(unknown) + if n < 0 { + return 0 + } + unknown = unknown[n:] + size += SizeField(num) + protowire.SizeTag(FieldMessage) + n + } + return size +} + +// AppendUnknown appends unknown fields to b in MessageSet format. +// +// For historic reasons, unresolved items in a MessageSet are stored in a +// message's unknown fields section in non-MessageSet format. That is, an +// unknown item with typeID T and value V appears in the unknown fields as +// a field with number T and value V. +// +// This function converts the unknown fields back into MessageSet form. +func AppendUnknown(b, unknown []byte) ([]byte, error) { + for len(unknown) > 0 { + num, typ, n := protowire.ConsumeTag(unknown) + if n < 0 || typ != protowire.BytesType { + return nil, errors.New("invalid data in message set unknown fields") + } + unknown = unknown[n:] + _, n = protowire.ConsumeBytes(unknown) + if n < 0 { + return nil, errors.New("invalid data in message set unknown fields") + } + b = AppendFieldStart(b, num) + b = protowire.AppendTag(b, FieldMessage, protowire.BytesType) + b = append(b, unknown[:n]...) + b = AppendFieldEnd(b) + unknown = unknown[n:] + } + return b, nil +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go b/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go new file mode 100644 index 00000000..16c02d7b --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go @@ -0,0 +1,207 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tag marshals and unmarshals the legacy struct tags as generated +// by historical versions of protoc-gen-go. +package tag + +import ( + "reflect" + "strconv" + "strings" + + defval "google.golang.org/protobuf/internal/encoding/defval" + fdesc "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +var byteType = reflect.TypeOf(byte(0)) + +// Unmarshal decodes the tag into a prototype.Field. +// +// The goType is needed to determine the original protoreflect.Kind since the +// tag does not record sufficient information to determine that. +// The type is the underlying field type (e.g., a repeated field may be +// represented by []T, but the Go type passed in is just T). +// A list of enum value descriptors must be provided for enum fields. +// This does not populate the Enum or Message (except for weak message). +// +// This function is a best effort attempt; parsing errors are ignored. +func Unmarshal(tag string, goType reflect.Type, evs pref.EnumValueDescriptors) pref.FieldDescriptor { + f := new(fdesc.Field) + f.L0.ParentFile = fdesc.SurrogateProto2 + for len(tag) > 0 { + i := strings.IndexByte(tag, ',') + if i < 0 { + i = len(tag) + } + switch s := tag[:i]; { + case strings.HasPrefix(s, "name="): + f.L0.FullName = pref.FullName(s[len("name="):]) + case strings.Trim(s, "0123456789") == "": + n, _ := strconv.ParseUint(s, 10, 32) + f.L1.Number = pref.FieldNumber(n) + case s == "opt": + f.L1.Cardinality = pref.Optional + case s == "req": + f.L1.Cardinality = pref.Required + case s == "rep": + f.L1.Cardinality = pref.Repeated + case s == "varint": + switch goType.Kind() { + case reflect.Bool: + f.L1.Kind = pref.BoolKind + case reflect.Int32: + f.L1.Kind = pref.Int32Kind + case reflect.Int64: + f.L1.Kind = pref.Int64Kind + case reflect.Uint32: + f.L1.Kind = pref.Uint32Kind + case reflect.Uint64: + f.L1.Kind = pref.Uint64Kind + } + case s == "zigzag32": + if goType.Kind() == reflect.Int32 { + f.L1.Kind = pref.Sint32Kind + } + case s == "zigzag64": + if goType.Kind() == reflect.Int64 { + f.L1.Kind = pref.Sint64Kind + } + case s == "fixed32": + switch goType.Kind() { + case reflect.Int32: + f.L1.Kind = pref.Sfixed32Kind + case reflect.Uint32: + f.L1.Kind = pref.Fixed32Kind + case reflect.Float32: + f.L1.Kind = pref.FloatKind + } + case s == "fixed64": + switch goType.Kind() { + case reflect.Int64: + f.L1.Kind = pref.Sfixed64Kind + case reflect.Uint64: + f.L1.Kind = pref.Fixed64Kind + case reflect.Float64: + f.L1.Kind = pref.DoubleKind + } + case s == "bytes": + switch { + case goType.Kind() == reflect.String: + f.L1.Kind = pref.StringKind + case goType.Kind() == reflect.Slice && goType.Elem() == byteType: + f.L1.Kind = pref.BytesKind + default: + f.L1.Kind = pref.MessageKind + } + case s == "group": + f.L1.Kind = pref.GroupKind + case strings.HasPrefix(s, "enum="): + f.L1.Kind = pref.EnumKind + case strings.HasPrefix(s, "json="): + jsonName := s[len("json="):] + if jsonName != strs.JSONCamelCase(string(f.L0.FullName.Name())) { + f.L1.JSONName.Init(jsonName) + } + case s == "packed": + f.L1.HasPacked = true + f.L1.IsPacked = true + case strings.HasPrefix(s, "weak="): + f.L1.IsWeak = true + f.L1.Message = fdesc.PlaceholderMessage(pref.FullName(s[len("weak="):])) + case strings.HasPrefix(s, "def="): + // The default tag is special in that everything afterwards is the + // default regardless of the presence of commas. + s, i = tag[len("def="):], len(tag) + v, ev, _ := defval.Unmarshal(s, f.L1.Kind, evs, defval.GoTag) + f.L1.Default = fdesc.DefaultValue(v, ev) + case s == "proto3": + f.L0.ParentFile = fdesc.SurrogateProto3 + } + tag = strings.TrimPrefix(tag[i:], ",") + } + + // The generator uses the group message name instead of the field name. + // We obtain the real field name by lowercasing the group name. + if f.L1.Kind == pref.GroupKind { + f.L0.FullName = pref.FullName(strings.ToLower(string(f.L0.FullName))) + } + return f +} + +// Marshal encodes the protoreflect.FieldDescriptor as a tag. +// +// The enumName must be provided if the kind is an enum. +// Historically, the formulation of the enum "name" was the proto package +// dot-concatenated with the generated Go identifier for the enum type. +// Depending on the context on how Marshal is called, there are different ways +// through which that information is determined. As such it is the caller's +// responsibility to provide a function to obtain that information. +func Marshal(fd pref.FieldDescriptor, enumName string) string { + var tag []string + switch fd.Kind() { + case pref.BoolKind, pref.EnumKind, pref.Int32Kind, pref.Uint32Kind, pref.Int64Kind, pref.Uint64Kind: + tag = append(tag, "varint") + case pref.Sint32Kind: + tag = append(tag, "zigzag32") + case pref.Sint64Kind: + tag = append(tag, "zigzag64") + case pref.Sfixed32Kind, pref.Fixed32Kind, pref.FloatKind: + tag = append(tag, "fixed32") + case pref.Sfixed64Kind, pref.Fixed64Kind, pref.DoubleKind: + tag = append(tag, "fixed64") + case pref.StringKind, pref.BytesKind, pref.MessageKind: + tag = append(tag, "bytes") + case pref.GroupKind: + tag = append(tag, "group") + } + tag = append(tag, strconv.Itoa(int(fd.Number()))) + switch fd.Cardinality() { + case pref.Optional: + tag = append(tag, "opt") + case pref.Required: + tag = append(tag, "req") + case pref.Repeated: + tag = append(tag, "rep") + } + if fd.IsPacked() { + tag = append(tag, "packed") + } + name := string(fd.Name()) + if fd.Kind() == pref.GroupKind { + // The name of the FieldDescriptor for a group field is + // lowercased. To find the original capitalization, we + // look in the field's MessageType. + name = string(fd.Message().Name()) + } + tag = append(tag, "name="+name) + if jsonName := fd.JSONName(); jsonName != "" && jsonName != name && !fd.IsExtension() { + // NOTE: The jsonName != name condition is suspect, but it preserve + // the exact same semantics from the previous generator. + tag = append(tag, "json="+jsonName) + } + if fd.IsWeak() { + tag = append(tag, "weak="+string(fd.Message().FullName())) + } + // The previous implementation does not tag extension fields as proto3, + // even when the field is defined in a proto3 file. Match that behavior + // for consistency. + if fd.Syntax() == pref.Proto3 && !fd.IsExtension() { + tag = append(tag, "proto3") + } + if fd.Kind() == pref.EnumKind && enumName != "" { + tag = append(tag, "enum="+enumName) + } + if fd.ContainingOneof() != nil { + tag = append(tag, "oneof") + } + // This must appear last in the tag, since commas in strings aren't escaped. + if fd.HasDefault() { + def, _ := defval.Marshal(fd.Default(), fd.DefaultEnumValue(), fd.Kind(), defval.GoTag) + tag = append(tag, "def="+def) + } + return strings.Join(tag, ",") +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go new file mode 100644 index 00000000..eb10ea10 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go @@ -0,0 +1,665 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "bytes" + "fmt" + "io" + "regexp" + "strconv" + "unicode/utf8" + + "google.golang.org/protobuf/internal/errors" +) + +// Decoder is a token-based textproto decoder. +type Decoder struct { + // lastCall is last method called, either readCall or peekCall. + // Initial value is readCall. + lastCall call + + // lastToken contains the last read token. + lastToken Token + + // lastErr contains the last read error. + lastErr error + + // openStack is a stack containing the byte characters for MessageOpen and + // ListOpen kinds. The top of stack represents the message or the list that + // the current token is nested in. An empty stack means the current token is + // at the top level message. The characters '{' and '<' both represent the + // MessageOpen kind. + openStack []byte + + // orig is used in reporting line and column. + orig []byte + // in contains the unconsumed input. + in []byte +} + +// NewDecoder returns a Decoder to read the given []byte. +func NewDecoder(b []byte) *Decoder { + return &Decoder{orig: b, in: b} +} + +// ErrUnexpectedEOF means that EOF was encountered in the middle of the input. +var ErrUnexpectedEOF = errors.New("%v", io.ErrUnexpectedEOF) + +// call specifies which Decoder method was invoked. +type call uint8 + +const ( + readCall call = iota + peekCall +) + +// Peek looks ahead and returns the next token and error without advancing a read. +func (d *Decoder) Peek() (Token, error) { + defer func() { d.lastCall = peekCall }() + if d.lastCall == readCall { + d.lastToken, d.lastErr = d.Read() + } + return d.lastToken, d.lastErr +} + +// Read returns the next token. +// It will return an error if there is no valid token. +func (d *Decoder) Read() (Token, error) { + defer func() { d.lastCall = readCall }() + if d.lastCall == peekCall { + return d.lastToken, d.lastErr + } + + tok, err := d.parseNext(d.lastToken.kind) + if err != nil { + return Token{}, err + } + + switch tok.kind { + case comma, semicolon: + tok, err = d.parseNext(tok.kind) + if err != nil { + return Token{}, err + } + } + d.lastToken = tok + return tok, nil +} + +const ( + mismatchedFmt = "mismatched close character %q" + unexpectedFmt = "unexpected character %q" +) + +// parseNext parses the next Token based on given last kind. +func (d *Decoder) parseNext(lastKind Kind) (Token, error) { + // Trim leading spaces. + d.consume(0) + isEOF := false + if len(d.in) == 0 { + isEOF = true + } + + switch lastKind { + case EOF: + return d.consumeToken(EOF, 0, 0), nil + + case bof: + // Start of top level message. Next token can be EOF or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + return d.parseFieldName() + + case Name: + // Next token can be MessageOpen, ListOpen or Scalar. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case '{', '<': + d.pushOpenStack(ch) + return d.consumeToken(MessageOpen, 1, 0), nil + case '[': + d.pushOpenStack(ch) + return d.consumeToken(ListOpen, 1, 0), nil + default: + return d.parseScalar() + } + + case Scalar: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. + // Next token can be EOF, comma, semicolon or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + switch d.in[0] { + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case MessageOpen: + // Next token can be MessageClose, comma, semicolon or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case ListOpen: + // Next token can be ListClose or comma. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case ']': + d.popOpenStack() + return d.consumeToken(ListClose, 1, 0), nil + case ',': + return d.consumeToken(comma, 1, 0), nil + default: + return Token{}, d.newSyntaxError(unexpectedFmt, ch) + } + } + + case MessageOpen: + // Next token can be MessageClose or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + _, closeCh := d.currentOpenKind() + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + default: + return d.parseFieldName() + } + + case MessageClose: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. + // Next token can be EOF, comma, semicolon or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + switch ch := d.in[0]; ch { + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case MessageOpen: + // Next token can be MessageClose, comma, semicolon or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case ListOpen: + // Next token can be ListClose or comma + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(ListClose, 1, 0), nil + case ',': + return d.consumeToken(comma, 1, 0), nil + default: + return Token{}, d.newSyntaxError(unexpectedFmt, ch) + } + } + + case ListOpen: + // Next token can be ListClose, MessageStart or Scalar. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case ']': + d.popOpenStack() + return d.consumeToken(ListClose, 1, 0), nil + case '{', '<': + d.pushOpenStack(ch) + return d.consumeToken(MessageOpen, 1, 0), nil + default: + return d.parseScalar() + } + + case ListClose: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. + // Next token can be EOF, comma, semicolon or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + switch ch := d.in[0]; ch { + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case MessageOpen: + // Next token can be MessageClose, comma, semicolon or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + default: + // It is not possible to have this case. Let it panic below. + } + + case comma, semicolon: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. Next token can be EOF or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + return d.parseFieldName() + + case MessageOpen: + // Next token can be MessageClose or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + default: + return d.parseFieldName() + } + + case ListOpen: + if lastKind == semicolon { + // It is not be possible to have this case as logic here + // should not have produced a semicolon Token when inside a + // list. Let it panic below. + break + } + // Next token can be MessageOpen or Scalar. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case '{', '<': + d.pushOpenStack(ch) + return d.consumeToken(MessageOpen, 1, 0), nil + default: + return d.parseScalar() + } + } + } + + line, column := d.Position(len(d.orig) - len(d.in)) + panic(fmt.Sprintf("Decoder.parseNext: bug at handling line %d:%d with lastKind=%v", line, column, lastKind)) +} + +var otherCloseChar = map[byte]byte{ + '}': '>', + '>': '}', +} + +// currentOpenKind indicates whether current position is inside a message, list +// or top-level message by returning MessageOpen, ListOpen or bof respectively. +// If the returned kind is either a MessageOpen or ListOpen, it also returns the +// corresponding closing character. +func (d *Decoder) currentOpenKind() (Kind, byte) { + if len(d.openStack) == 0 { + return bof, 0 + } + openCh := d.openStack[len(d.openStack)-1] + switch openCh { + case '{': + return MessageOpen, '}' + case '<': + return MessageOpen, '>' + case '[': + return ListOpen, ']' + } + panic(fmt.Sprintf("Decoder: openStack contains invalid byte %s", string(openCh))) +} + +func (d *Decoder) pushOpenStack(ch byte) { + d.openStack = append(d.openStack, ch) +} + +func (d *Decoder) popOpenStack() { + d.openStack = d.openStack[:len(d.openStack)-1] +} + +// parseFieldName parses field name and separator. +func (d *Decoder) parseFieldName() (tok Token, err error) { + defer func() { + if err == nil && d.tryConsumeChar(':') { + tok.attrs |= hasSeparator + } + }() + + // Extension or Any type URL. + if d.in[0] == '[' { + return d.parseTypeName() + } + + // Identifier. + if size := parseIdent(d.in, false); size > 0 { + return d.consumeToken(Name, size, uint8(IdentName)), nil + } + + // Field number. Identify if input is a valid number that is not negative + // and is decimal integer within 32-bit range. + if num := parseNumber(d.in); num.size > 0 { + if !num.neg && num.kind == numDec { + if _, err := strconv.ParseInt(string(d.in[:num.size]), 10, 32); err == nil { + return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil + } + } + return Token{}, d.newSyntaxError("invalid field number: %s", d.in[:num.size]) + } + + return Token{}, d.newSyntaxError("invalid field name: %s", errRegexp.Find(d.in)) +} + +// parseTypeName parses Any type URL or extension field name. The name is +// enclosed in [ and ] characters. The C++ parser does not handle many legal URL +// strings. This implementation is more liberal and allows for the pattern +// ^[-_a-zA-Z0-9]+([./][-_a-zA-Z0-9]+)*`). Whitespaces and comments are allowed +// in between [ ], '.', '/' and the sub names. +func (d *Decoder) parseTypeName() (Token, error) { + startPos := len(d.orig) - len(d.in) + // Use alias s to advance first in order to use d.in for error handling. + // Caller already checks for [ as first character. + s := consume(d.in[1:], 0) + if len(s) == 0 { + return Token{}, ErrUnexpectedEOF + } + + var name []byte + for len(s) > 0 && isTypeNameChar(s[0]) { + name = append(name, s[0]) + s = s[1:] + } + s = consume(s, 0) + + var closed bool + for len(s) > 0 && !closed { + switch { + case s[0] == ']': + s = s[1:] + closed = true + + case s[0] == '/', s[0] == '.': + if len(name) > 0 && (name[len(name)-1] == '/' || name[len(name)-1] == '.') { + return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s", + d.orig[startPos:len(d.orig)-len(s)+1]) + } + name = append(name, s[0]) + s = s[1:] + s = consume(s, 0) + for len(s) > 0 && isTypeNameChar(s[0]) { + name = append(name, s[0]) + s = s[1:] + } + s = consume(s, 0) + + default: + return Token{}, d.newSyntaxError( + "invalid type URL/extension field name: %s", d.orig[startPos:len(d.orig)-len(s)+1]) + } + } + + if !closed { + return Token{}, ErrUnexpectedEOF + } + + // First character cannot be '.'. Last character cannot be '.' or '/'. + size := len(name) + if size == 0 || name[0] == '.' || name[size-1] == '.' || name[size-1] == '/' { + return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s", + d.orig[startPos:len(d.orig)-len(s)]) + } + + d.in = s + endPos := len(d.orig) - len(d.in) + d.consume(0) + + return Token{ + kind: Name, + attrs: uint8(TypeName), + pos: startPos, + raw: d.orig[startPos:endPos], + str: string(name), + }, nil +} + +func isTypeNameChar(b byte) bool { + return (b == '-' || b == '_' || + ('0' <= b && b <= '9') || + ('a' <= b && b <= 'z') || + ('A' <= b && b <= 'Z')) +} + +func isWhiteSpace(b byte) bool { + switch b { + case ' ', '\n', '\r', '\t': + return true + default: + return false + } +} + +// parseIdent parses an unquoted proto identifier and returns size. +// If allowNeg is true, it allows '-' to be the first character in the +// identifier. This is used when parsing literal values like -infinity, etc. +// Regular expression matches an identifier: `^[_a-zA-Z][_a-zA-Z0-9]*` +func parseIdent(input []byte, allowNeg bool) int { + var size int + + s := input + if len(s) == 0 { + return 0 + } + + if allowNeg && s[0] == '-' { + s = s[1:] + size++ + if len(s) == 0 { + return 0 + } + } + + switch { + case s[0] == '_', + 'a' <= s[0] && s[0] <= 'z', + 'A' <= s[0] && s[0] <= 'Z': + s = s[1:] + size++ + default: + return 0 + } + + for len(s) > 0 && (s[0] == '_' || + 'a' <= s[0] && s[0] <= 'z' || + 'A' <= s[0] && s[0] <= 'Z' || + '0' <= s[0] && s[0] <= '9') { + s = s[1:] + size++ + } + + if len(s) > 0 && !isDelim(s[0]) { + return 0 + } + + return size +} + +// parseScalar parses for a string, literal or number value. +func (d *Decoder) parseScalar() (Token, error) { + if d.in[0] == '"' || d.in[0] == '\'' { + return d.parseStringValue() + } + + if tok, ok := d.parseLiteralValue(); ok { + return tok, nil + } + + if tok, ok := d.parseNumberValue(); ok { + return tok, nil + } + + return Token{}, d.newSyntaxError("invalid scalar value: %s", errRegexp.Find(d.in)) +} + +// parseLiteralValue parses a literal value. A literal value is used for +// bools, special floats and enums. This function simply identifies that the +// field value is a literal. +func (d *Decoder) parseLiteralValue() (Token, bool) { + size := parseIdent(d.in, true) + if size == 0 { + return Token{}, false + } + return d.consumeToken(Scalar, size, literalValue), true +} + +// consumeToken constructs a Token for given Kind from d.in and consumes given +// size-length from it. +func (d *Decoder) consumeToken(kind Kind, size int, attrs uint8) Token { + // Important to compute raw and pos before consuming. + tok := Token{ + kind: kind, + attrs: attrs, + pos: len(d.orig) - len(d.in), + raw: d.in[:size], + } + d.consume(size) + return tok +} + +// newSyntaxError returns a syntax error with line and column information for +// current position. +func (d *Decoder) newSyntaxError(f string, x ...interface{}) error { + e := errors.New(f, x...) + line, column := d.Position(len(d.orig) - len(d.in)) + return errors.New("syntax error (line %d:%d): %v", line, column, e) +} + +// Position returns line and column number of given index of the original input. +// It will panic if index is out of range. +func (d *Decoder) Position(idx int) (line int, column int) { + b := d.orig[:idx] + line = bytes.Count(b, []byte("\n")) + 1 + if i := bytes.LastIndexByte(b, '\n'); i >= 0 { + b = b[i+1:] + } + column = utf8.RuneCount(b) + 1 // ignore multi-rune characters + return line, column +} + +func (d *Decoder) tryConsumeChar(c byte) bool { + if len(d.in) > 0 && d.in[0] == c { + d.consume(1) + return true + } + return false +} + +// consume consumes n bytes of input and any subsequent whitespace or comments. +func (d *Decoder) consume(n int) { + d.in = consume(d.in, n) + return +} + +// consume consumes n bytes of input and any subsequent whitespace or comments. +func consume(b []byte, n int) []byte { + b = b[n:] + for len(b) > 0 { + switch b[0] { + case ' ', '\n', '\r', '\t': + b = b[1:] + case '#': + if i := bytes.IndexByte(b, '\n'); i >= 0 { + b = b[i+len("\n"):] + } else { + b = nil + } + default: + return b + } + } + return b +} + +// Any sequence that looks like a non-delimiter (for error reporting). +var errRegexp = regexp.MustCompile(`^([-+._a-zA-Z0-9\/]+|.)`) + +// isDelim returns true if given byte is a delimiter character. +func isDelim(c byte) bool { + return !(c == '-' || c == '+' || c == '.' || c == '_' || + ('a' <= c && c <= 'z') || + ('A' <= c && c <= 'Z') || + ('0' <= c && c <= '9')) +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go new file mode 100644 index 00000000..f2d90b78 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go @@ -0,0 +1,190 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +// parseNumberValue parses a number from the input and returns a Token object. +func (d *Decoder) parseNumberValue() (Token, bool) { + in := d.in + num := parseNumber(in) + if num.size == 0 { + return Token{}, false + } + numAttrs := num.kind + if num.neg { + numAttrs |= isNegative + } + strSize := num.size + last := num.size - 1 + if num.kind == numFloat && (d.in[last] == 'f' || d.in[last] == 'F') { + strSize = last + } + tok := Token{ + kind: Scalar, + attrs: numberValue, + pos: len(d.orig) - len(d.in), + raw: d.in[:num.size], + str: string(d.in[:strSize]), + numAttrs: numAttrs, + } + d.consume(num.size) + return tok, true +} + +const ( + numDec uint8 = (1 << iota) / 2 + numHex + numOct + numFloat +) + +// number is the result of parsing out a valid number from parseNumber. It +// contains data for doing float or integer conversion via the strconv package +// in conjunction with the input bytes. +type number struct { + kind uint8 + neg bool + size int +} + +// parseNumber constructs a number object from given input. It allows for the +// following patterns: +// integer: ^-?([1-9][0-9]*|0[xX][0-9a-fA-F]+|0[0-7]*) +// float: ^-?((0|[1-9][0-9]*)?([.][0-9]*)?([eE][+-]?[0-9]+)?[fF]?) +// It also returns the number of parsed bytes for the given number, 0 if it is +// not a number. +func parseNumber(input []byte) number { + kind := numDec + var size int + var neg bool + + s := input + if len(s) == 0 { + return number{} + } + + // Optional - + if s[0] == '-' { + neg = true + s = s[1:] + size++ + if len(s) == 0 { + return number{} + } + } + + // C++ allows for whitespace and comments in between the negative sign and + // the rest of the number. This logic currently does not but is consistent + // with v1. + + switch { + case s[0] == '0': + if len(s) > 1 { + switch { + case s[1] == 'x' || s[1] == 'X': + // Parse as hex number. + kind = numHex + n := 2 + s = s[2:] + for len(s) > 0 && (('0' <= s[0] && s[0] <= '9') || + ('a' <= s[0] && s[0] <= 'f') || + ('A' <= s[0] && s[0] <= 'F')) { + s = s[1:] + n++ + } + if n == 2 { + return number{} + } + size += n + + case '0' <= s[1] && s[1] <= '7': + // Parse as octal number. + kind = numOct + n := 2 + s = s[2:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '7' { + s = s[1:] + n++ + } + size += n + } + + if kind&(numHex|numOct) > 0 { + if len(s) > 0 && !isDelim(s[0]) { + return number{} + } + return number{kind: kind, neg: neg, size: size} + } + } + s = s[1:] + size++ + + case '1' <= s[0] && s[0] <= '9': + n := 1 + s = s[1:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + size += n + + case s[0] == '.': + // Set kind to numFloat to signify the intent to parse as float. And + // that it needs to have other digits after '.'. + kind = numFloat + + default: + return number{} + } + + // . followed by 0 or more digits. + if len(s) > 0 && s[0] == '.' { + n := 1 + s = s[1:] + // If decimal point was before any digits, it should be followed by + // other digits. + if len(s) == 0 && kind == numFloat { + return number{} + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + size += n + kind = numFloat + } + + // e or E followed by an optional - or + and 1 or more digits. + if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { + kind = numFloat + s = s[1:] + n := 1 + if s[0] == '+' || s[0] == '-' { + s = s[1:] + n++ + if len(s) == 0 { + return number{} + } + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + size += n + } + + // Optional suffix f or F for floats. + if len(s) > 0 && (s[0] == 'f' || s[0] == 'F') { + kind = numFloat + s = s[1:] + size++ + } + + // Check that next byte is a delimiter or it is at the end. + if len(s) > 0 && !isDelim(s[0]) { + return number{} + } + + return number{kind: kind, neg: neg, size: size} +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go new file mode 100644 index 00000000..d4d34902 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go @@ -0,0 +1,161 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "bytes" + "strconv" + "strings" + "unicode" + "unicode/utf16" + "unicode/utf8" + + "google.golang.org/protobuf/internal/strs" +) + +// parseStringValue parses string field token. +// This differs from parseString since the text format allows +// multiple back-to-back string literals where they are semantically treated +// as a single large string with all values concatenated. +// +// E.g., `"foo" "bar" "baz"` => "foobarbaz" +func (d *Decoder) parseStringValue() (Token, error) { + // Note that the ending quote is sufficient to unambiguously mark the end + // of a string. Thus, the text grammar does not require intervening + // whitespace or control characters in-between strings. + // Thus, the following is valid: + // `"foo"'bar'"baz"` => "foobarbaz" + in0 := d.in + var ss []string + for len(d.in) > 0 && (d.in[0] == '"' || d.in[0] == '\'') { + s, err := d.parseString() + if err != nil { + return Token{}, err + } + ss = append(ss, s) + } + // d.in already points to the end of the value at this point. + return Token{ + kind: Scalar, + attrs: stringValue, + pos: len(d.orig) - len(in0), + raw: in0[:len(in0)-len(d.in)], + str: strings.Join(ss, ""), + }, nil +} + +// parseString parses a string value enclosed in " or '. +func (d *Decoder) parseString() (string, error) { + in := d.in + if len(in) == 0 { + return "", ErrUnexpectedEOF + } + quote := in[0] + in = in[1:] + i := indexNeedEscapeInBytes(in) + in, out := in[i:], in[:i:i] // set cap to prevent mutations + for len(in) > 0 { + switch r, n := utf8.DecodeRune(in); { + case r == utf8.RuneError && n == 1: + return "", d.newSyntaxError("invalid UTF-8 detected") + case r == 0 || r == '\n': + return "", d.newSyntaxError("invalid character %q in string", r) + case r == rune(quote): + in = in[1:] + d.consume(len(d.in) - len(in)) + return string(out), nil + case r == '\\': + if len(in) < 2 { + return "", ErrUnexpectedEOF + } + switch r := in[1]; r { + case '"', '\'', '\\', '?': + in, out = in[2:], append(out, r) + case 'a': + in, out = in[2:], append(out, '\a') + case 'b': + in, out = in[2:], append(out, '\b') + case 'n': + in, out = in[2:], append(out, '\n') + case 'r': + in, out = in[2:], append(out, '\r') + case 't': + in, out = in[2:], append(out, '\t') + case 'v': + in, out = in[2:], append(out, '\v') + case 'f': + in, out = in[2:], append(out, '\f') + case '0', '1', '2', '3', '4', '5', '6', '7': + // One, two, or three octal characters. + n := len(in[1:]) - len(bytes.TrimLeft(in[1:], "01234567")) + if n > 3 { + n = 3 + } + v, err := strconv.ParseUint(string(in[1:1+n]), 8, 8) + if err != nil { + return "", d.newSyntaxError("invalid octal escape code %q in string", in[:1+n]) + } + in, out = in[1+n:], append(out, byte(v)) + case 'x': + // One or two hexadecimal characters. + n := len(in[2:]) - len(bytes.TrimLeft(in[2:], "0123456789abcdefABCDEF")) + if n > 2 { + n = 2 + } + v, err := strconv.ParseUint(string(in[2:2+n]), 16, 8) + if err != nil { + return "", d.newSyntaxError("invalid hex escape code %q in string", in[:2+n]) + } + in, out = in[2+n:], append(out, byte(v)) + case 'u', 'U': + // Four or eight hexadecimal characters + n := 6 + if r == 'U' { + n = 10 + } + if len(in) < n { + return "", ErrUnexpectedEOF + } + v, err := strconv.ParseUint(string(in[2:n]), 16, 32) + if utf8.MaxRune < v || err != nil { + return "", d.newSyntaxError("invalid Unicode escape code %q in string", in[:n]) + } + in = in[n:] + + r := rune(v) + if utf16.IsSurrogate(r) { + if len(in) < 6 { + return "", ErrUnexpectedEOF + } + v, err := strconv.ParseUint(string(in[2:6]), 16, 16) + r = utf16.DecodeRune(r, rune(v)) + if in[0] != '\\' || in[1] != 'u' || r == unicode.ReplacementChar || err != nil { + return "", d.newSyntaxError("invalid Unicode escape code %q in string", in[:6]) + } + in = in[6:] + } + out = append(out, string(r)...) + default: + return "", d.newSyntaxError("invalid escape code %q in string", in[:2]) + } + default: + i := indexNeedEscapeInBytes(in[n:]) + in, out = in[n+i:], append(out, in[:n+i]...) + } + } + return "", ErrUnexpectedEOF +} + +// indexNeedEscapeInString returns the index of the character that needs +// escaping. If no characters need escaping, this returns the input length. +func indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) } + +// UnmarshalString returns an unescaped string given a textproto string value. +// String value needs to contain single or double quotes. This is only used by +// internal/encoding/defval package for unmarshaling bytes. +func UnmarshalString(s string) (string, error) { + d := NewDecoder([]byte(s)) + return d.parseString() +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go new file mode 100644 index 00000000..83d2b0d5 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go @@ -0,0 +1,373 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "bytes" + "fmt" + "math" + "strconv" + "strings" + + "google.golang.org/protobuf/internal/flags" +) + +// Kind represents a token kind expressible in the textproto format. +type Kind uint8 + +// Kind values. +const ( + Invalid Kind = iota + EOF + Name // Name indicates the field name. + Scalar // Scalar are scalar values, e.g. "string", 47, ENUM_LITERAL, true. + MessageOpen + MessageClose + ListOpen + ListClose + + // comma and semi-colon are only for parsing in between values and should not be exposed. + comma + semicolon + + // bof indicates beginning of file, which is the default token + // kind at the beginning of parsing. + bof = Invalid +) + +func (t Kind) String() string { + switch t { + case Invalid: + return "" + case EOF: + return "eof" + case Scalar: + return "scalar" + case Name: + return "name" + case MessageOpen: + return "{" + case MessageClose: + return "}" + case ListOpen: + return "[" + case ListClose: + return "]" + case comma: + return "," + case semicolon: + return ";" + default: + return fmt.Sprintf("", uint8(t)) + } +} + +// NameKind represents different types of field names. +type NameKind uint8 + +// NameKind values. +const ( + IdentName NameKind = iota + 1 + TypeName + FieldNumber +) + +func (t NameKind) String() string { + switch t { + case IdentName: + return "IdentName" + case TypeName: + return "TypeName" + case FieldNumber: + return "FieldNumber" + default: + return fmt.Sprintf("", uint8(t)) + } +} + +// Bit mask in Token.attrs to indicate if a Name token is followed by the +// separator char ':'. The field name separator char is optional for message +// field or repeated message field, but required for all other types. Decoder +// simply indicates whether a Name token is followed by separator or not. It is +// up to the prototext package to validate. +const hasSeparator = 1 << 7 + +// Scalar value types. +const ( + numberValue = iota + 1 + stringValue + literalValue +) + +// Bit mask in Token.numAttrs to indicate that the number is a negative. +const isNegative = 1 << 7 + +// Token provides a parsed token kind and value. Values are provided by the +// different accessor methods. +type Token struct { + // Kind of the Token object. + kind Kind + // attrs contains metadata for the following Kinds: + // Name: hasSeparator bit and one of NameKind. + // Scalar: one of numberValue, stringValue, literalValue. + attrs uint8 + // numAttrs contains metadata for numberValue: + // - highest bit is whether negative or positive. + // - lower bits indicate one of numDec, numHex, numOct, numFloat. + numAttrs uint8 + // pos provides the position of the token in the original input. + pos int + // raw bytes of the serialized token. + // This is a subslice into the original input. + raw []byte + // str contains parsed string for the following: + // - stringValue of Scalar kind + // - numberValue of Scalar kind + // - TypeName of Name kind + str string +} + +// Kind returns the token kind. +func (t Token) Kind() Kind { + return t.kind +} + +// RawString returns the read value in string. +func (t Token) RawString() string { + return string(t.raw) +} + +// Pos returns the token position from the input. +func (t Token) Pos() int { + return t.pos +} + +// NameKind returns IdentName, TypeName or FieldNumber. +// It panics if type is not Name. +func (t Token) NameKind() NameKind { + if t.kind == Name { + return NameKind(t.attrs &^ hasSeparator) + } + panic(fmt.Sprintf("Token is not a Name type: %s", t.kind)) +} + +// HasSeparator returns true if the field name is followed by the separator char +// ':', else false. It panics if type is not Name. +func (t Token) HasSeparator() bool { + if t.kind == Name { + return t.attrs&hasSeparator != 0 + } + panic(fmt.Sprintf("Token is not a Name type: %s", t.kind)) +} + +// IdentName returns the value for IdentName type. +func (t Token) IdentName() string { + if t.kind == Name && t.attrs&uint8(IdentName) != 0 { + return string(t.raw) + } + panic(fmt.Sprintf("Token is not an IdentName: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator))) +} + +// TypeName returns the value for TypeName type. +func (t Token) TypeName() string { + if t.kind == Name && t.attrs&uint8(TypeName) != 0 { + return t.str + } + panic(fmt.Sprintf("Token is not a TypeName: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator))) +} + +// FieldNumber returns the value for FieldNumber type. It returns a +// non-negative int32 value. Caller will still need to validate for the correct +// field number range. +func (t Token) FieldNumber() int32 { + if t.kind != Name || t.attrs&uint8(FieldNumber) == 0 { + panic(fmt.Sprintf("Token is not a FieldNumber: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator))) + } + // Following should not return an error as it had already been called right + // before this Token was constructed. + num, _ := strconv.ParseInt(string(t.raw), 10, 32) + return int32(num) +} + +// String returns the string value for a Scalar type. +func (t Token) String() (string, bool) { + if t.kind != Scalar || t.attrs != stringValue { + return "", false + } + return t.str, true +} + +// Enum returns the literal value for a Scalar type for use as enum literals. +func (t Token) Enum() (string, bool) { + if t.kind != Scalar || t.attrs != literalValue || (len(t.raw) > 0 && t.raw[0] == '-') { + return "", false + } + return string(t.raw), true +} + +// Bool returns the bool value for a Scalar type. +func (t Token) Bool() (bool, bool) { + if t.kind != Scalar { + return false, false + } + switch t.attrs { + case literalValue: + if b, ok := boolLits[string(t.raw)]; ok { + return b, true + } + case numberValue: + // Unsigned integer representation of 0 or 1 is permitted: 00, 0x0, 01, + // 0x1, etc. + n, err := strconv.ParseUint(t.str, 0, 64) + if err == nil { + switch n { + case 0: + return false, true + case 1: + return true, true + } + } + } + return false, false +} + +// These exact boolean literals are the ones supported in C++. +var boolLits = map[string]bool{ + "t": true, + "true": true, + "True": true, + "f": false, + "false": false, + "False": false, +} + +// Uint64 returns the uint64 value for a Scalar type. +func (t Token) Uint64() (uint64, bool) { + if t.kind != Scalar || t.attrs != numberValue || + t.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 { + return 0, false + } + n, err := strconv.ParseUint(t.str, 0, 64) + if err != nil { + return 0, false + } + return n, true +} + +// Uint32 returns the uint32 value for a Scalar type. +func (t Token) Uint32() (uint32, bool) { + if t.kind != Scalar || t.attrs != numberValue || + t.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 { + return 0, false + } + n, err := strconv.ParseUint(t.str, 0, 32) + if err != nil { + return 0, false + } + return uint32(n), true +} + +// Int64 returns the int64 value for a Scalar type. +func (t Token) Int64() (int64, bool) { + if t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 { + return 0, false + } + if n, err := strconv.ParseInt(t.str, 0, 64); err == nil { + return n, true + } + // C++ accepts large positive hex numbers as negative values. + // This feature is here for proto1 backwards compatibility purposes. + if flags.ProtoLegacy && (t.numAttrs == numHex) { + if n, err := strconv.ParseUint(t.str, 0, 64); err == nil { + return int64(n), true + } + } + return 0, false +} + +// Int32 returns the int32 value for a Scalar type. +func (t Token) Int32() (int32, bool) { + if t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 { + return 0, false + } + if n, err := strconv.ParseInt(t.str, 0, 32); err == nil { + return int32(n), true + } + // C++ accepts large positive hex numbers as negative values. + // This feature is here for proto1 backwards compatibility purposes. + if flags.ProtoLegacy && (t.numAttrs == numHex) { + if n, err := strconv.ParseUint(t.str, 0, 32); err == nil { + return int32(n), true + } + } + return 0, false +} + +// Float64 returns the float64 value for a Scalar type. +func (t Token) Float64() (float64, bool) { + if t.kind != Scalar { + return 0, false + } + switch t.attrs { + case literalValue: + if f, ok := floatLits[strings.ToLower(string(t.raw))]; ok { + return f, true + } + case numberValue: + n, err := strconv.ParseFloat(t.str, 64) + if err == nil { + return n, true + } + nerr := err.(*strconv.NumError) + if nerr.Err == strconv.ErrRange { + return n, true + } + } + return 0, false +} + +// Float32 returns the float32 value for a Scalar type. +func (t Token) Float32() (float32, bool) { + if t.kind != Scalar { + return 0, false + } + switch t.attrs { + case literalValue: + if f, ok := floatLits[strings.ToLower(string(t.raw))]; ok { + return float32(f), true + } + case numberValue: + n, err := strconv.ParseFloat(t.str, 64) + if err == nil { + // Overflows are treated as (-)infinity. + return float32(n), true + } + nerr := err.(*strconv.NumError) + if nerr.Err == strconv.ErrRange { + return float32(n), true + } + } + return 0, false +} + +// These are the supported float literals which C++ permits case-insensitive +// variants of these. +var floatLits = map[string]float64{ + "nan": math.NaN(), + "inf": math.Inf(1), + "infinity": math.Inf(1), + "-inf": math.Inf(-1), + "-infinity": math.Inf(-1), +} + +// TokenEquals returns true if given Tokens are equal, else false. +func TokenEquals(x, y Token) bool { + return x.kind == y.kind && + x.attrs == y.attrs && + x.numAttrs == y.numAttrs && + x.pos == y.pos && + bytes.Equal(x.raw, y.raw) && + x.str == y.str +} diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go b/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go new file mode 100644 index 00000000..0ce8d6fb --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package text implements the text format for protocol buffers. +// This package has no semantic understanding for protocol buffers and is only +// a parser and composer for the format. +// +// There is no formal specification for the protobuf text format, as such the +// C++ implementation (see google::protobuf::TextFormat) is the reference +// implementation of the text format. +// +// This package is neither a superset nor a subset of the C++ implementation. +// This implementation permits a more liberal grammar in some cases to be +// backwards compatible with the historical Go implementation. +// Future parsings unique to Go should not be added. +// Some grammars allowed by the C++ implementation are deliberately +// not implemented here because they are considered a bug by the protobuf team +// and should not be replicated. +// +// The Go implementation should implement a sufficient amount of the C++ +// grammar such that the default text serialization by C++ can be parsed by Go. +// However, just because the C++ parser accepts some input does not mean that +// the Go implementation should as well. +// +// The text format is almost a superset of JSON except: +// * message keys are not quoted strings, but identifiers +// * the top-level value must be a message without the delimiters +package text diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go new file mode 100644 index 00000000..c4ba1c59 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go @@ -0,0 +1,267 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "math" + "math/bits" + "strconv" + "strings" + "unicode/utf8" + + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/errors" +) + +// encType represents an encoding type. +type encType uint8 + +const ( + _ encType = (1 << iota) / 2 + name + scalar + messageOpen + messageClose +) + +// Encoder provides methods to write out textproto constructs and values. The user is +// responsible for producing valid sequences of constructs and values. +type Encoder struct { + encoderState + + indent string + newline string // set to "\n" if len(indent) > 0 + delims [2]byte + outputASCII bool +} + +type encoderState struct { + lastType encType + indents []byte + out []byte +} + +// NewEncoder returns an Encoder. +// +// If indent is a non-empty string, it causes every entry in a List or Message +// to be preceded by the indent and trailed by a newline. +// +// If delims is not the zero value, it controls the delimiter characters used +// for messages (e.g., "{}" vs "<>"). +// +// If outputASCII is true, strings will be serialized in such a way that +// multi-byte UTF-8 sequences are escaped. This property ensures that the +// overall output is ASCII (as opposed to UTF-8). +func NewEncoder(indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { + e := &Encoder{} + if len(indent) > 0 { + if strings.Trim(indent, " \t") != "" { + return nil, errors.New("indent may only be composed of space and tab characters") + } + e.indent = indent + e.newline = "\n" + } + switch delims { + case [2]byte{0, 0}: + e.delims = [2]byte{'{', '}'} + case [2]byte{'{', '}'}, [2]byte{'<', '>'}: + e.delims = delims + default: + return nil, errors.New("delimiters may only be \"{}\" or \"<>\"") + } + e.outputASCII = outputASCII + + return e, nil +} + +// Bytes returns the content of the written bytes. +func (e *Encoder) Bytes() []byte { + return e.out +} + +// StartMessage writes out the '{' or '<' symbol. +func (e *Encoder) StartMessage() { + e.prepareNext(messageOpen) + e.out = append(e.out, e.delims[0]) +} + +// EndMessage writes out the '}' or '>' symbol. +func (e *Encoder) EndMessage() { + e.prepareNext(messageClose) + e.out = append(e.out, e.delims[1]) +} + +// WriteName writes out the field name and the separator ':'. +func (e *Encoder) WriteName(s string) { + e.prepareNext(name) + e.out = append(e.out, s...) + e.out = append(e.out, ':') +} + +// WriteBool writes out the given boolean value. +func (e *Encoder) WriteBool(b bool) { + if b { + e.WriteLiteral("true") + } else { + e.WriteLiteral("false") + } +} + +// WriteString writes out the given string value. +func (e *Encoder) WriteString(s string) { + e.prepareNext(scalar) + e.out = appendString(e.out, s, e.outputASCII) +} + +func appendString(out []byte, in string, outputASCII bool) []byte { + out = append(out, '"') + i := indexNeedEscapeInString(in) + in, out = in[i:], append(out, in[:i]...) + for len(in) > 0 { + switch r, n := utf8.DecodeRuneInString(in); { + case r == utf8.RuneError && n == 1: + // We do not report invalid UTF-8 because strings in the text format + // are used to represent both the proto string and bytes type. + r = rune(in[0]) + fallthrough + case r < ' ' || r == '"' || r == '\\': + out = append(out, '\\') + switch r { + case '"', '\\': + out = append(out, byte(r)) + case '\n': + out = append(out, 'n') + case '\r': + out = append(out, 'r') + case '\t': + out = append(out, 't') + default: + out = append(out, 'x') + out = append(out, "00"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } + in = in[n:] + case outputASCII && r >= utf8.RuneSelf: + out = append(out, '\\') + if r <= math.MaxUint16 { + out = append(out, 'u') + out = append(out, "0000"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } else { + out = append(out, 'U') + out = append(out, "00000000"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } + in = in[n:] + default: + i := indexNeedEscapeInString(in[n:]) + in, out = in[n+i:], append(out, in[:n+i]...) + } + } + out = append(out, '"') + return out +} + +// indexNeedEscapeInString returns the index of the character that needs +// escaping. If no characters need escaping, this returns the input length. +func indexNeedEscapeInString(s string) int { + for i := 0; i < len(s); i++ { + if c := s[i]; c < ' ' || c == '"' || c == '\'' || c == '\\' || c >= utf8.RuneSelf { + return i + } + } + return len(s) +} + +// WriteFloat writes out the given float value for given bitSize. +func (e *Encoder) WriteFloat(n float64, bitSize int) { + e.prepareNext(scalar) + e.out = appendFloat(e.out, n, bitSize) +} + +func appendFloat(out []byte, n float64, bitSize int) []byte { + switch { + case math.IsNaN(n): + return append(out, "nan"...) + case math.IsInf(n, +1): + return append(out, "inf"...) + case math.IsInf(n, -1): + return append(out, "-inf"...) + default: + return strconv.AppendFloat(out, n, 'g', -1, bitSize) + } +} + +// WriteInt writes out the given signed integer value. +func (e *Encoder) WriteInt(n int64) { + e.prepareNext(scalar) + e.out = append(e.out, strconv.FormatInt(n, 10)...) +} + +// WriteUint writes out the given unsigned integer value. +func (e *Encoder) WriteUint(n uint64) { + e.prepareNext(scalar) + e.out = append(e.out, strconv.FormatUint(n, 10)...) +} + +// WriteLiteral writes out the given string as a literal value without quotes. +// This is used for writing enum literal strings. +func (e *Encoder) WriteLiteral(s string) { + e.prepareNext(scalar) + e.out = append(e.out, s...) +} + +// prepareNext adds possible space and indentation for the next value based +// on last encType and indent option. It also updates e.lastType to next. +func (e *Encoder) prepareNext(next encType) { + defer func() { + e.lastType = next + }() + + // Single line. + if len(e.indent) == 0 { + // Add space after each field before the next one. + if e.lastType&(scalar|messageClose) != 0 && next == name { + e.out = append(e.out, ' ') + // Add a random extra space to make output unstable. + if detrand.Bool() { + e.out = append(e.out, ' ') + } + } + return + } + + // Multi-line. + switch { + case e.lastType == name: + e.out = append(e.out, ' ') + // Add a random extra space after name: to make output unstable. + if detrand.Bool() { + e.out = append(e.out, ' ') + } + + case e.lastType == messageOpen && next != messageClose: + e.indents = append(e.indents, e.indent...) + e.out = append(e.out, '\n') + e.out = append(e.out, e.indents...) + + case e.lastType&(scalar|messageClose) != 0: + if next == messageClose { + e.indents = e.indents[:len(e.indents)-len(e.indent)] + } + e.out = append(e.out, '\n') + e.out = append(e.out, e.indents...) + } +} + +// Snapshot returns the current snapshot for use in Reset. +func (e *Encoder) Snapshot() encoderState { + return e.encoderState +} + +// Reset resets the Encoder to the given encoderState from a Snapshot. +func (e *Encoder) Reset(es encoderState) { + e.encoderState = es +} diff --git a/vendor/google.golang.org/protobuf/internal/errors/errors.go b/vendor/google.golang.org/protobuf/internal/errors/errors.go new file mode 100644 index 00000000..20c17b35 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/errors/errors.go @@ -0,0 +1,89 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package errors implements functions to manipulate errors. +package errors + +import ( + "errors" + "fmt" + + "google.golang.org/protobuf/internal/detrand" +) + +// Error is a sentinel matching all errors produced by this package. +var Error = errors.New("protobuf error") + +// New formats a string according to the format specifier and arguments and +// returns an error that has a "proto" prefix. +func New(f string, x ...interface{}) error { + return &prefixError{s: format(f, x...)} +} + +type prefixError struct{ s string } + +var prefix = func() string { + // Deliberately introduce instability into the error message string to + // discourage users from performing error string comparisons. + if detrand.Bool() { + return "proto: " // use non-breaking spaces (U+00a0) + } else { + return "proto: " // use regular spaces (U+0020) + } +}() + +func (e *prefixError) Error() string { + return prefix + e.s +} + +func (e *prefixError) Unwrap() error { + return Error +} + +// Wrap returns an error that has a "proto" prefix, the formatted string described +// by the format specifier and arguments, and a suffix of err. The error wraps err. +func Wrap(err error, f string, x ...interface{}) error { + return &wrapError{ + s: format(f, x...), + err: err, + } +} + +type wrapError struct { + s string + err error +} + +func (e *wrapError) Error() string { + return format("%v%v: %v", prefix, e.s, e.err) +} + +func (e *wrapError) Unwrap() error { + return e.err +} + +func (e *wrapError) Is(target error) bool { + return target == Error +} + +func format(f string, x ...interface{}) string { + // avoid "proto: " prefix when chaining + for i := 0; i < len(x); i++ { + switch e := x[i].(type) { + case *prefixError: + x[i] = e.s + case *wrapError: + x[i] = format("%v: %v", e.s, e.err) + } + } + return fmt.Sprintf(f, x...) +} + +func InvalidUTF8(name string) error { + return New("field %v contains invalid UTF-8", name) +} + +func RequiredNotSet(name string) error { + return New("required field %v not set", name) +} diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go112.go b/vendor/google.golang.org/protobuf/internal/errors/is_go112.go new file mode 100644 index 00000000..f90e909b --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/errors/is_go112.go @@ -0,0 +1,39 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.13 + +package errors + +import "reflect" + +// Is is a copy of Go 1.13's errors.Is for use with older Go versions. +func Is(err, target error) bool { + if target == nil { + return err == target + } + + isComparable := reflect.TypeOf(target).Comparable() + for { + if isComparable && err == target { + return true + } + if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) { + return true + } + if err = unwrap(err); err == nil { + return false + } + } +} + +func unwrap(err error) error { + u, ok := err.(interface { + Unwrap() error + }) + if !ok { + return nil + } + return u.Unwrap() +} diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go113.go b/vendor/google.golang.org/protobuf/internal/errors/is_go113.go new file mode 100644 index 00000000..dc05f419 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/errors/is_go113.go @@ -0,0 +1,12 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.13 + +package errors + +import "errors" + +// Is is errors.Is. +func Is(err, target error) bool { return errors.Is(err, target) } diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/any_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/any_gen.go new file mode 100644 index 00000000..74c5fef2 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/any_gen.go @@ -0,0 +1,13 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Any. +const ( + Any_TypeUrl = 1 // optional string + Any_Value = 2 // optional bytes +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/api_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/api_gen.go new file mode 100644 index 00000000..9a6b5f29 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/api_gen.go @@ -0,0 +1,35 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Api. +const ( + Api_Name = 1 // optional string + Api_Methods = 2 // repeated google.protobuf.Method + Api_Options = 3 // repeated google.protobuf.Option + Api_Version = 4 // optional string + Api_SourceContext = 5 // optional google.protobuf.SourceContext + Api_Mixins = 6 // repeated google.protobuf.Mixin + Api_Syntax = 7 // optional google.protobuf.Syntax +) + +// Field numbers for google.protobuf.Method. +const ( + Method_Name = 1 // optional string + Method_RequestTypeUrl = 2 // optional string + Method_RequestStreaming = 3 // optional bool + Method_ResponseTypeUrl = 4 // optional string + Method_ResponseStreaming = 5 // optional bool + Method_Options = 6 // repeated google.protobuf.Option + Method_Syntax = 7 // optional google.protobuf.Syntax +) + +// Field numbers for google.protobuf.Mixin. +const ( + Mixin_Name = 1 // optional string + Mixin_Root = 2 // optional string +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/descriptor_gen.go new file mode 100644 index 00000000..16295154 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/descriptor_gen.go @@ -0,0 +1,239 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.FileDescriptorSet. +const ( + FileDescriptorSet_File = 1 // repeated google.protobuf.FileDescriptorProto +) + +// Field numbers for google.protobuf.FileDescriptorProto. +const ( + FileDescriptorProto_Name = 1 // optional string + FileDescriptorProto_Package = 2 // optional string + FileDescriptorProto_Dependency = 3 // repeated string + FileDescriptorProto_PublicDependency = 10 // repeated int32 + FileDescriptorProto_WeakDependency = 11 // repeated int32 + FileDescriptorProto_MessageType = 4 // repeated google.protobuf.DescriptorProto + FileDescriptorProto_EnumType = 5 // repeated google.protobuf.EnumDescriptorProto + FileDescriptorProto_Service = 6 // repeated google.protobuf.ServiceDescriptorProto + FileDescriptorProto_Extension = 7 // repeated google.protobuf.FieldDescriptorProto + FileDescriptorProto_Options = 8 // optional google.protobuf.FileOptions + FileDescriptorProto_SourceCodeInfo = 9 // optional google.protobuf.SourceCodeInfo + FileDescriptorProto_Syntax = 12 // optional string +) + +// Field numbers for google.protobuf.DescriptorProto. +const ( + DescriptorProto_Name = 1 // optional string + DescriptorProto_Field = 2 // repeated google.protobuf.FieldDescriptorProto + DescriptorProto_Extension = 6 // repeated google.protobuf.FieldDescriptorProto + DescriptorProto_NestedType = 3 // repeated google.protobuf.DescriptorProto + DescriptorProto_EnumType = 4 // repeated google.protobuf.EnumDescriptorProto + DescriptorProto_ExtensionRange = 5 // repeated google.protobuf.DescriptorProto.ExtensionRange + DescriptorProto_OneofDecl = 8 // repeated google.protobuf.OneofDescriptorProto + DescriptorProto_Options = 7 // optional google.protobuf.MessageOptions + DescriptorProto_ReservedRange = 9 // repeated google.protobuf.DescriptorProto.ReservedRange + DescriptorProto_ReservedName = 10 // repeated string +) + +// Field numbers for google.protobuf.DescriptorProto.ExtensionRange. +const ( + DescriptorProto_ExtensionRange_Start = 1 // optional int32 + DescriptorProto_ExtensionRange_End = 2 // optional int32 + DescriptorProto_ExtensionRange_Options = 3 // optional google.protobuf.ExtensionRangeOptions +) + +// Field numbers for google.protobuf.DescriptorProto.ReservedRange. +const ( + DescriptorProto_ReservedRange_Start = 1 // optional int32 + DescriptorProto_ReservedRange_End = 2 // optional int32 +) + +// Field numbers for google.protobuf.ExtensionRangeOptions. +const ( + ExtensionRangeOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.FieldDescriptorProto. +const ( + FieldDescriptorProto_Name = 1 // optional string + FieldDescriptorProto_Number = 3 // optional int32 + FieldDescriptorProto_Label = 4 // optional google.protobuf.FieldDescriptorProto.Label + FieldDescriptorProto_Type = 5 // optional google.protobuf.FieldDescriptorProto.Type + FieldDescriptorProto_TypeName = 6 // optional string + FieldDescriptorProto_Extendee = 2 // optional string + FieldDescriptorProto_DefaultValue = 7 // optional string + FieldDescriptorProto_OneofIndex = 9 // optional int32 + FieldDescriptorProto_JsonName = 10 // optional string + FieldDescriptorProto_Options = 8 // optional google.protobuf.FieldOptions +) + +// Field numbers for google.protobuf.OneofDescriptorProto. +const ( + OneofDescriptorProto_Name = 1 // optional string + OneofDescriptorProto_Options = 2 // optional google.protobuf.OneofOptions +) + +// Field numbers for google.protobuf.EnumDescriptorProto. +const ( + EnumDescriptorProto_Name = 1 // optional string + EnumDescriptorProto_Value = 2 // repeated google.protobuf.EnumValueDescriptorProto + EnumDescriptorProto_Options = 3 // optional google.protobuf.EnumOptions + EnumDescriptorProto_ReservedRange = 4 // repeated google.protobuf.EnumDescriptorProto.EnumReservedRange + EnumDescriptorProto_ReservedName = 5 // repeated string +) + +// Field numbers for google.protobuf.EnumDescriptorProto.EnumReservedRange. +const ( + EnumDescriptorProto_EnumReservedRange_Start = 1 // optional int32 + EnumDescriptorProto_EnumReservedRange_End = 2 // optional int32 +) + +// Field numbers for google.protobuf.EnumValueDescriptorProto. +const ( + EnumValueDescriptorProto_Name = 1 // optional string + EnumValueDescriptorProto_Number = 2 // optional int32 + EnumValueDescriptorProto_Options = 3 // optional google.protobuf.EnumValueOptions +) + +// Field numbers for google.protobuf.ServiceDescriptorProto. +const ( + ServiceDescriptorProto_Name = 1 // optional string + ServiceDescriptorProto_Method = 2 // repeated google.protobuf.MethodDescriptorProto + ServiceDescriptorProto_Options = 3 // optional google.protobuf.ServiceOptions +) + +// Field numbers for google.protobuf.MethodDescriptorProto. +const ( + MethodDescriptorProto_Name = 1 // optional string + MethodDescriptorProto_InputType = 2 // optional string + MethodDescriptorProto_OutputType = 3 // optional string + MethodDescriptorProto_Options = 4 // optional google.protobuf.MethodOptions + MethodDescriptorProto_ClientStreaming = 5 // optional bool + MethodDescriptorProto_ServerStreaming = 6 // optional bool +) + +// Field numbers for google.protobuf.FileOptions. +const ( + FileOptions_JavaPackage = 1 // optional string + FileOptions_JavaOuterClassname = 8 // optional string + FileOptions_JavaMultipleFiles = 10 // optional bool + FileOptions_JavaGenerateEqualsAndHash = 20 // optional bool + FileOptions_JavaStringCheckUtf8 = 27 // optional bool + FileOptions_OptimizeFor = 9 // optional google.protobuf.FileOptions.OptimizeMode + FileOptions_GoPackage = 11 // optional string + FileOptions_CcGenericServices = 16 // optional bool + FileOptions_JavaGenericServices = 17 // optional bool + FileOptions_PyGenericServices = 18 // optional bool + FileOptions_PhpGenericServices = 42 // optional bool + FileOptions_Deprecated = 23 // optional bool + FileOptions_CcEnableArenas = 31 // optional bool + FileOptions_ObjcClassPrefix = 36 // optional string + FileOptions_CsharpNamespace = 37 // optional string + FileOptions_SwiftPrefix = 39 // optional string + FileOptions_PhpClassPrefix = 40 // optional string + FileOptions_PhpNamespace = 41 // optional string + FileOptions_PhpMetadataNamespace = 44 // optional string + FileOptions_RubyPackage = 45 // optional string + FileOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.MessageOptions. +const ( + MessageOptions_MessageSetWireFormat = 1 // optional bool + MessageOptions_NoStandardDescriptorAccessor = 2 // optional bool + MessageOptions_Deprecated = 3 // optional bool + MessageOptions_MapEntry = 7 // optional bool + MessageOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.FieldOptions. +const ( + FieldOptions_Ctype = 1 // optional google.protobuf.FieldOptions.CType + FieldOptions_Packed = 2 // optional bool + FieldOptions_Jstype = 6 // optional google.protobuf.FieldOptions.JSType + FieldOptions_Lazy = 5 // optional bool + FieldOptions_Deprecated = 3 // optional bool + FieldOptions_Weak = 10 // optional bool + FieldOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.OneofOptions. +const ( + OneofOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.EnumOptions. +const ( + EnumOptions_AllowAlias = 2 // optional bool + EnumOptions_Deprecated = 3 // optional bool + EnumOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.EnumValueOptions. +const ( + EnumValueOptions_Deprecated = 1 // optional bool + EnumValueOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.ServiceOptions. +const ( + ServiceOptions_Deprecated = 33 // optional bool + ServiceOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.MethodOptions. +const ( + MethodOptions_Deprecated = 33 // optional bool + MethodOptions_IdempotencyLevel = 34 // optional google.protobuf.MethodOptions.IdempotencyLevel + MethodOptions_UninterpretedOption = 999 // repeated google.protobuf.UninterpretedOption +) + +// Field numbers for google.protobuf.UninterpretedOption. +const ( + UninterpretedOption_Name = 2 // repeated google.protobuf.UninterpretedOption.NamePart + UninterpretedOption_IdentifierValue = 3 // optional string + UninterpretedOption_PositiveIntValue = 4 // optional uint64 + UninterpretedOption_NegativeIntValue = 5 // optional int64 + UninterpretedOption_DoubleValue = 6 // optional double + UninterpretedOption_StringValue = 7 // optional bytes + UninterpretedOption_AggregateValue = 8 // optional string +) + +// Field numbers for google.protobuf.UninterpretedOption.NamePart. +const ( + UninterpretedOption_NamePart_NamePart = 1 // required string + UninterpretedOption_NamePart_IsExtension = 2 // required bool +) + +// Field numbers for google.protobuf.SourceCodeInfo. +const ( + SourceCodeInfo_Location = 1 // repeated google.protobuf.SourceCodeInfo.Location +) + +// Field numbers for google.protobuf.SourceCodeInfo.Location. +const ( + SourceCodeInfo_Location_Path = 1 // repeated int32 + SourceCodeInfo_Location_Span = 2 // repeated int32 + SourceCodeInfo_Location_LeadingComments = 3 // optional string + SourceCodeInfo_Location_TrailingComments = 4 // optional string + SourceCodeInfo_Location_LeadingDetachedComments = 6 // repeated string +) + +// Field numbers for google.protobuf.GeneratedCodeInfo. +const ( + GeneratedCodeInfo_Annotation = 1 // repeated google.protobuf.GeneratedCodeInfo.Annotation +) + +// Field numbers for google.protobuf.GeneratedCodeInfo.Annotation. +const ( + GeneratedCodeInfo_Annotation_Path = 1 // repeated int32 + GeneratedCodeInfo_Annotation_SourceFile = 2 // optional string + GeneratedCodeInfo_Annotation_Begin = 3 // optional int32 + GeneratedCodeInfo_Annotation_End = 4 // optional int32 +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/doc.go b/vendor/google.golang.org/protobuf/internal/fieldnum/doc.go new file mode 100644 index 00000000..e5978859 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/doc.go @@ -0,0 +1,7 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package fieldnum contains constants for field numbers of fields in messages +// declared in descriptor.proto and any of the well-known types. +package fieldnum diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/duration_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/duration_gen.go new file mode 100644 index 00000000..8816c735 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/duration_gen.go @@ -0,0 +1,13 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Duration. +const ( + Duration_Seconds = 1 // optional int64 + Duration_Nanos = 2 // optional int32 +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/empty_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/empty_gen.go new file mode 100644 index 00000000..b5130a6d --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/empty_gen.go @@ -0,0 +1,10 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Empty. +const () diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/field_mask_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/field_mask_gen.go new file mode 100644 index 00000000..7e3bfa27 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/field_mask_gen.go @@ -0,0 +1,12 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.FieldMask. +const ( + FieldMask_Paths = 1 // repeated string +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/source_context_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/source_context_gen.go new file mode 100644 index 00000000..241972b1 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/source_context_gen.go @@ -0,0 +1,12 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.SourceContext. +const ( + SourceContext_FileName = 1 // optional string +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/struct_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/struct_gen.go new file mode 100644 index 00000000..c460aab4 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/struct_gen.go @@ -0,0 +1,33 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Struct. +const ( + Struct_Fields = 1 // repeated google.protobuf.Struct.FieldsEntry +) + +// Field numbers for google.protobuf.Struct.FieldsEntry. +const ( + Struct_FieldsEntry_Key = 1 // optional string + Struct_FieldsEntry_Value = 2 // optional google.protobuf.Value +) + +// Field numbers for google.protobuf.Value. +const ( + Value_NullValue = 1 // optional google.protobuf.NullValue + Value_NumberValue = 2 // optional double + Value_StringValue = 3 // optional string + Value_BoolValue = 4 // optional bool + Value_StructValue = 5 // optional google.protobuf.Struct + Value_ListValue = 6 // optional google.protobuf.ListValue +) + +// Field numbers for google.protobuf.ListValue. +const ( + ListValue_Values = 1 // repeated google.protobuf.Value +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/timestamp_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/timestamp_gen.go new file mode 100644 index 00000000..b4346fba --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/timestamp_gen.go @@ -0,0 +1,13 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Timestamp. +const ( + Timestamp_Seconds = 1 // optional int64 + Timestamp_Nanos = 2 // optional int32 +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/type_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/type_gen.go new file mode 100644 index 00000000..b392e959 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/type_gen.go @@ -0,0 +1,53 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.Type. +const ( + Type_Name = 1 // optional string + Type_Fields = 2 // repeated google.protobuf.Field + Type_Oneofs = 3 // repeated string + Type_Options = 4 // repeated google.protobuf.Option + Type_SourceContext = 5 // optional google.protobuf.SourceContext + Type_Syntax = 6 // optional google.protobuf.Syntax +) + +// Field numbers for google.protobuf.Field. +const ( + Field_Kind = 1 // optional google.protobuf.Field.Kind + Field_Cardinality = 2 // optional google.protobuf.Field.Cardinality + Field_Number = 3 // optional int32 + Field_Name = 4 // optional string + Field_TypeUrl = 6 // optional string + Field_OneofIndex = 7 // optional int32 + Field_Packed = 8 // optional bool + Field_Options = 9 // repeated google.protobuf.Option + Field_JsonName = 10 // optional string + Field_DefaultValue = 11 // optional string +) + +// Field numbers for google.protobuf.Enum. +const ( + Enum_Name = 1 // optional string + Enum_Enumvalue = 2 // repeated google.protobuf.EnumValue + Enum_Options = 3 // repeated google.protobuf.Option + Enum_SourceContext = 4 // optional google.protobuf.SourceContext + Enum_Syntax = 5 // optional google.protobuf.Syntax +) + +// Field numbers for google.protobuf.EnumValue. +const ( + EnumValue_Name = 1 // optional string + EnumValue_Number = 2 // optional int32 + EnumValue_Options = 3 // repeated google.protobuf.Option +) + +// Field numbers for google.protobuf.Option. +const ( + Option_Name = 1 // optional string + Option_Value = 2 // optional google.protobuf.Any +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/wrappers_gen.go b/vendor/google.golang.org/protobuf/internal/fieldnum/wrappers_gen.go new file mode 100644 index 00000000..42f846a9 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldnum/wrappers_gen.go @@ -0,0 +1,52 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package fieldnum + +// Field numbers for google.protobuf.DoubleValue. +const ( + DoubleValue_Value = 1 // optional double +) + +// Field numbers for google.protobuf.FloatValue. +const ( + FloatValue_Value = 1 // optional float +) + +// Field numbers for google.protobuf.Int64Value. +const ( + Int64Value_Value = 1 // optional int64 +) + +// Field numbers for google.protobuf.UInt64Value. +const ( + UInt64Value_Value = 1 // optional uint64 +) + +// Field numbers for google.protobuf.Int32Value. +const ( + Int32Value_Value = 1 // optional int32 +) + +// Field numbers for google.protobuf.UInt32Value. +const ( + UInt32Value_Value = 1 // optional uint32 +) + +// Field numbers for google.protobuf.BoolValue. +const ( + BoolValue_Value = 1 // optional bool +) + +// Field numbers for google.protobuf.StringValue. +const ( + StringValue_Value = 1 // optional string +) + +// Field numbers for google.protobuf.BytesValue. +const ( + BytesValue_Value = 1 // optional bytes +) diff --git a/vendor/google.golang.org/protobuf/internal/fieldsort/fieldsort.go b/vendor/google.golang.org/protobuf/internal/fieldsort/fieldsort.go new file mode 100644 index 00000000..1cb2d74f --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/fieldsort/fieldsort.go @@ -0,0 +1,40 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package fieldsort defines an ordering of fields. +// +// The ordering defined by this package matches the historic behavior of the proto +// package, placing extensions first and oneofs last. +// +// There is no guarantee about stability of the wire encoding, and users should not +// depend on the order defined in this package as it is subject to change without +// notice. +package fieldsort + +import ( + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Less returns true if field a comes before field j in ordered wire marshal output. +func Less(a, b protoreflect.FieldDescriptor) bool { + ea := a.IsExtension() + eb := b.IsExtension() + oa := a.ContainingOneof() + ob := b.ContainingOneof() + switch { + case ea != eb: + return ea + case oa != nil && ob != nil: + if oa == ob { + return a.Number() < b.Number() + } + return oa.Index() < ob.Index() + case oa != nil: + return false + case ob != nil: + return true + default: + return a.Number() < b.Number() + } +} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/build.go b/vendor/google.golang.org/protobuf/internal/filedesc/build.go new file mode 100644 index 00000000..462d384e --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/build.go @@ -0,0 +1,155 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package filedesc provides functionality for constructing descriptors. +package filedesc + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/fieldnum" + "google.golang.org/protobuf/reflect/protoreflect" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" +) + +// Builder construct a protoreflect.FileDescriptor from the raw descriptor. +type Builder struct { + // GoPackagePath is the Go package path that is invoking this builder. + GoPackagePath string + + // RawDescriptor is the wire-encoded bytes of FileDescriptorProto + // and must be populated. + RawDescriptor []byte + + // NumEnums is the total number of enums declared in the file. + NumEnums int32 + // NumMessages is the total number of messages declared in the file. + // It includes the implicit message declarations for map entries. + NumMessages int32 + // NumExtensions is the total number of extensions declared in the file. + NumExtensions int32 + // NumServices is the total number of services declared in the file. + NumServices int32 + + // TypeResolver resolves extension field types for descriptor options. + // If nil, it uses protoregistry.GlobalTypes. + TypeResolver interface { + preg.ExtensionTypeResolver + } + + // FileRegistry is use to lookup file, enum, and message dependencies. + // Once constructed, the file descriptor is registered here. + // If nil, it uses protoregistry.GlobalFiles. + FileRegistry interface { + FindFileByPath(string) (protoreflect.FileDescriptor, error) + FindDescriptorByName(pref.FullName) (pref.Descriptor, error) + RegisterFile(pref.FileDescriptor) error + } +} + +// resolverByIndex is an interface Builder.FileRegistry may implement. +// If so, it permits looking up an enum or message dependency based on the +// sub-list and element index into filetype.Builder.DependencyIndexes. +type resolverByIndex interface { + FindEnumByIndex(int32, int32, []Enum, []Message) pref.EnumDescriptor + FindMessageByIndex(int32, int32, []Enum, []Message) pref.MessageDescriptor +} + +// Indexes of each sub-list in filetype.Builder.DependencyIndexes. +const ( + listFieldDeps int32 = iota + listExtTargets + listExtDeps + listMethInDeps + listMethOutDeps +) + +// Out is the output of the Builder. +type Out struct { + File pref.FileDescriptor + + // Enums is all enum descriptors in "flattened ordering". + Enums []Enum + // Messages is all message descriptors in "flattened ordering". + // It includes the implicit message declarations for map entries. + Messages []Message + // Extensions is all extension descriptors in "flattened ordering". + Extensions []Extension + // Service is all service descriptors in "flattened ordering". + Services []Service +} + +// Build constructs a FileDescriptor given the parameters set in Builder. +// It assumes that the inputs are well-formed and panics if any inconsistencies +// are encountered. +// +// If NumEnums+NumMessages+NumExtensions+NumServices is zero, +// then Build automatically derives them from the raw descriptor. +func (db Builder) Build() (out Out) { + // Populate the counts if uninitialized. + if db.NumEnums+db.NumMessages+db.NumExtensions+db.NumServices == 0 { + db.unmarshalCounts(db.RawDescriptor, true) + } + + // Initialize resolvers and registries if unpopulated. + if db.TypeResolver == nil { + db.TypeResolver = preg.GlobalTypes + } + if db.FileRegistry == nil { + db.FileRegistry = preg.GlobalFiles + } + + fd := newRawFile(db) + out.File = fd + out.Enums = fd.allEnums + out.Messages = fd.allMessages + out.Extensions = fd.allExtensions + out.Services = fd.allServices + + if err := db.FileRegistry.RegisterFile(fd); err != nil { + panic(err) + } + return out +} + +// unmarshalCounts counts the number of enum, message, extension, and service +// declarations in the raw message, which is either a FileDescriptorProto +// or a MessageDescriptorProto depending on whether isFile is set. +func (db *Builder) unmarshalCounts(b []byte, isFile bool) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + if isFile { + switch num { + case fieldnum.FileDescriptorProto_EnumType: + db.NumEnums++ + case fieldnum.FileDescriptorProto_MessageType: + db.unmarshalCounts(v, false) + db.NumMessages++ + case fieldnum.FileDescriptorProto_Extension: + db.NumExtensions++ + case fieldnum.FileDescriptorProto_Service: + db.NumServices++ + } + } else { + switch num { + case fieldnum.DescriptorProto_EnumType: + db.NumEnums++ + case fieldnum.DescriptorProto_NestedType: + db.unmarshalCounts(v, false) + db.NumMessages++ + case fieldnum.DescriptorProto_Extension: + db.NumExtensions++ + } + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go new file mode 100644 index 00000000..a9fe07c2 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go @@ -0,0 +1,598 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "bytes" + "fmt" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/internal/descfmt" + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/encoding/defval" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/strs" + pref "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// The types in this file may have a suffix: +// • L0: Contains fields common to all descriptors (except File) and +// must be initialized up front. +// • L1: Contains fields specific to a descriptor and +// must be initialized up front. +// • L2: Contains fields that are lazily initialized when constructing +// from the raw file descriptor. When constructing as a literal, the L2 +// fields must be initialized up front. +// +// The types are exported so that packages like reflect/protodesc can +// directly construct descriptors. + +type ( + File struct { + fileRaw + L1 FileL1 + + once uint32 // atomically set if L2 is valid + mu sync.Mutex // protects L2 + L2 *FileL2 + } + FileL1 struct { + Syntax pref.Syntax + Path string + Package pref.FullName + + Enums Enums + Messages Messages + Extensions Extensions + Services Services + } + FileL2 struct { + Options func() pref.ProtoMessage + Imports FileImports + Locations SourceLocations + } +) + +func (fd *File) ParentFile() pref.FileDescriptor { return fd } +func (fd *File) Parent() pref.Descriptor { return nil } +func (fd *File) Index() int { return 0 } +func (fd *File) Syntax() pref.Syntax { return fd.L1.Syntax } +func (fd *File) Name() pref.Name { return fd.L1.Package.Name() } +func (fd *File) FullName() pref.FullName { return fd.L1.Package } +func (fd *File) IsPlaceholder() bool { return false } +func (fd *File) Options() pref.ProtoMessage { + if f := fd.lazyInit().Options; f != nil { + return f() + } + return descopts.File +} +func (fd *File) Path() string { return fd.L1.Path } +func (fd *File) Package() pref.FullName { return fd.L1.Package } +func (fd *File) Imports() pref.FileImports { return &fd.lazyInit().Imports } +func (fd *File) Enums() pref.EnumDescriptors { return &fd.L1.Enums } +func (fd *File) Messages() pref.MessageDescriptors { return &fd.L1.Messages } +func (fd *File) Extensions() pref.ExtensionDescriptors { return &fd.L1.Extensions } +func (fd *File) Services() pref.ServiceDescriptors { return &fd.L1.Services } +func (fd *File) SourceLocations() pref.SourceLocations { return &fd.L2.Locations } +func (fd *File) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) } +func (fd *File) ProtoType(pref.FileDescriptor) {} +func (fd *File) ProtoInternal(pragma.DoNotImplement) {} + +func (fd *File) lazyInit() *FileL2 { + if atomic.LoadUint32(&fd.once) == 0 { + fd.lazyInitOnce() + } + return fd.L2 +} + +func (fd *File) lazyInitOnce() { + fd.mu.Lock() + if fd.L2 == nil { + fd.lazyRawInit() // recursively initializes all L2 structures + } + atomic.StoreUint32(&fd.once, 1) + fd.mu.Unlock() +} + +// ProtoLegacyRawDesc is a pseudo-internal API for allowing the v1 code +// to be able to retrieve the raw descriptor. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (fd *File) ProtoLegacyRawDesc() []byte { + return fd.builder.RawDescriptor +} + +// GoPackagePath is a pseudo-internal API for determining the Go package path +// that this file descriptor is declared in. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (fd *File) GoPackagePath() string { + return fd.builder.GoPackagePath +} + +type ( + Enum struct { + Base + L1 EnumL1 + L2 *EnumL2 // protected by fileDesc.once + } + EnumL1 struct { + eagerValues bool // controls whether EnumL2.Values is already populated + } + EnumL2 struct { + Options func() pref.ProtoMessage + Values EnumValues + ReservedNames Names + ReservedRanges EnumRanges + } + + EnumValue struct { + Base + L1 EnumValueL1 + } + EnumValueL1 struct { + Options func() pref.ProtoMessage + Number pref.EnumNumber + } +) + +func (ed *Enum) Options() pref.ProtoMessage { + if f := ed.lazyInit().Options; f != nil { + return f() + } + return descopts.Enum +} +func (ed *Enum) Values() pref.EnumValueDescriptors { + if ed.L1.eagerValues { + return &ed.L2.Values + } + return &ed.lazyInit().Values +} +func (ed *Enum) ReservedNames() pref.Names { return &ed.lazyInit().ReservedNames } +func (ed *Enum) ReservedRanges() pref.EnumRanges { return &ed.lazyInit().ReservedRanges } +func (ed *Enum) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) } +func (ed *Enum) ProtoType(pref.EnumDescriptor) {} +func (ed *Enum) lazyInit() *EnumL2 { + ed.L0.ParentFile.lazyInit() // implicitly initializes L2 + return ed.L2 +} + +func (ed *EnumValue) Options() pref.ProtoMessage { + if f := ed.L1.Options; f != nil { + return f() + } + return descopts.EnumValue +} +func (ed *EnumValue) Number() pref.EnumNumber { return ed.L1.Number } +func (ed *EnumValue) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) } +func (ed *EnumValue) ProtoType(pref.EnumValueDescriptor) {} + +type ( + Message struct { + Base + L1 MessageL1 + L2 *MessageL2 // protected by fileDesc.once + } + MessageL1 struct { + Enums Enums + Messages Messages + Extensions Extensions + IsMapEntry bool // promoted from google.protobuf.MessageOptions + IsMessageSet bool // promoted from google.protobuf.MessageOptions + } + MessageL2 struct { + Options func() pref.ProtoMessage + Fields Fields + Oneofs Oneofs + ReservedNames Names + ReservedRanges FieldRanges + RequiredNumbers FieldNumbers // must be consistent with Fields.Cardinality + ExtensionRanges FieldRanges + ExtensionRangeOptions []func() pref.ProtoMessage // must be same length as ExtensionRanges + } + + Field struct { + Base + L1 FieldL1 + } + FieldL1 struct { + Options func() pref.ProtoMessage + Number pref.FieldNumber + Cardinality pref.Cardinality // must be consistent with Message.RequiredNumbers + Kind pref.Kind + JSONName jsonName + IsWeak bool // promoted from google.protobuf.FieldOptions + HasPacked bool // promoted from google.protobuf.FieldOptions + IsPacked bool // promoted from google.protobuf.FieldOptions + HasEnforceUTF8 bool // promoted from google.protobuf.FieldOptions + EnforceUTF8 bool // promoted from google.protobuf.FieldOptions + Default defaultValue + ContainingOneof pref.OneofDescriptor // must be consistent with Message.Oneofs.Fields + Enum pref.EnumDescriptor + Message pref.MessageDescriptor + } + + Oneof struct { + Base + L1 OneofL1 + } + OneofL1 struct { + Options func() pref.ProtoMessage + Fields OneofFields // must be consistent with Message.Fields.ContainingOneof + } +) + +func (md *Message) Options() pref.ProtoMessage { + if f := md.lazyInit().Options; f != nil { + return f() + } + return descopts.Message +} +func (md *Message) IsMapEntry() bool { return md.L1.IsMapEntry } +func (md *Message) Fields() pref.FieldDescriptors { return &md.lazyInit().Fields } +func (md *Message) Oneofs() pref.OneofDescriptors { return &md.lazyInit().Oneofs } +func (md *Message) ReservedNames() pref.Names { return &md.lazyInit().ReservedNames } +func (md *Message) ReservedRanges() pref.FieldRanges { return &md.lazyInit().ReservedRanges } +func (md *Message) RequiredNumbers() pref.FieldNumbers { return &md.lazyInit().RequiredNumbers } +func (md *Message) ExtensionRanges() pref.FieldRanges { return &md.lazyInit().ExtensionRanges } +func (md *Message) ExtensionRangeOptions(i int) pref.ProtoMessage { + if f := md.lazyInit().ExtensionRangeOptions[i]; f != nil { + return f() + } + return descopts.ExtensionRange +} +func (md *Message) Enums() pref.EnumDescriptors { return &md.L1.Enums } +func (md *Message) Messages() pref.MessageDescriptors { return &md.L1.Messages } +func (md *Message) Extensions() pref.ExtensionDescriptors { return &md.L1.Extensions } +func (md *Message) ProtoType(pref.MessageDescriptor) {} +func (md *Message) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) } +func (md *Message) lazyInit() *MessageL2 { + md.L0.ParentFile.lazyInit() // implicitly initializes L2 + return md.L2 +} + +// IsMessageSet is a pseudo-internal API for checking whether a message +// should serialize in the proto1 message format. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (md *Message) IsMessageSet() bool { + return md.L1.IsMessageSet +} + +func (fd *Field) Options() pref.ProtoMessage { + if f := fd.L1.Options; f != nil { + return f() + } + return descopts.Field +} +func (fd *Field) Number() pref.FieldNumber { return fd.L1.Number } +func (fd *Field) Cardinality() pref.Cardinality { return fd.L1.Cardinality } +func (fd *Field) Kind() pref.Kind { return fd.L1.Kind } +func (fd *Field) HasJSONName() bool { return fd.L1.JSONName.has } +func (fd *Field) JSONName() string { return fd.L1.JSONName.get(fd) } +func (fd *Field) IsPacked() bool { + if !fd.L1.HasPacked && fd.L0.ParentFile.L1.Syntax != pref.Proto2 && fd.L1.Cardinality == pref.Repeated { + switch fd.L1.Kind { + case pref.StringKind, pref.BytesKind, pref.MessageKind, pref.GroupKind: + default: + return true + } + } + return fd.L1.IsPacked +} +func (fd *Field) IsExtension() bool { return false } +func (fd *Field) IsWeak() bool { return fd.L1.IsWeak } +func (fd *Field) IsList() bool { return fd.Cardinality() == pref.Repeated && !fd.IsMap() } +func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() } +func (fd *Field) MapKey() pref.FieldDescriptor { + if !fd.IsMap() { + return nil + } + return fd.Message().Fields().ByNumber(1) +} +func (fd *Field) MapValue() pref.FieldDescriptor { + if !fd.IsMap() { + return nil + } + return fd.Message().Fields().ByNumber(2) +} +func (fd *Field) HasDefault() bool { return fd.L1.Default.has } +func (fd *Field) Default() pref.Value { return fd.L1.Default.get(fd) } +func (fd *Field) DefaultEnumValue() pref.EnumValueDescriptor { return fd.L1.Default.enum } +func (fd *Field) ContainingOneof() pref.OneofDescriptor { return fd.L1.ContainingOneof } +func (fd *Field) ContainingMessage() pref.MessageDescriptor { + return fd.L0.Parent.(pref.MessageDescriptor) +} +func (fd *Field) Enum() pref.EnumDescriptor { + return fd.L1.Enum +} +func (fd *Field) Message() pref.MessageDescriptor { + if fd.L1.IsWeak { + if d, _ := protoregistry.GlobalFiles.FindDescriptorByName(fd.L1.Message.FullName()); d != nil { + return d.(pref.MessageDescriptor) + } + } + return fd.L1.Message +} +func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) } +func (fd *Field) ProtoType(pref.FieldDescriptor) {} + +// EnforceUTF8 is a pseudo-internal API to determine whether to enforce UTF-8 +// validation for the string field. This exists for Google-internal use only +// since proto3 did not enforce UTF-8 validity prior to the open-source release. +// If this method does not exist, the default is to enforce valid UTF-8. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (fd *Field) EnforceUTF8() bool { + if fd.L1.HasEnforceUTF8 { + return fd.L1.EnforceUTF8 + } + return fd.L0.ParentFile.L1.Syntax == pref.Proto3 +} + +func (od *Oneof) Options() pref.ProtoMessage { + if f := od.L1.Options; f != nil { + return f() + } + return descopts.Oneof +} +func (od *Oneof) Fields() pref.FieldDescriptors { return &od.L1.Fields } +func (od *Oneof) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, od) } +func (od *Oneof) ProtoType(pref.OneofDescriptor) {} + +type ( + Extension struct { + Base + L1 ExtensionL1 + L2 *ExtensionL2 // protected by fileDesc.once + } + ExtensionL1 struct { + Number pref.FieldNumber + Extendee pref.MessageDescriptor + Cardinality pref.Cardinality + Kind pref.Kind + } + ExtensionL2 struct { + Options func() pref.ProtoMessage + JSONName jsonName + IsPacked bool // promoted from google.protobuf.FieldOptions + Default defaultValue + Enum pref.EnumDescriptor + Message pref.MessageDescriptor + } +) + +func (xd *Extension) Options() pref.ProtoMessage { + if f := xd.lazyInit().Options; f != nil { + return f() + } + return descopts.Field +} +func (xd *Extension) Number() pref.FieldNumber { return xd.L1.Number } +func (xd *Extension) Cardinality() pref.Cardinality { return xd.L1.Cardinality } +func (xd *Extension) Kind() pref.Kind { return xd.L1.Kind } +func (xd *Extension) HasJSONName() bool { return xd.lazyInit().JSONName.has } +func (xd *Extension) JSONName() string { return xd.lazyInit().JSONName.get(xd) } +func (xd *Extension) IsPacked() bool { return xd.lazyInit().IsPacked } +func (xd *Extension) IsExtension() bool { return true } +func (xd *Extension) IsWeak() bool { return false } +func (xd *Extension) IsList() bool { return xd.Cardinality() == pref.Repeated } +func (xd *Extension) IsMap() bool { return false } +func (xd *Extension) MapKey() pref.FieldDescriptor { return nil } +func (xd *Extension) MapValue() pref.FieldDescriptor { return nil } +func (xd *Extension) HasDefault() bool { return xd.lazyInit().Default.has } +func (xd *Extension) Default() pref.Value { return xd.lazyInit().Default.get(xd) } +func (xd *Extension) DefaultEnumValue() pref.EnumValueDescriptor { return xd.lazyInit().Default.enum } +func (xd *Extension) ContainingOneof() pref.OneofDescriptor { return nil } +func (xd *Extension) ContainingMessage() pref.MessageDescriptor { return xd.L1.Extendee } +func (xd *Extension) Enum() pref.EnumDescriptor { return xd.lazyInit().Enum } +func (xd *Extension) Message() pref.MessageDescriptor { return xd.lazyInit().Message } +func (xd *Extension) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, xd) } +func (xd *Extension) ProtoType(pref.FieldDescriptor) {} +func (xd *Extension) ProtoInternal(pragma.DoNotImplement) {} +func (xd *Extension) lazyInit() *ExtensionL2 { + xd.L0.ParentFile.lazyInit() // implicitly initializes L2 + return xd.L2 +} + +type ( + Service struct { + Base + L1 ServiceL1 + L2 *ServiceL2 // protected by fileDesc.once + } + ServiceL1 struct{} + ServiceL2 struct { + Options func() pref.ProtoMessage + Methods Methods + } + + Method struct { + Base + L1 MethodL1 + } + MethodL1 struct { + Options func() pref.ProtoMessage + Input pref.MessageDescriptor + Output pref.MessageDescriptor + IsStreamingClient bool + IsStreamingServer bool + } +) + +func (sd *Service) Options() pref.ProtoMessage { + if f := sd.lazyInit().Options; f != nil { + return f() + } + return descopts.Service +} +func (sd *Service) Methods() pref.MethodDescriptors { return &sd.lazyInit().Methods } +func (sd *Service) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, sd) } +func (sd *Service) ProtoType(pref.ServiceDescriptor) {} +func (sd *Service) ProtoInternal(pragma.DoNotImplement) {} +func (sd *Service) lazyInit() *ServiceL2 { + sd.L0.ParentFile.lazyInit() // implicitly initializes L2 + return sd.L2 +} + +func (md *Method) Options() pref.ProtoMessage { + if f := md.L1.Options; f != nil { + return f() + } + return descopts.Method +} +func (md *Method) Input() pref.MessageDescriptor { return md.L1.Input } +func (md *Method) Output() pref.MessageDescriptor { return md.L1.Output } +func (md *Method) IsStreamingClient() bool { return md.L1.IsStreamingClient } +func (md *Method) IsStreamingServer() bool { return md.L1.IsStreamingServer } +func (md *Method) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) } +func (md *Method) ProtoType(pref.MethodDescriptor) {} +func (md *Method) ProtoInternal(pragma.DoNotImplement) {} + +// Surrogate files are can be used to create standalone descriptors +// where the syntax is only information derived from the parent file. +var ( + SurrogateProto2 = &File{L1: FileL1{Syntax: pref.Proto2}, L2: &FileL2{}} + SurrogateProto3 = &File{L1: FileL1{Syntax: pref.Proto3}, L2: &FileL2{}} +) + +type ( + Base struct { + L0 BaseL0 + } + BaseL0 struct { + FullName pref.FullName // must be populated + ParentFile *File // must be populated + Parent pref.Descriptor + Index int + } +) + +func (d *Base) Name() pref.Name { return d.L0.FullName.Name() } +func (d *Base) FullName() pref.FullName { return d.L0.FullName } +func (d *Base) ParentFile() pref.FileDescriptor { + if d.L0.ParentFile == SurrogateProto2 || d.L0.ParentFile == SurrogateProto3 { + return nil // surrogate files are not real parents + } + return d.L0.ParentFile +} +func (d *Base) Parent() pref.Descriptor { return d.L0.Parent } +func (d *Base) Index() int { return d.L0.Index } +func (d *Base) Syntax() pref.Syntax { return d.L0.ParentFile.Syntax() } +func (d *Base) IsPlaceholder() bool { return false } +func (d *Base) ProtoInternal(pragma.DoNotImplement) {} + +type jsonName struct { + has bool + once sync.Once + name string +} + +// Init initializes the name. It is exported for use by other internal packages. +func (js *jsonName) Init(s string) { + js.has = true + js.name = s +} + +func (js *jsonName) get(fd pref.FieldDescriptor) string { + if !js.has { + js.once.Do(func() { + js.name = strs.JSONCamelCase(string(fd.Name())) + }) + } + return js.name +} + +func DefaultValue(v pref.Value, ev pref.EnumValueDescriptor) defaultValue { + dv := defaultValue{has: v.IsValid(), val: v, enum: ev} + if b, ok := v.Interface().([]byte); ok { + // Store a copy of the default bytes, so that we can detect + // accidental mutations of the original value. + dv.bytes = append([]byte(nil), b...) + } + return dv +} + +func unmarshalDefault(b []byte, k pref.Kind, pf *File, ed pref.EnumDescriptor) defaultValue { + var evs pref.EnumValueDescriptors + if k == pref.EnumKind { + // If the enum is declared within the same file, be careful not to + // blindly call the Values method, lest we bind ourselves in a deadlock. + if e, ok := ed.(*Enum); ok && e.L0.ParentFile == pf { + evs = &e.L2.Values + } else { + evs = ed.Values() + } + + // If we are unable to resolve the enum dependency, use a placeholder + // enum value since we will not be able to parse the default value. + if ed.IsPlaceholder() && pref.Name(b).IsValid() { + v := pref.ValueOfEnum(0) + ev := PlaceholderEnumValue(ed.FullName().Parent().Append(pref.Name(b))) + return DefaultValue(v, ev) + } + } + + v, ev, err := defval.Unmarshal(string(b), k, evs, defval.Descriptor) + if err != nil { + panic(err) + } + return DefaultValue(v, ev) +} + +type defaultValue struct { + has bool + val pref.Value + enum pref.EnumValueDescriptor + bytes []byte +} + +func (dv *defaultValue) get(fd pref.FieldDescriptor) pref.Value { + // Return the zero value as the default if unpopulated. + if !dv.has { + if fd.Cardinality() == pref.Repeated { + return pref.Value{} + } + switch fd.Kind() { + case pref.BoolKind: + return pref.ValueOfBool(false) + case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: + return pref.ValueOfInt32(0) + case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: + return pref.ValueOfInt64(0) + case pref.Uint32Kind, pref.Fixed32Kind: + return pref.ValueOfUint32(0) + case pref.Uint64Kind, pref.Fixed64Kind: + return pref.ValueOfUint64(0) + case pref.FloatKind: + return pref.ValueOfFloat32(0) + case pref.DoubleKind: + return pref.ValueOfFloat64(0) + case pref.StringKind: + return pref.ValueOfString("") + case pref.BytesKind: + return pref.ValueOfBytes(nil) + case pref.EnumKind: + if evs := fd.Enum().Values(); evs.Len() > 0 { + return pref.ValueOfEnum(evs.Get(0).Number()) + } + return pref.ValueOfEnum(0) + } + } + + if len(dv.bytes) > 0 && !bytes.Equal(dv.bytes, dv.val.Bytes()) { + // TODO: Avoid panic if we're running with the race detector + // and instead spawn a goroutine that periodically resets + // this value back to the original to induce a race. + panic("detected mutation on the default bytes") + } + return dv.val +} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go new file mode 100644 index 00000000..c0cddf86 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go @@ -0,0 +1,471 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/fieldnum" + "google.golang.org/protobuf/internal/strs" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// fileRaw is a data struct used when initializing a file descriptor from +// a raw FileDescriptorProto. +type fileRaw struct { + builder Builder + allEnums []Enum + allMessages []Message + allExtensions []Extension + allServices []Service +} + +func newRawFile(db Builder) *File { + fd := &File{fileRaw: fileRaw{builder: db}} + fd.initDecls(db.NumEnums, db.NumMessages, db.NumExtensions, db.NumServices) + fd.unmarshalSeed(db.RawDescriptor) + + // Extended message targets are eagerly resolved since registration + // needs this information at program init time. + for i := range fd.allExtensions { + xd := &fd.allExtensions[i] + xd.L1.Extendee = fd.resolveMessageDependency(xd.L1.Extendee, listExtTargets, int32(i)) + } + + fd.checkDecls() + return fd +} + +// initDecls pre-allocates slices for the exact number of enums, messages +// (including map entries), extensions, and services declared in the proto file. +// This is done to avoid regrowing the slice, which would change the address +// for any previously seen declaration. +// +// The alloc methods "allocates" slices by pulling from the capacity. +func (fd *File) initDecls(numEnums, numMessages, numExtensions, numServices int32) { + fd.allEnums = make([]Enum, 0, numEnums) + fd.allMessages = make([]Message, 0, numMessages) + fd.allExtensions = make([]Extension, 0, numExtensions) + fd.allServices = make([]Service, 0, numServices) +} + +func (fd *File) allocEnums(n int) []Enum { + total := len(fd.allEnums) + es := fd.allEnums[total : total+n] + fd.allEnums = fd.allEnums[:total+n] + return es +} +func (fd *File) allocMessages(n int) []Message { + total := len(fd.allMessages) + ms := fd.allMessages[total : total+n] + fd.allMessages = fd.allMessages[:total+n] + return ms +} +func (fd *File) allocExtensions(n int) []Extension { + total := len(fd.allExtensions) + xs := fd.allExtensions[total : total+n] + fd.allExtensions = fd.allExtensions[:total+n] + return xs +} +func (fd *File) allocServices(n int) []Service { + total := len(fd.allServices) + xs := fd.allServices[total : total+n] + fd.allServices = fd.allServices[:total+n] + return xs +} + +// checkDecls performs a sanity check that the expected number of expected +// declarations matches the number that were found in the descriptor proto. +func (fd *File) checkDecls() { + switch { + case len(fd.allEnums) != cap(fd.allEnums): + case len(fd.allMessages) != cap(fd.allMessages): + case len(fd.allExtensions) != cap(fd.allExtensions): + case len(fd.allServices) != cap(fd.allServices): + default: + return + } + panic("mismatching cardinality") +} + +func (fd *File) unmarshalSeed(b []byte) { + sb := getBuilder() + defer putBuilder(sb) + + var prevField pref.FieldNumber + var numEnums, numMessages, numExtensions, numServices int + var posEnums, posMessages, posExtensions, posServices int + b0 := b + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.FileDescriptorProto_Syntax: + switch string(v) { + case "proto2": + fd.L1.Syntax = pref.Proto2 + case "proto3": + fd.L1.Syntax = pref.Proto3 + default: + panic("invalid syntax") + } + case fieldnum.FileDescriptorProto_Name: + fd.L1.Path = sb.MakeString(v) + case fieldnum.FileDescriptorProto_Package: + fd.L1.Package = pref.FullName(sb.MakeString(v)) + case fieldnum.FileDescriptorProto_EnumType: + if prevField != fieldnum.FileDescriptorProto_EnumType { + if numEnums > 0 { + panic("non-contiguous repeated field") + } + posEnums = len(b0) - len(b) - n - m + } + numEnums++ + case fieldnum.FileDescriptorProto_MessageType: + if prevField != fieldnum.FileDescriptorProto_MessageType { + if numMessages > 0 { + panic("non-contiguous repeated field") + } + posMessages = len(b0) - len(b) - n - m + } + numMessages++ + case fieldnum.FileDescriptorProto_Extension: + if prevField != fieldnum.FileDescriptorProto_Extension { + if numExtensions > 0 { + panic("non-contiguous repeated field") + } + posExtensions = len(b0) - len(b) - n - m + } + numExtensions++ + case fieldnum.FileDescriptorProto_Service: + if prevField != fieldnum.FileDescriptorProto_Service { + if numServices > 0 { + panic("non-contiguous repeated field") + } + posServices = len(b0) - len(b) - n - m + } + numServices++ + } + prevField = num + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + prevField = -1 // ignore known field numbers of unknown wire type + } + } + + // If syntax is missing, it is assumed to be proto2. + if fd.L1.Syntax == 0 { + fd.L1.Syntax = pref.Proto2 + } + + // Must allocate all declarations before parsing each descriptor type + // to ensure we handled all descriptors in "flattened ordering". + if numEnums > 0 { + fd.L1.Enums.List = fd.allocEnums(numEnums) + } + if numMessages > 0 { + fd.L1.Messages.List = fd.allocMessages(numMessages) + } + if numExtensions > 0 { + fd.L1.Extensions.List = fd.allocExtensions(numExtensions) + } + if numServices > 0 { + fd.L1.Services.List = fd.allocServices(numServices) + } + + if numEnums > 0 { + b := b0[posEnums:] + for i := range fd.L1.Enums.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Enums.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } + if numMessages > 0 { + b := b0[posMessages:] + for i := range fd.L1.Messages.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Messages.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } + if numExtensions > 0 { + b := b0[posExtensions:] + for i := range fd.L1.Extensions.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Extensions.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } + if numServices > 0 { + b := b0[posServices:] + for i := range fd.L1.Services.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Services.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } +} + +func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + ed.L0.ParentFile = pf + ed.L0.Parent = pd + ed.L0.Index = i + + var numValues int + for b := b; len(b) > 0; { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.EnumDescriptorProto_Name: + ed.L0.FullName = appendFullName(sb, pd.FullName(), v) + case fieldnum.EnumDescriptorProto_Value: + numValues++ + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + + // Only construct enum value descriptors for top-level enums since + // they are needed for registration. + if pd != pf { + return + } + ed.L1.eagerValues = true + ed.L2 = new(EnumL2) + ed.L2.Values.List = make([]EnumValue, numValues) + for i := 0; len(b) > 0; { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.EnumDescriptorProto_Value: + ed.L2.Values.List[i].unmarshalFull(v, sb, pf, ed, i) + i++ + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + md.L0.ParentFile = pf + md.L0.Parent = pd + md.L0.Index = i + + var prevField pref.FieldNumber + var numEnums, numMessages, numExtensions int + var posEnums, posMessages, posExtensions int + b0 := b + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.DescriptorProto_Name: + md.L0.FullName = appendFullName(sb, pd.FullName(), v) + case fieldnum.DescriptorProto_EnumType: + if prevField != fieldnum.DescriptorProto_EnumType { + if numEnums > 0 { + panic("non-contiguous repeated field") + } + posEnums = len(b0) - len(b) - n - m + } + numEnums++ + case fieldnum.DescriptorProto_NestedType: + if prevField != fieldnum.DescriptorProto_NestedType { + if numMessages > 0 { + panic("non-contiguous repeated field") + } + posMessages = len(b0) - len(b) - n - m + } + numMessages++ + case fieldnum.DescriptorProto_Extension: + if prevField != fieldnum.DescriptorProto_Extension { + if numExtensions > 0 { + panic("non-contiguous repeated field") + } + posExtensions = len(b0) - len(b) - n - m + } + numExtensions++ + case fieldnum.DescriptorProto_Options: + md.unmarshalSeedOptions(v) + } + prevField = num + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + prevField = -1 // ignore known field numbers of unknown wire type + } + } + + // Must allocate all declarations before parsing each descriptor type + // to ensure we handled all descriptors in "flattened ordering". + if numEnums > 0 { + md.L1.Enums.List = pf.allocEnums(numEnums) + } + if numMessages > 0 { + md.L1.Messages.List = pf.allocMessages(numMessages) + } + if numExtensions > 0 { + md.L1.Extensions.List = pf.allocExtensions(numExtensions) + } + + if numEnums > 0 { + b := b0[posEnums:] + for i := range md.L1.Enums.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + md.L1.Enums.List[i].unmarshalSeed(v, sb, pf, md, i) + b = b[n+m:] + } + } + if numMessages > 0 { + b := b0[posMessages:] + for i := range md.L1.Messages.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + md.L1.Messages.List[i].unmarshalSeed(v, sb, pf, md, i) + b = b[n+m:] + } + } + if numExtensions > 0 { + b := b0[posExtensions:] + for i := range md.L1.Extensions.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + md.L1.Extensions.List[i].unmarshalSeed(v, sb, pf, md, i) + b = b[n+m:] + } + } +} + +func (md *Message) unmarshalSeedOptions(b []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.MessageOptions_MapEntry: + md.L1.IsMapEntry = protowire.DecodeBool(v) + case fieldnum.MessageOptions_MessageSetWireFormat: + md.L1.IsMessageSet = protowire.DecodeBool(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + xd.L0.ParentFile = pf + xd.L0.Parent = pd + xd.L0.Index = i + + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.FieldDescriptorProto_Number: + xd.L1.Number = pref.FieldNumber(v) + case fieldnum.FieldDescriptorProto_Label: + xd.L1.Cardinality = pref.Cardinality(v) + case fieldnum.FieldDescriptorProto_Type: + xd.L1.Kind = pref.Kind(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.FieldDescriptorProto_Name: + xd.L0.FullName = appendFullName(sb, pd.FullName(), v) + case fieldnum.FieldDescriptorProto_Extendee: + xd.L1.Extendee = PlaceholderMessage(makeFullName(sb, v)) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + sd.L0.ParentFile = pf + sd.L0.Parent = pd + sd.L0.Index = i + + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.ServiceDescriptorProto_Name: + sd.L0.FullName = appendFullName(sb, pd.FullName(), v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +var nameBuilderPool = sync.Pool{ + New: func() interface{} { return new(strs.Builder) }, +} + +func getBuilder() *strs.Builder { + return nameBuilderPool.Get().(*strs.Builder) +} +func putBuilder(b *strs.Builder) { + nameBuilderPool.Put(b) +} + +// makeFullName converts b to a protoreflect.FullName, +// where b must start with a leading dot. +func makeFullName(sb *strs.Builder, b []byte) pref.FullName { + if len(b) == 0 || b[0] != '.' { + panic("name reference must be fully qualified") + } + return pref.FullName(sb.MakeString(b[1:])) +} + +func appendFullName(sb *strs.Builder, prefix pref.FullName, suffix []byte) pref.FullName { + return sb.AppendFullName(prefix, pref.Name(strs.UnsafeString(suffix))) +} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go new file mode 100644 index 00000000..cdf31646 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go @@ -0,0 +1,695 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "reflect" + "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/fieldnum" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +func (fd *File) lazyRawInit() { + fd.unmarshalFull(fd.builder.RawDescriptor) + fd.resolveMessages() + fd.resolveExtensions() + fd.resolveServices() +} + +func (file *File) resolveMessages() { + var depIdx int32 + for i := range file.allMessages { + md := &file.allMessages[i] + + // Resolve message field dependencies. + for j := range md.L2.Fields.List { + fd := &md.L2.Fields.List[j] + + // Weak fields are resolved upon actual use. + if fd.L1.IsWeak { + continue + } + + // Resolve message field dependency. + switch fd.L1.Kind { + case pref.EnumKind: + fd.L1.Enum = file.resolveEnumDependency(fd.L1.Enum, listFieldDeps, depIdx) + depIdx++ + case pref.MessageKind, pref.GroupKind: + fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx) + depIdx++ + } + + // Default is resolved here since it depends on Enum being resolved. + if v := fd.L1.Default.val; v.IsValid() { + fd.L1.Default = unmarshalDefault(v.Bytes(), fd.L1.Kind, file, fd.L1.Enum) + } + } + } +} + +func (file *File) resolveExtensions() { + var depIdx int32 + for i := range file.allExtensions { + xd := &file.allExtensions[i] + + // Resolve extension field dependency. + switch xd.L1.Kind { + case pref.EnumKind: + xd.L2.Enum = file.resolveEnumDependency(xd.L2.Enum, listExtDeps, depIdx) + depIdx++ + case pref.MessageKind, pref.GroupKind: + xd.L2.Message = file.resolveMessageDependency(xd.L2.Message, listExtDeps, depIdx) + depIdx++ + } + + // Default is resolved here since it depends on Enum being resolved. + if v := xd.L2.Default.val; v.IsValid() { + xd.L2.Default = unmarshalDefault(v.Bytes(), xd.L1.Kind, file, xd.L2.Enum) + } + } +} + +func (file *File) resolveServices() { + var depIdx int32 + for i := range file.allServices { + sd := &file.allServices[i] + + // Resolve method dependencies. + for j := range sd.L2.Methods.List { + md := &sd.L2.Methods.List[j] + md.L1.Input = file.resolveMessageDependency(md.L1.Input, listMethInDeps, depIdx) + md.L1.Output = file.resolveMessageDependency(md.L1.Output, listMethOutDeps, depIdx) + depIdx++ + } + } +} + +func (file *File) resolveEnumDependency(ed pref.EnumDescriptor, i, j int32) pref.EnumDescriptor { + r := file.builder.FileRegistry + if r, ok := r.(resolverByIndex); ok { + if ed2 := r.FindEnumByIndex(i, j, file.allEnums, file.allMessages); ed2 != nil { + return ed2 + } + } + for i := range file.allEnums { + if ed2 := &file.allEnums[i]; ed2.L0.FullName == ed.FullName() { + return ed2 + } + } + if d, _ := r.FindDescriptorByName(ed.FullName()); d != nil { + return d.(pref.EnumDescriptor) + } + return ed +} + +func (file *File) resolveMessageDependency(md pref.MessageDescriptor, i, j int32) pref.MessageDescriptor { + r := file.builder.FileRegistry + if r, ok := r.(resolverByIndex); ok { + if md2 := r.FindMessageByIndex(i, j, file.allEnums, file.allMessages); md2 != nil { + return md2 + } + } + for i := range file.allMessages { + if md2 := &file.allMessages[i]; md2.L0.FullName == md.FullName() { + return md2 + } + } + if d, _ := r.FindDescriptorByName(md.FullName()); d != nil { + return d.(pref.MessageDescriptor) + } + return md +} + +func (fd *File) unmarshalFull(b []byte) { + sb := getBuilder() + defer putBuilder(sb) + + var enumIdx, messageIdx, extensionIdx, serviceIdx int + var rawOptions []byte + fd.L2 = new(FileL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.FileDescriptorProto_PublicDependency: + fd.L2.Imports[v].IsPublic = true + case fieldnum.FileDescriptorProto_WeakDependency: + fd.L2.Imports[v].IsWeak = true + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.FileDescriptorProto_Dependency: + path := sb.MakeString(v) + imp, _ := fd.builder.FileRegistry.FindFileByPath(path) + if imp == nil { + imp = PlaceholderFile(path) + } + fd.L2.Imports = append(fd.L2.Imports, pref.FileImport{FileDescriptor: imp}) + case fieldnum.FileDescriptorProto_EnumType: + fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb) + enumIdx++ + case fieldnum.FileDescriptorProto_MessageType: + fd.L1.Messages.List[messageIdx].unmarshalFull(v, sb) + messageIdx++ + case fieldnum.FileDescriptorProto_Extension: + fd.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb) + extensionIdx++ + case fieldnum.FileDescriptorProto_Service: + fd.L1.Services.List[serviceIdx].unmarshalFull(v, sb) + serviceIdx++ + case fieldnum.FileDescriptorProto_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + fd.L2.Options = fd.builder.optionsUnmarshaler(&descopts.File, rawOptions) +} + +func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) { + var rawValues [][]byte + var rawOptions []byte + if !ed.L1.eagerValues { + ed.L2 = new(EnumL2) + } + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.EnumDescriptorProto_Value: + rawValues = append(rawValues, v) + case fieldnum.EnumDescriptorProto_ReservedName: + ed.L2.ReservedNames.List = append(ed.L2.ReservedNames.List, pref.Name(sb.MakeString(v))) + case fieldnum.EnumDescriptorProto_ReservedRange: + ed.L2.ReservedRanges.List = append(ed.L2.ReservedRanges.List, unmarshalEnumReservedRange(v)) + case fieldnum.EnumDescriptorProto_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if !ed.L1.eagerValues && len(rawValues) > 0 { + ed.L2.Values.List = make([]EnumValue, len(rawValues)) + for i, b := range rawValues { + ed.L2.Values.List[i].unmarshalFull(b, sb, ed.L0.ParentFile, ed, i) + } + } + ed.L2.Options = ed.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Enum, rawOptions) +} + +func unmarshalEnumReservedRange(b []byte) (r [2]pref.EnumNumber) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.EnumDescriptorProto_EnumReservedRange_Start: + r[0] = pref.EnumNumber(v) + case fieldnum.EnumDescriptorProto_EnumReservedRange_End: + r[1] = pref.EnumNumber(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + return r +} + +func (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + vd.L0.ParentFile = pf + vd.L0.Parent = pd + vd.L0.Index = i + + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.EnumValueDescriptorProto_Number: + vd.L1.Number = pref.EnumNumber(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.EnumValueDescriptorProto_Name: + // NOTE: Enum values are in the same scope as the enum parent. + vd.L0.FullName = appendFullName(sb, pd.Parent().FullName(), v) + case fieldnum.EnumValueDescriptorProto_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + vd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.EnumValue, rawOptions) +} + +func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) { + var rawFields, rawOneofs [][]byte + var enumIdx, messageIdx, extensionIdx int + var rawOptions []byte + md.L2 = new(MessageL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.DescriptorProto_Field: + rawFields = append(rawFields, v) + case fieldnum.DescriptorProto_OneofDecl: + rawOneofs = append(rawOneofs, v) + case fieldnum.DescriptorProto_ReservedName: + md.L2.ReservedNames.List = append(md.L2.ReservedNames.List, pref.Name(sb.MakeString(v))) + case fieldnum.DescriptorProto_ReservedRange: + md.L2.ReservedRanges.List = append(md.L2.ReservedRanges.List, unmarshalMessageReservedRange(v)) + case fieldnum.DescriptorProto_ExtensionRange: + r, rawOptions := unmarshalMessageExtensionRange(v) + opts := md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.ExtensionRange, rawOptions) + md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, r) + md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, opts) + case fieldnum.DescriptorProto_EnumType: + md.L1.Enums.List[enumIdx].unmarshalFull(v, sb) + enumIdx++ + case fieldnum.DescriptorProto_NestedType: + md.L1.Messages.List[messageIdx].unmarshalFull(v, sb) + messageIdx++ + case fieldnum.DescriptorProto_Extension: + md.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb) + extensionIdx++ + case fieldnum.DescriptorProto_Options: + md.unmarshalOptions(v) + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if len(rawFields) > 0 || len(rawOneofs) > 0 { + md.L2.Fields.List = make([]Field, len(rawFields)) + md.L2.Oneofs.List = make([]Oneof, len(rawOneofs)) + for i, b := range rawFields { + fd := &md.L2.Fields.List[i] + fd.unmarshalFull(b, sb, md.L0.ParentFile, md, i) + if fd.L1.Cardinality == pref.Required { + md.L2.RequiredNumbers.List = append(md.L2.RequiredNumbers.List, fd.L1.Number) + } + } + for i, b := range rawOneofs { + od := &md.L2.Oneofs.List[i] + od.unmarshalFull(b, sb, md.L0.ParentFile, md, i) + } + } + md.L2.Options = md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Message, rawOptions) +} + +func (md *Message) unmarshalOptions(b []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.MessageOptions_MapEntry: + md.L1.IsMapEntry = protowire.DecodeBool(v) + case fieldnum.MessageOptions_MessageSetWireFormat: + md.L1.IsMessageSet = protowire.DecodeBool(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func unmarshalMessageReservedRange(b []byte) (r [2]pref.FieldNumber) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.DescriptorProto_ReservedRange_Start: + r[0] = pref.FieldNumber(v) + case fieldnum.DescriptorProto_ReservedRange_End: + r[1] = pref.FieldNumber(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + return r +} + +func unmarshalMessageExtensionRange(b []byte) (r [2]pref.FieldNumber, rawOptions []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.DescriptorProto_ExtensionRange_Start: + r[0] = pref.FieldNumber(v) + case fieldnum.DescriptorProto_ExtensionRange_End: + r[1] = pref.FieldNumber(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.DescriptorProto_ExtensionRange_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + return r, rawOptions +} + +func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + fd.L0.ParentFile = pf + fd.L0.Parent = pd + fd.L0.Index = i + + var rawTypeName []byte + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.FieldDescriptorProto_Number: + fd.L1.Number = pref.FieldNumber(v) + case fieldnum.FieldDescriptorProto_Label: + fd.L1.Cardinality = pref.Cardinality(v) + case fieldnum.FieldDescriptorProto_Type: + fd.L1.Kind = pref.Kind(v) + case fieldnum.FieldDescriptorProto_OneofIndex: + // In Message.unmarshalFull, we allocate slices for both + // the field and oneof descriptors before unmarshaling either + // of them. This ensures pointers to slice elements are stable. + od := &pd.(*Message).L2.Oneofs.List[v] + od.L1.Fields.List = append(od.L1.Fields.List, fd) + if fd.L1.ContainingOneof != nil { + panic("oneof type already set") + } + fd.L1.ContainingOneof = od + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.FieldDescriptorProto_Name: + fd.L0.FullName = appendFullName(sb, pd.FullName(), v) + case fieldnum.FieldDescriptorProto_JsonName: + fd.L1.JSONName.Init(sb.MakeString(v)) + case fieldnum.FieldDescriptorProto_DefaultValue: + fd.L1.Default.val = pref.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages + case fieldnum.FieldDescriptorProto_TypeName: + rawTypeName = v + case fieldnum.FieldDescriptorProto_Options: + fd.unmarshalOptions(v) + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if rawTypeName != nil { + name := makeFullName(sb, rawTypeName) + switch fd.L1.Kind { + case pref.EnumKind: + fd.L1.Enum = PlaceholderEnum(name) + case pref.MessageKind, pref.GroupKind: + fd.L1.Message = PlaceholderMessage(name) + } + } + fd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Field, rawOptions) +} + +func (fd *Field) unmarshalOptions(b []byte) { + const FieldOptions_EnforceUTF8 = 13 + + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.FieldOptions_Packed: + fd.L1.HasPacked = true + fd.L1.IsPacked = protowire.DecodeBool(v) + case fieldnum.FieldOptions_Weak: + fd.L1.IsWeak = protowire.DecodeBool(v) + case FieldOptions_EnforceUTF8: + fd.L1.HasEnforceUTF8 = true + fd.L1.EnforceUTF8 = protowire.DecodeBool(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + od.L0.ParentFile = pf + od.L0.Parent = pd + od.L0.Index = i + + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.OneofDescriptorProto_Name: + od.L0.FullName = appendFullName(sb, pd.FullName(), v) + case fieldnum.OneofDescriptorProto_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + od.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Oneof, rawOptions) +} + +func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) { + var rawTypeName []byte + var rawOptions []byte + xd.L2 = new(ExtensionL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.FieldDescriptorProto_JsonName: + xd.L2.JSONName.Init(sb.MakeString(v)) + case fieldnum.FieldDescriptorProto_DefaultValue: + xd.L2.Default.val = pref.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions + case fieldnum.FieldDescriptorProto_TypeName: + rawTypeName = v + case fieldnum.FieldDescriptorProto_Options: + xd.unmarshalOptions(v) + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if rawTypeName != nil { + name := makeFullName(sb, rawTypeName) + switch xd.L1.Kind { + case pref.EnumKind: + xd.L2.Enum = PlaceholderEnum(name) + case pref.MessageKind, pref.GroupKind: + xd.L2.Message = PlaceholderMessage(name) + } + } + xd.L2.Options = xd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Field, rawOptions) +} + +func (xd *Extension) unmarshalOptions(b []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.FieldOptions_Packed: + xd.L2.IsPacked = protowire.DecodeBool(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (sd *Service) unmarshalFull(b []byte, sb *strs.Builder) { + var rawMethods [][]byte + var rawOptions []byte + sd.L2 = new(ServiceL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.ServiceDescriptorProto_Method: + rawMethods = append(rawMethods, v) + case fieldnum.ServiceDescriptorProto_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if len(rawMethods) > 0 { + sd.L2.Methods.List = make([]Method, len(rawMethods)) + for i, b := range rawMethods { + sd.L2.Methods.List[i].unmarshalFull(b, sb, sd.L0.ParentFile, sd, i) + } + } + sd.L2.Options = sd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Service, rawOptions) +} + +func (md *Method) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Descriptor, i int) { + md.L0.ParentFile = pf + md.L0.Parent = pd + md.L0.Index = i + + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case fieldnum.MethodDescriptorProto_ClientStreaming: + md.L1.IsStreamingClient = protowire.DecodeBool(v) + case fieldnum.MethodDescriptorProto_ServerStreaming: + md.L1.IsStreamingServer = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case fieldnum.MethodDescriptorProto_Name: + md.L0.FullName = appendFullName(sb, pd.FullName(), v) + case fieldnum.MethodDescriptorProto_InputType: + md.L1.Input = PlaceholderMessage(makeFullName(sb, v)) + case fieldnum.MethodDescriptorProto_OutputType: + md.L1.Output = PlaceholderMessage(makeFullName(sb, v)) + case fieldnum.MethodDescriptorProto_Options: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + md.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Method, rawOptions) +} + +// appendOptions appends src to dst, where the returned slice is never nil. +// This is necessary to distinguish between empty and unpopulated options. +func appendOptions(dst, src []byte) []byte { + if dst == nil { + dst = []byte{} + } + return append(dst, src...) +} + +// optionsUnmarshaler constructs a lazy unmarshal function for an options message. +// +// The type of message to unmarshal to is passed as a pointer since the +// vars in descopts may not yet be populated at the time this function is called. +func (db *Builder) optionsUnmarshaler(p *pref.ProtoMessage, b []byte) func() pref.ProtoMessage { + if b == nil { + return nil + } + var opts pref.ProtoMessage + var once sync.Once + return func() pref.ProtoMessage { + once.Do(func() { + if *p == nil { + panic("Descriptor.Options called without importing the descriptor package") + } + opts = reflect.New(reflect.TypeOf(*p).Elem()).Interface().(pref.ProtoMessage) + if err := (proto.UnmarshalOptions{ + AllowPartial: true, + Resolver: db.TypeResolver, + }).Unmarshal(b, opts); err != nil { + panic(err) + } + }) + return opts + } +} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go new file mode 100644 index 00000000..1b7089b6 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go @@ -0,0 +1,286 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "fmt" + "math" + "sort" + "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/descfmt" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type FileImports []pref.FileImport + +func (p *FileImports) Len() int { return len(*p) } +func (p *FileImports) Get(i int) pref.FileImport { return (*p)[i] } +func (p *FileImports) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *FileImports) ProtoInternal(pragma.DoNotImplement) {} + +type Names struct { + List []pref.Name + once sync.Once + has map[pref.Name]int // protected by once +} + +func (p *Names) Len() int { return len(p.List) } +func (p *Names) Get(i int) pref.Name { return p.List[i] } +func (p *Names) Has(s pref.Name) bool { return p.lazyInit().has[s] > 0 } +func (p *Names) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *Names) ProtoInternal(pragma.DoNotImplement) {} +func (p *Names) lazyInit() *Names { + p.once.Do(func() { + if len(p.List) > 0 { + p.has = make(map[pref.Name]int, len(p.List)) + for _, s := range p.List { + p.has[s] = p.has[s] + 1 + } + } + }) + return p +} + +// CheckValid reports any errors with the set of names with an error message +// that completes the sentence: "ranges is invalid because it has ..." +func (p *Names) CheckValid() error { + for s, n := range p.lazyInit().has { + switch { + case n > 1: + return errors.New("duplicate name: %q", s) + case false && !s.IsValid(): + // NOTE: The C++ implementation does not validate the identifier. + // See https://github.com/protocolbuffers/protobuf/issues/6335. + return errors.New("invalid name: %q", s) + } + } + return nil +} + +type EnumRanges struct { + List [][2]pref.EnumNumber // start inclusive; end inclusive + once sync.Once + sorted [][2]pref.EnumNumber // protected by once +} + +func (p *EnumRanges) Len() int { return len(p.List) } +func (p *EnumRanges) Get(i int) [2]pref.EnumNumber { return p.List[i] } +func (p *EnumRanges) Has(n pref.EnumNumber) bool { + for ls := p.lazyInit().sorted; len(ls) > 0; { + i := len(ls) / 2 + switch r := enumRange(ls[i]); { + case n < r.Start(): + ls = ls[:i] // search lower + case n > r.End(): + ls = ls[i+1:] // search upper + default: + return true + } + } + return false +} +func (p *EnumRanges) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *EnumRanges) ProtoInternal(pragma.DoNotImplement) {} +func (p *EnumRanges) lazyInit() *EnumRanges { + p.once.Do(func() { + p.sorted = append(p.sorted, p.List...) + sort.Slice(p.sorted, func(i, j int) bool { + return p.sorted[i][0] < p.sorted[j][0] + }) + }) + return p +} + +// CheckValid reports any errors with the set of names with an error message +// that completes the sentence: "ranges is invalid because it has ..." +func (p *EnumRanges) CheckValid() error { + var rp enumRange + for i, r := range p.lazyInit().sorted { + r := enumRange(r) + switch { + case !(r.Start() <= r.End()): + return errors.New("invalid range: %v", r) + case !(rp.End() < r.Start()) && i > 0: + return errors.New("overlapping ranges: %v with %v", rp, r) + } + rp = r + } + return nil +} + +type enumRange [2]protoreflect.EnumNumber + +func (r enumRange) Start() protoreflect.EnumNumber { return r[0] } // inclusive +func (r enumRange) End() protoreflect.EnumNumber { return r[1] } // inclusive +func (r enumRange) String() string { + if r.Start() == r.End() { + return fmt.Sprintf("%d", r.Start()) + } + return fmt.Sprintf("%d to %d", r.Start(), r.End()) +} + +type FieldRanges struct { + List [][2]pref.FieldNumber // start inclusive; end exclusive + once sync.Once + sorted [][2]pref.FieldNumber // protected by once +} + +func (p *FieldRanges) Len() int { return len(p.List) } +func (p *FieldRanges) Get(i int) [2]pref.FieldNumber { return p.List[i] } +func (p *FieldRanges) Has(n pref.FieldNumber) bool { + for ls := p.lazyInit().sorted; len(ls) > 0; { + i := len(ls) / 2 + switch r := fieldRange(ls[i]); { + case n < r.Start(): + ls = ls[:i] // search lower + case n > r.End(): + ls = ls[i+1:] // search upper + default: + return true + } + } + return false +} +func (p *FieldRanges) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *FieldRanges) ProtoInternal(pragma.DoNotImplement) {} +func (p *FieldRanges) lazyInit() *FieldRanges { + p.once.Do(func() { + p.sorted = append(p.sorted, p.List...) + sort.Slice(p.sorted, func(i, j int) bool { + return p.sorted[i][0] < p.sorted[j][0] + }) + }) + return p +} + +// CheckValid reports any errors with the set of ranges with an error message +// that completes the sentence: "ranges is invalid because it has ..." +func (p *FieldRanges) CheckValid(isMessageSet bool) error { + var rp fieldRange + for i, r := range p.lazyInit().sorted { + r := fieldRange(r) + switch { + case !isValidFieldNumber(r.Start(), isMessageSet): + return errors.New("invalid field number: %d", r.Start()) + case !isValidFieldNumber(r.End(), isMessageSet): + return errors.New("invalid field number: %d", r.End()) + case !(r.Start() <= r.End()): + return errors.New("invalid range: %v", r) + case !(rp.End() < r.Start()) && i > 0: + return errors.New("overlapping ranges: %v with %v", rp, r) + } + rp = r + } + return nil +} + +// isValidFieldNumber reports whether the field number is valid. +// Unlike the FieldNumber.IsValid method, it allows ranges that cover the +// reserved number range. +func isValidFieldNumber(n protoreflect.FieldNumber, isMessageSet bool) bool { + if isMessageSet { + return protowire.MinValidNumber <= n && n <= math.MaxInt32 + } + return protowire.MinValidNumber <= n && n <= protowire.MaxValidNumber +} + +// CheckOverlap reports an error if p and q overlap. +func (p *FieldRanges) CheckOverlap(q *FieldRanges) error { + rps := p.lazyInit().sorted + rqs := q.lazyInit().sorted + for pi, qi := 0, 0; pi < len(rps) && qi < len(rqs); { + rp := fieldRange(rps[pi]) + rq := fieldRange(rqs[qi]) + if !(rp.End() < rq.Start() || rq.End() < rp.Start()) { + return errors.New("overlapping ranges: %v with %v", rp, rq) + } + if rp.Start() < rq.Start() { + pi++ + } else { + qi++ + } + } + return nil +} + +type fieldRange [2]protoreflect.FieldNumber + +func (r fieldRange) Start() protoreflect.FieldNumber { return r[0] } // inclusive +func (r fieldRange) End() protoreflect.FieldNumber { return r[1] - 1 } // inclusive +func (r fieldRange) String() string { + if r.Start() == r.End() { + return fmt.Sprintf("%d", r.Start()) + } + return fmt.Sprintf("%d to %d", r.Start(), r.End()) +} + +type FieldNumbers struct { + List []pref.FieldNumber + once sync.Once + has map[pref.FieldNumber]struct{} // protected by once +} + +func (p *FieldNumbers) Len() int { return len(p.List) } +func (p *FieldNumbers) Get(i int) pref.FieldNumber { return p.List[i] } +func (p *FieldNumbers) Has(n pref.FieldNumber) bool { + p.once.Do(func() { + if len(p.List) > 0 { + p.has = make(map[pref.FieldNumber]struct{}, len(p.List)) + for _, n := range p.List { + p.has[n] = struct{}{} + } + } + }) + _, ok := p.has[n] + return ok +} +func (p *FieldNumbers) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *FieldNumbers) ProtoInternal(pragma.DoNotImplement) {} + +type OneofFields struct { + List []pref.FieldDescriptor + once sync.Once + byName map[pref.Name]pref.FieldDescriptor // protected by once + byJSON map[string]pref.FieldDescriptor // protected by once + byNum map[pref.FieldNumber]pref.FieldDescriptor // protected by once +} + +func (p *OneofFields) Len() int { return len(p.List) } +func (p *OneofFields) Get(i int) pref.FieldDescriptor { return p.List[i] } +func (p *OneofFields) ByName(s pref.Name) pref.FieldDescriptor { return p.lazyInit().byName[s] } +func (p *OneofFields) ByJSONName(s string) pref.FieldDescriptor { return p.lazyInit().byJSON[s] } +func (p *OneofFields) ByNumber(n pref.FieldNumber) pref.FieldDescriptor { return p.lazyInit().byNum[n] } +func (p *OneofFields) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *OneofFields) ProtoInternal(pragma.DoNotImplement) {} + +func (p *OneofFields) lazyInit() *OneofFields { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[pref.Name]pref.FieldDescriptor, len(p.List)) + p.byJSON = make(map[string]pref.FieldDescriptor, len(p.List)) + p.byNum = make(map[pref.FieldNumber]pref.FieldDescriptor, len(p.List)) + for _, f := range p.List { + // Field names and numbers are guaranteed to be unique. + p.byName[f.Name()] = f + p.byJSON[f.JSONName()] = f + p.byNum[f.Number()] = f + } + } + }) + return p +} + +type SourceLocations struct { + List []pref.SourceLocation +} + +func (p *SourceLocations) Len() int { return len(p.List) } +func (p *SourceLocations) Get(i int) pref.SourceLocation { return p.List[i] } +func (p *SourceLocations) ProtoInternal(pragma.DoNotImplement) {} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go new file mode 100644 index 00000000..6a8825e8 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go @@ -0,0 +1,345 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package filedesc + +import ( + "fmt" + "sync" + + "google.golang.org/protobuf/internal/descfmt" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type Enums struct { + List []Enum + once sync.Once + byName map[protoreflect.Name]*Enum // protected by once +} + +func (p *Enums) Len() int { + return len(p.List) +} +func (p *Enums) Get(i int) protoreflect.EnumDescriptor { + return &p.List[i] +} +func (p *Enums) ByName(s protoreflect.Name) protoreflect.EnumDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Enums) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Enums) ProtoInternal(pragma.DoNotImplement) {} +func (p *Enums) lazyInit() *Enums { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Enum, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type EnumValues struct { + List []EnumValue + once sync.Once + byName map[protoreflect.Name]*EnumValue // protected by once + byNum map[protoreflect.EnumNumber]*EnumValue // protected by once +} + +func (p *EnumValues) Len() int { + return len(p.List) +} +func (p *EnumValues) Get(i int) protoreflect.EnumValueDescriptor { + return &p.List[i] +} +func (p *EnumValues) ByName(s protoreflect.Name) protoreflect.EnumValueDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *EnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor { + if d := p.lazyInit().byNum[n]; d != nil { + return d + } + return nil +} +func (p *EnumValues) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *EnumValues) ProtoInternal(pragma.DoNotImplement) {} +func (p *EnumValues) lazyInit() *EnumValues { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*EnumValue, len(p.List)) + p.byNum = make(map[protoreflect.EnumNumber]*EnumValue, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + if _, ok := p.byNum[d.Number()]; !ok { + p.byNum[d.Number()] = d + } + } + } + }) + return p +} + +type Messages struct { + List []Message + once sync.Once + byName map[protoreflect.Name]*Message // protected by once +} + +func (p *Messages) Len() int { + return len(p.List) +} +func (p *Messages) Get(i int) protoreflect.MessageDescriptor { + return &p.List[i] +} +func (p *Messages) ByName(s protoreflect.Name) protoreflect.MessageDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Messages) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Messages) ProtoInternal(pragma.DoNotImplement) {} +func (p *Messages) lazyInit() *Messages { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Message, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Fields struct { + List []Field + once sync.Once + byName map[protoreflect.Name]*Field // protected by once + byJSON map[string]*Field // protected by once + byNum map[protoreflect.FieldNumber]*Field // protected by once +} + +func (p *Fields) Len() int { + return len(p.List) +} +func (p *Fields) Get(i int) protoreflect.FieldDescriptor { + return &p.List[i] +} +func (p *Fields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Fields) ByJSONName(s string) protoreflect.FieldDescriptor { + if d := p.lazyInit().byJSON[s]; d != nil { + return d + } + return nil +} +func (p *Fields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor { + if d := p.lazyInit().byNum[n]; d != nil { + return d + } + return nil +} +func (p *Fields) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Fields) ProtoInternal(pragma.DoNotImplement) {} +func (p *Fields) lazyInit() *Fields { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Field, len(p.List)) + p.byJSON = make(map[string]*Field, len(p.List)) + p.byNum = make(map[protoreflect.FieldNumber]*Field, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + if _, ok := p.byJSON[d.JSONName()]; !ok { + p.byJSON[d.JSONName()] = d + } + if _, ok := p.byNum[d.Number()]; !ok { + p.byNum[d.Number()] = d + } + } + } + }) + return p +} + +type Oneofs struct { + List []Oneof + once sync.Once + byName map[protoreflect.Name]*Oneof // protected by once +} + +func (p *Oneofs) Len() int { + return len(p.List) +} +func (p *Oneofs) Get(i int) protoreflect.OneofDescriptor { + return &p.List[i] +} +func (p *Oneofs) ByName(s protoreflect.Name) protoreflect.OneofDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Oneofs) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Oneofs) ProtoInternal(pragma.DoNotImplement) {} +func (p *Oneofs) lazyInit() *Oneofs { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Oneof, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Extensions struct { + List []Extension + once sync.Once + byName map[protoreflect.Name]*Extension // protected by once +} + +func (p *Extensions) Len() int { + return len(p.List) +} +func (p *Extensions) Get(i int) protoreflect.ExtensionDescriptor { + return &p.List[i] +} +func (p *Extensions) ByName(s protoreflect.Name) protoreflect.ExtensionDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Extensions) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Extensions) ProtoInternal(pragma.DoNotImplement) {} +func (p *Extensions) lazyInit() *Extensions { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Extension, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Services struct { + List []Service + once sync.Once + byName map[protoreflect.Name]*Service // protected by once +} + +func (p *Services) Len() int { + return len(p.List) +} +func (p *Services) Get(i int) protoreflect.ServiceDescriptor { + return &p.List[i] +} +func (p *Services) ByName(s protoreflect.Name) protoreflect.ServiceDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Services) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Services) ProtoInternal(pragma.DoNotImplement) {} +func (p *Services) lazyInit() *Services { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Service, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Methods struct { + List []Method + once sync.Once + byName map[protoreflect.Name]*Method // protected by once +} + +func (p *Methods) Len() int { + return len(p.List) +} +func (p *Methods) Get(i int) protoreflect.MethodDescriptor { + return &p.List[i] +} +func (p *Methods) ByName(s protoreflect.Name) protoreflect.MethodDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Methods) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Methods) ProtoInternal(pragma.DoNotImplement) {} +func (p *Methods) lazyInit() *Methods { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Method, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go b/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go new file mode 100644 index 00000000..dbf2c605 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go @@ -0,0 +1,107 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/pragma" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +var ( + emptyNames = new(Names) + emptyEnumRanges = new(EnumRanges) + emptyFieldRanges = new(FieldRanges) + emptyFieldNumbers = new(FieldNumbers) + emptySourceLocations = new(SourceLocations) + + emptyFiles = new(FileImports) + emptyMessages = new(Messages) + emptyFields = new(Fields) + emptyOneofs = new(Oneofs) + emptyEnums = new(Enums) + emptyEnumValues = new(EnumValues) + emptyExtensions = new(Extensions) + emptyServices = new(Services) +) + +// PlaceholderFile is a placeholder, representing only the file path. +type PlaceholderFile string + +func (f PlaceholderFile) ParentFile() pref.FileDescriptor { return f } +func (f PlaceholderFile) Parent() pref.Descriptor { return nil } +func (f PlaceholderFile) Index() int { return 0 } +func (f PlaceholderFile) Syntax() pref.Syntax { return 0 } +func (f PlaceholderFile) Name() pref.Name { return "" } +func (f PlaceholderFile) FullName() pref.FullName { return "" } +func (f PlaceholderFile) IsPlaceholder() bool { return true } +func (f PlaceholderFile) Options() pref.ProtoMessage { return descopts.File } +func (f PlaceholderFile) Path() string { return string(f) } +func (f PlaceholderFile) Package() pref.FullName { return "" } +func (f PlaceholderFile) Imports() pref.FileImports { return emptyFiles } +func (f PlaceholderFile) Messages() pref.MessageDescriptors { return emptyMessages } +func (f PlaceholderFile) Enums() pref.EnumDescriptors { return emptyEnums } +func (f PlaceholderFile) Extensions() pref.ExtensionDescriptors { return emptyExtensions } +func (f PlaceholderFile) Services() pref.ServiceDescriptors { return emptyServices } +func (f PlaceholderFile) SourceLocations() pref.SourceLocations { return emptySourceLocations } +func (f PlaceholderFile) ProtoType(pref.FileDescriptor) { return } +func (f PlaceholderFile) ProtoInternal(pragma.DoNotImplement) { return } + +// PlaceholderEnum is a placeholder, representing only the full name. +type PlaceholderEnum pref.FullName + +func (e PlaceholderEnum) ParentFile() pref.FileDescriptor { return nil } +func (e PlaceholderEnum) Parent() pref.Descriptor { return nil } +func (e PlaceholderEnum) Index() int { return 0 } +func (e PlaceholderEnum) Syntax() pref.Syntax { return 0 } +func (e PlaceholderEnum) Name() pref.Name { return pref.FullName(e).Name() } +func (e PlaceholderEnum) FullName() pref.FullName { return pref.FullName(e) } +func (e PlaceholderEnum) IsPlaceholder() bool { return true } +func (e PlaceholderEnum) Options() pref.ProtoMessage { return descopts.Enum } +func (e PlaceholderEnum) Values() pref.EnumValueDescriptors { return emptyEnumValues } +func (e PlaceholderEnum) ReservedNames() pref.Names { return emptyNames } +func (e PlaceholderEnum) ReservedRanges() pref.EnumRanges { return emptyEnumRanges } +func (e PlaceholderEnum) ProtoType(pref.EnumDescriptor) { return } +func (e PlaceholderEnum) ProtoInternal(pragma.DoNotImplement) { return } + +// PlaceholderEnumValue is a placeholder, representing only the full name. +type PlaceholderEnumValue pref.FullName + +func (e PlaceholderEnumValue) ParentFile() pref.FileDescriptor { return nil } +func (e PlaceholderEnumValue) Parent() pref.Descriptor { return nil } +func (e PlaceholderEnumValue) Index() int { return 0 } +func (e PlaceholderEnumValue) Syntax() pref.Syntax { return 0 } +func (e PlaceholderEnumValue) Name() pref.Name { return pref.FullName(e).Name() } +func (e PlaceholderEnumValue) FullName() pref.FullName { return pref.FullName(e) } +func (e PlaceholderEnumValue) IsPlaceholder() bool { return true } +func (e PlaceholderEnumValue) Options() pref.ProtoMessage { return descopts.EnumValue } +func (e PlaceholderEnumValue) Number() pref.EnumNumber { return 0 } +func (e PlaceholderEnumValue) ProtoType(pref.EnumValueDescriptor) { return } +func (e PlaceholderEnumValue) ProtoInternal(pragma.DoNotImplement) { return } + +// PlaceholderMessage is a placeholder, representing only the full name. +type PlaceholderMessage pref.FullName + +func (m PlaceholderMessage) ParentFile() pref.FileDescriptor { return nil } +func (m PlaceholderMessage) Parent() pref.Descriptor { return nil } +func (m PlaceholderMessage) Index() int { return 0 } +func (m PlaceholderMessage) Syntax() pref.Syntax { return 0 } +func (m PlaceholderMessage) Name() pref.Name { return pref.FullName(m).Name() } +func (m PlaceholderMessage) FullName() pref.FullName { return pref.FullName(m) } +func (m PlaceholderMessage) IsPlaceholder() bool { return true } +func (m PlaceholderMessage) Options() pref.ProtoMessage { return descopts.Message } +func (m PlaceholderMessage) IsMapEntry() bool { return false } +func (m PlaceholderMessage) Fields() pref.FieldDescriptors { return emptyFields } +func (m PlaceholderMessage) Oneofs() pref.OneofDescriptors { return emptyOneofs } +func (m PlaceholderMessage) ReservedNames() pref.Names { return emptyNames } +func (m PlaceholderMessage) ReservedRanges() pref.FieldRanges { return emptyFieldRanges } +func (m PlaceholderMessage) RequiredNumbers() pref.FieldNumbers { return emptyFieldNumbers } +func (m PlaceholderMessage) ExtensionRanges() pref.FieldRanges { return emptyFieldRanges } +func (m PlaceholderMessage) ExtensionRangeOptions(int) pref.ProtoMessage { panic("index out of range") } +func (m PlaceholderMessage) Messages() pref.MessageDescriptors { return emptyMessages } +func (m PlaceholderMessage) Enums() pref.EnumDescriptors { return emptyEnums } +func (m PlaceholderMessage) Extensions() pref.ExtensionDescriptors { return emptyExtensions } +func (m PlaceholderMessage) ProtoType(pref.MessageDescriptor) { return } +func (m PlaceholderMessage) ProtoInternal(pragma.DoNotImplement) { return } diff --git a/vendor/google.golang.org/protobuf/internal/filetype/build.go b/vendor/google.golang.org/protobuf/internal/filetype/build.go new file mode 100644 index 00000000..0a0dd35d --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filetype/build.go @@ -0,0 +1,297 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package filetype provides functionality for wrapping descriptors +// with Go type information. +package filetype + +import ( + "reflect" + + "google.golang.org/protobuf/internal/descopts" + fdesc "google.golang.org/protobuf/internal/filedesc" + pimpl "google.golang.org/protobuf/internal/impl" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" +) + +// Builder constructs type descriptors from a raw file descriptor +// and associated Go types for each enum and message declaration. +// +// +// Flattened Ordering +// +// The protobuf type system represents declarations as a tree. Certain nodes in +// the tree require us to either associate it with a concrete Go type or to +// resolve a dependency, which is information that must be provided separately +// since it cannot be derived from the file descriptor alone. +// +// However, representing a tree as Go literals is difficult to simply do in a +// space and time efficient way. Thus, we store them as a flattened list of +// objects where the serialization order from the tree-based form is important. +// +// The "flattened ordering" is defined as a tree traversal of all enum, message, +// extension, and service declarations using the following algorithm: +// +// def VisitFileDecls(fd): +// for e in fd.Enums: yield e +// for m in fd.Messages: yield m +// for x in fd.Extensions: yield x +// for s in fd.Services: yield s +// for m in fd.Messages: yield from VisitMessageDecls(m) +// +// def VisitMessageDecls(md): +// for e in md.Enums: yield e +// for m in md.Messages: yield m +// for x in md.Extensions: yield x +// for m in md.Messages: yield from VisitMessageDecls(m) +// +// The traversal starts at the root file descriptor and yields each direct +// declaration within each node before traversing into sub-declarations +// that children themselves may have. +type Builder struct { + // File is the underlying file descriptor builder. + File fdesc.Builder + + // GoTypes is a unique set of the Go types for all declarations and + // dependencies. Each type is represented as a zero value of the Go type. + // + // Declarations are Go types generated for enums and messages directly + // declared (not publicly imported) in the proto source file. + // Messages for map entries are accounted for, but represented by nil. + // Enum declarations in "flattened ordering" come first, followed by + // message declarations in "flattened ordering". + // + // Dependencies are Go types for enums or messages referenced by + // message fields (excluding weak fields), for parent extended messages of + // extension fields, for enums or messages referenced by extension fields, + // and for input and output messages referenced by service methods. + // Dependencies must come after declarations, but the ordering of + // dependencies themselves is unspecified. + GoTypes []interface{} + + // DependencyIndexes is an ordered list of indexes into GoTypes for the + // dependencies of messages, extensions, or services. + // + // There are 5 sub-lists in "flattened ordering" concatenated back-to-back: + // 0. Message field dependencies: list of the enum or message type + // referred to by every message field. + // 1. Extension field targets: list of the extended parent message of + // every extension. + // 2. Extension field dependencies: list of the enum or message type + // referred to by every extension field. + // 3. Service method inputs: list of the input message type + // referred to by every service method. + // 4. Service method outputs: list of the output message type + // referred to by every service method. + // + // The offset into DependencyIndexes for the start of each sub-list + // is appended to the end in reverse order. + DependencyIndexes []int32 + + // EnumInfos is a list of enum infos in "flattened ordering". + EnumInfos []pimpl.EnumInfo + + // MessageInfos is a list of message infos in "flattened ordering". + // If provided, the GoType and PBType for each element is populated. + // + // Requirement: len(MessageInfos) == len(Build.Messages) + MessageInfos []pimpl.MessageInfo + + // ExtensionInfos is a list of extension infos in "flattened ordering". + // Each element is initialized and registered with the protoregistry package. + // + // Requirement: len(LegacyExtensions) == len(Build.Extensions) + ExtensionInfos []pimpl.ExtensionInfo + + // TypeRegistry is the registry to register each type descriptor. + // If nil, it uses protoregistry.GlobalTypes. + TypeRegistry interface { + RegisterMessage(pref.MessageType) error + RegisterEnum(pref.EnumType) error + RegisterExtension(pref.ExtensionType) error + } +} + +// Out is the output of the builder. +type Out struct { + File pref.FileDescriptor +} + +func (tb Builder) Build() (out Out) { + // Replace the resolver with one that resolves dependencies by index, + // which is faster and more reliable than relying on the global registry. + if tb.File.FileRegistry == nil { + tb.File.FileRegistry = preg.GlobalFiles + } + tb.File.FileRegistry = &resolverByIndex{ + goTypes: tb.GoTypes, + depIdxs: tb.DependencyIndexes, + fileRegistry: tb.File.FileRegistry, + } + + // Initialize registry if unpopulated. + if tb.TypeRegistry == nil { + tb.TypeRegistry = preg.GlobalTypes + } + + fbOut := tb.File.Build() + out.File = fbOut.File + + // Process enums. + enumGoTypes := tb.GoTypes[:len(fbOut.Enums)] + if len(tb.EnumInfos) != len(fbOut.Enums) { + panic("mismatching enum lengths") + } + if len(fbOut.Enums) > 0 { + for i := range fbOut.Enums { + tb.EnumInfos[i] = pimpl.EnumInfo{ + GoReflectType: reflect.TypeOf(enumGoTypes[i]), + Desc: &fbOut.Enums[i], + } + // Register enum types. + if err := tb.TypeRegistry.RegisterEnum(&tb.EnumInfos[i]); err != nil { + panic(err) + } + } + } + + // Process messages. + messageGoTypes := tb.GoTypes[len(fbOut.Enums):][:len(fbOut.Messages)] + if len(tb.MessageInfos) != len(fbOut.Messages) { + panic("mismatching message lengths") + } + if len(fbOut.Messages) > 0 { + for i := range fbOut.Messages { + if messageGoTypes[i] == nil { + continue // skip map entry + } + + tb.MessageInfos[i].GoReflectType = reflect.TypeOf(messageGoTypes[i]) + tb.MessageInfos[i].Desc = &fbOut.Messages[i] + + // Register message types. + if err := tb.TypeRegistry.RegisterMessage(&tb.MessageInfos[i]); err != nil { + panic(err) + } + } + + // As a special-case for descriptor.proto, + // locally register concrete message type for the options. + if out.File.Path() == "google/protobuf/descriptor.proto" && out.File.Package() == "google.protobuf" { + for i := range fbOut.Messages { + switch fbOut.Messages[i].Name() { + case "FileOptions": + descopts.File = messageGoTypes[i].(pref.ProtoMessage) + case "EnumOptions": + descopts.Enum = messageGoTypes[i].(pref.ProtoMessage) + case "EnumValueOptions": + descopts.EnumValue = messageGoTypes[i].(pref.ProtoMessage) + case "MessageOptions": + descopts.Message = messageGoTypes[i].(pref.ProtoMessage) + case "FieldOptions": + descopts.Field = messageGoTypes[i].(pref.ProtoMessage) + case "OneofOptions": + descopts.Oneof = messageGoTypes[i].(pref.ProtoMessage) + case "ExtensionRangeOptions": + descopts.ExtensionRange = messageGoTypes[i].(pref.ProtoMessage) + case "ServiceOptions": + descopts.Service = messageGoTypes[i].(pref.ProtoMessage) + case "MethodOptions": + descopts.Method = messageGoTypes[i].(pref.ProtoMessage) + } + } + } + } + + // Process extensions. + if len(tb.ExtensionInfos) != len(fbOut.Extensions) { + panic("mismatching extension lengths") + } + var depIdx int32 + for i := range fbOut.Extensions { + // For enum and message kinds, determine the referent Go type so + // that we can construct their constructors. + const listExtDeps = 2 + var goType reflect.Type + switch fbOut.Extensions[i].L1.Kind { + case pref.EnumKind: + j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx) + goType = reflect.TypeOf(tb.GoTypes[j]) + depIdx++ + case pref.MessageKind, pref.GroupKind: + j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx) + goType = reflect.TypeOf(tb.GoTypes[j]) + depIdx++ + default: + goType = goTypeForPBKind[fbOut.Extensions[i].L1.Kind] + } + if fbOut.Extensions[i].IsList() { + goType = reflect.SliceOf(goType) + } + + pimpl.InitExtensionInfo(&tb.ExtensionInfos[i], &fbOut.Extensions[i], goType) + + // Register extension types. + if err := tb.TypeRegistry.RegisterExtension(&tb.ExtensionInfos[i]); err != nil { + panic(err) + } + } + + return out +} + +var goTypeForPBKind = map[pref.Kind]reflect.Type{ + pref.BoolKind: reflect.TypeOf(bool(false)), + pref.Int32Kind: reflect.TypeOf(int32(0)), + pref.Sint32Kind: reflect.TypeOf(int32(0)), + pref.Sfixed32Kind: reflect.TypeOf(int32(0)), + pref.Int64Kind: reflect.TypeOf(int64(0)), + pref.Sint64Kind: reflect.TypeOf(int64(0)), + pref.Sfixed64Kind: reflect.TypeOf(int64(0)), + pref.Uint32Kind: reflect.TypeOf(uint32(0)), + pref.Fixed32Kind: reflect.TypeOf(uint32(0)), + pref.Uint64Kind: reflect.TypeOf(uint64(0)), + pref.Fixed64Kind: reflect.TypeOf(uint64(0)), + pref.FloatKind: reflect.TypeOf(float32(0)), + pref.DoubleKind: reflect.TypeOf(float64(0)), + pref.StringKind: reflect.TypeOf(string("")), + pref.BytesKind: reflect.TypeOf([]byte(nil)), +} + +type depIdxs []int32 + +// Get retrieves the jth element of the ith sub-list. +func (x depIdxs) Get(i, j int32) int32 { + return x[x[int32(len(x))-i-1]+j] +} + +type ( + resolverByIndex struct { + goTypes []interface{} + depIdxs depIdxs + fileRegistry + } + fileRegistry interface { + FindFileByPath(string) (pref.FileDescriptor, error) + FindDescriptorByName(pref.FullName) (pref.Descriptor, error) + RegisterFile(pref.FileDescriptor) error + } +) + +func (r *resolverByIndex) FindEnumByIndex(i, j int32, es []fdesc.Enum, ms []fdesc.Message) pref.EnumDescriptor { + if depIdx := int(r.depIdxs.Get(i, j)); int(depIdx) < len(es)+len(ms) { + return &es[depIdx] + } else { + return pimpl.Export{}.EnumDescriptorOf(r.goTypes[depIdx]) + } +} + +func (r *resolverByIndex) FindMessageByIndex(i, j int32, es []fdesc.Enum, ms []fdesc.Message) pref.MessageDescriptor { + if depIdx := int(r.depIdxs.Get(i, j)); depIdx < len(es)+len(ms) { + return &ms[depIdx-len(es)] + } else { + return pimpl.Export{}.MessageDescriptorOf(r.goTypes[depIdx]) + } +} diff --git a/vendor/google.golang.org/protobuf/internal/flags/flags.go b/vendor/google.golang.org/protobuf/internal/flags/flags.go new file mode 100644 index 00000000..58372dd3 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/flags/flags.go @@ -0,0 +1,24 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package flags provides a set of flags controlled by build tags. +package flags + +// ProtoLegacy specifies whether to enable support for legacy functionality +// such as MessageSets, weak fields, and various other obscure behavior +// that is necessary to maintain backwards compatibility with proto1 or +// the pre-release variants of proto2 and proto3. +// +// This is disabled by default unless built with the "protolegacy" tag. +// +// WARNING: The compatibility agreement covers nothing provided by this flag. +// As such, functionality may suddenly be removed or changed at our discretion. +const ProtoLegacy = protoLegacy + +// LazyUnmarshalExtensions specifies whether to lazily unmarshal extensions. +// +// Lazy extension unmarshaling validates the contents of message-valued +// extension fields at unmarshal time, but defers creating the message +// structure until the extension is first accessed. +const LazyUnmarshalExtensions = ProtoLegacy diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go new file mode 100644 index 00000000..a72995f0 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go @@ -0,0 +1,9 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !protolegacy + +package flags + +const protoLegacy = false diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go new file mode 100644 index 00000000..772e2f0e --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go @@ -0,0 +1,9 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build protolegacy + +package flags + +const protoLegacy = true diff --git a/vendor/google.golang.org/protobuf/internal/genname/name.go b/vendor/google.golang.org/protobuf/internal/genname/name.go new file mode 100644 index 00000000..f45509fb --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/genname/name.go @@ -0,0 +1,25 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package genname contains constants for generated names. +package genname + +const ( + State = "state" + + SizeCache = "sizeCache" + SizeCacheA = "XXX_sizecache" + + WeakFields = "weakFields" + WeakFieldsA = "XXX_weak" + + UnknownFields = "unknownFields" + UnknownFieldsA = "XXX_unrecognized" + + ExtensionFields = "extensionFields" + ExtensionFieldsA = "XXX_InternalExtensions" + ExtensionFieldsB = "XXX_extensions" + + WeakFieldPrefix = "XXX_weak_" +) diff --git a/vendor/google.golang.org/protobuf/internal/impl/api_export.go b/vendor/google.golang.org/protobuf/internal/impl/api_export.go new file mode 100644 index 00000000..4d22c960 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/api_export.go @@ -0,0 +1,170 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strconv" + + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/proto" + pref "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// Export is a zero-length named type that exists only to export a set of +// functions that we do not want to appear in godoc. +type Export struct{} + +// enum is any enum type generated by protoc-gen-go +// and must be a named int32 type. +type enum = interface{} + +// EnumOf returns the protoreflect.Enum interface over e. +// It returns nil if e is nil. +func (Export) EnumOf(e enum) pref.Enum { + switch e := e.(type) { + case nil: + return nil + case pref.Enum: + return e + default: + return legacyWrapEnum(reflect.ValueOf(e)) + } +} + +// EnumDescriptorOf returns the protoreflect.EnumDescriptor for e. +// It returns nil if e is nil. +func (Export) EnumDescriptorOf(e enum) pref.EnumDescriptor { + switch e := e.(type) { + case nil: + return nil + case pref.Enum: + return e.Descriptor() + default: + return LegacyLoadEnumDesc(reflect.TypeOf(e)) + } +} + +// EnumTypeOf returns the protoreflect.EnumType for e. +// It returns nil if e is nil. +func (Export) EnumTypeOf(e enum) pref.EnumType { + switch e := e.(type) { + case nil: + return nil + case pref.Enum: + return e.Type() + default: + return legacyLoadEnumType(reflect.TypeOf(e)) + } +} + +// EnumStringOf returns the enum value as a string, either as the name if +// the number is resolvable, or the number formatted as a string. +func (Export) EnumStringOf(ed pref.EnumDescriptor, n pref.EnumNumber) string { + ev := ed.Values().ByNumber(n) + if ev != nil { + return string(ev.Name()) + } + return strconv.Itoa(int(n)) +} + +// message is any message type generated by protoc-gen-go +// and must be a pointer to a named struct type. +type message = interface{} + +// legacyMessageWrapper wraps a v2 message as a v1 message. +type legacyMessageWrapper struct{ m pref.ProtoMessage } + +func (m legacyMessageWrapper) Reset() { proto.Reset(m.m) } +func (m legacyMessageWrapper) String() string { return Export{}.MessageStringOf(m.m) } +func (m legacyMessageWrapper) ProtoMessage() {} + +// ProtoMessageV1Of converts either a v1 or v2 message to a v1 message. +// It returns nil if m is nil. +func (Export) ProtoMessageV1Of(m message) piface.MessageV1 { + switch mv := m.(type) { + case nil: + return nil + case piface.MessageV1: + return mv + case unwrapper: + return Export{}.ProtoMessageV1Of(mv.protoUnwrap()) + case pref.ProtoMessage: + return legacyMessageWrapper{mv} + default: + panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m)) + } +} + +func (Export) protoMessageV2Of(m message) pref.ProtoMessage { + switch mv := m.(type) { + case nil: + return nil + case pref.ProtoMessage: + return mv + case legacyMessageWrapper: + return mv.m + case piface.MessageV1: + return nil + default: + panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m)) + } +} + +// ProtoMessageV2Of converts either a v1 or v2 message to a v2 message. +// It returns nil if m is nil. +func (Export) ProtoMessageV2Of(m message) pref.ProtoMessage { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv + } + return legacyWrapMessage(reflect.ValueOf(m)).Interface() +} + +// MessageOf returns the protoreflect.Message interface over m. +// It returns nil if m is nil. +func (Export) MessageOf(m message) pref.Message { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect() + } + return legacyWrapMessage(reflect.ValueOf(m)) +} + +// MessageDescriptorOf returns the protoreflect.MessageDescriptor for m. +// It returns nil if m is nil. +func (Export) MessageDescriptorOf(m message) pref.MessageDescriptor { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect().Descriptor() + } + return LegacyLoadMessageDesc(reflect.TypeOf(m)) +} + +// MessageTypeOf returns the protoreflect.MessageType for m. +// It returns nil if m is nil. +func (Export) MessageTypeOf(m message) pref.MessageType { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect().Type() + } + return legacyLoadMessageInfo(reflect.TypeOf(m), "") +} + +// MessageStringOf returns the message value as a string, +// which is the message serialized in the protobuf text format. +func (Export) MessageStringOf(m pref.ProtoMessage) string { + return prototext.MarshalOptions{Multiline: false}.Format(m) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/checkinit.go b/vendor/google.golang.org/protobuf/internal/impl/checkinit.go new file mode 100644 index 00000000..b82341e5 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/checkinit.go @@ -0,0 +1,141 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync" + + "google.golang.org/protobuf/internal/errors" + pref "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +func (mi *MessageInfo) checkInitialized(in piface.CheckInitializedInput) (piface.CheckInitializedOutput, error) { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + return piface.CheckInitializedOutput{}, mi.checkInitializedPointer(p) +} + +func (mi *MessageInfo) checkInitializedPointer(p pointer) error { + mi.init() + if !mi.needsInitCheck { + return nil + } + if p.IsNil() { + for _, f := range mi.orderedCoderFields { + if f.isRequired { + return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName())) + } + } + return nil + } + if mi.extensionOffset.IsValid() { + e := p.Apply(mi.extensionOffset).Extensions() + if err := mi.isInitExtensions(e); err != nil { + return err + } + } + for _, f := range mi.orderedCoderFields { + if !f.isRequired && f.funcs.isInit == nil { + continue + } + fptr := p.Apply(f.offset) + if f.isPointer && fptr.Elem().IsNil() { + if f.isRequired { + return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName())) + } + continue + } + if f.funcs.isInit == nil { + continue + } + if err := f.funcs.isInit(fptr, f); err != nil { + return err + } + } + return nil +} + +func (mi *MessageInfo) isInitExtensions(ext *map[int32]ExtensionField) error { + if ext == nil { + return nil + } + for _, x := range *ext { + ei := getExtensionFieldInfo(x.Type()) + if ei.funcs.isInit == nil { + continue + } + v := x.Value() + if !v.IsValid() { + continue + } + if err := ei.funcs.isInit(v); err != nil { + return err + } + } + return nil +} + +var ( + needsInitCheckMu sync.Mutex + needsInitCheckMap sync.Map +) + +// needsInitCheck reports whether a message needs to be checked for partial initialization. +// +// It returns true if the message transitively includes any required or extension fields. +func needsInitCheck(md pref.MessageDescriptor) bool { + if v, ok := needsInitCheckMap.Load(md); ok { + if has, ok := v.(bool); ok { + return has + } + } + needsInitCheckMu.Lock() + defer needsInitCheckMu.Unlock() + return needsInitCheckLocked(md) +} + +func needsInitCheckLocked(md pref.MessageDescriptor) (has bool) { + if v, ok := needsInitCheckMap.Load(md); ok { + // If has is true, we've previously determined that this message + // needs init checks. + // + // If has is false, we've previously determined that it can never + // be uninitialized. + // + // If has is not a bool, we've just encountered a cycle in the + // message graph. In this case, it is safe to return false: If + // the message does have required fields, we'll detect them later + // in the graph traversal. + has, ok := v.(bool) + return ok && has + } + needsInitCheckMap.Store(md, struct{}{}) // avoid cycles while descending into this message + defer func() { + needsInitCheckMap.Store(md, has) + }() + if md.RequiredNumbers().Len() > 0 { + return true + } + if md.ExtensionRanges().Len() > 0 { + return true + } + for i := 0; i < md.Fields().Len(); i++ { + fd := md.Fields().Get(i) + // Map keys are never messages, so just consider the map value. + if fd.IsMap() { + fd = fd.MapValue() + } + fmd := fd.Message() + if fmd != nil && needsInitCheckLocked(fmd) { + return true + } + } + return false +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go new file mode 100644 index 00000000..08d35170 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go @@ -0,0 +1,223 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync" + "sync/atomic" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type extensionFieldInfo struct { + wiretag uint64 + tagsize int + unmarshalNeedsValue bool + funcs valueCoderFuncs + validation validationInfo +} + +var legacyExtensionFieldInfoCache sync.Map // map[protoreflect.ExtensionType]*extensionFieldInfo + +func getExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo { + if xi, ok := xt.(*ExtensionInfo); ok { + xi.lazyInit() + return xi.info + } + return legacyLoadExtensionFieldInfo(xt) +} + +// legacyLoadExtensionFieldInfo dynamically loads a *ExtensionInfo for xt. +func legacyLoadExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo { + if xi, ok := legacyExtensionFieldInfoCache.Load(xt); ok { + return xi.(*extensionFieldInfo) + } + e := makeExtensionFieldInfo(xt.TypeDescriptor()) + if e, ok := legacyMessageTypeCache.LoadOrStore(xt, e); ok { + return e.(*extensionFieldInfo) + } + return e +} + +func makeExtensionFieldInfo(xd pref.ExtensionDescriptor) *extensionFieldInfo { + var wiretag uint64 + if !xd.IsPacked() { + wiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()]) + } else { + wiretag = protowire.EncodeTag(xd.Number(), protowire.BytesType) + } + e := &extensionFieldInfo{ + wiretag: wiretag, + tagsize: protowire.SizeVarint(wiretag), + funcs: encoderFuncsForValue(xd), + } + // Does the unmarshal function need a value passed to it? + // This is true for composite types, where we pass in a message, list, or map to fill in, + // and for enums, where we pass in a prototype value to specify the concrete enum type. + switch xd.Kind() { + case pref.MessageKind, pref.GroupKind, pref.EnumKind: + e.unmarshalNeedsValue = true + default: + if xd.Cardinality() == pref.Repeated { + e.unmarshalNeedsValue = true + } + } + return e +} + +type lazyExtensionValue struct { + atomicOnce uint32 // atomically set if value is valid + mu sync.Mutex + xi *extensionFieldInfo + value pref.Value + b []byte + fn func() pref.Value +} + +type ExtensionField struct { + typ pref.ExtensionType + + // value is either the value of GetValue, + // or a *lazyExtensionValue that then returns the value of GetValue. + value pref.Value + lazy *lazyExtensionValue +} + +func (f *ExtensionField) appendLazyBytes(xt pref.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) { + if f.lazy == nil { + f.lazy = &lazyExtensionValue{xi: xi} + } + f.typ = xt + f.lazy.xi = xi + f.lazy.b = protowire.AppendTag(f.lazy.b, num, wtyp) + f.lazy.b = append(f.lazy.b, b...) +} + +func (f *ExtensionField) canLazy(xt pref.ExtensionType) bool { + if f.typ == nil { + return true + } + if f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 { + return true + } + return false +} + +func (f *ExtensionField) lazyInit() { + f.lazy.mu.Lock() + defer f.lazy.mu.Unlock() + if atomic.LoadUint32(&f.lazy.atomicOnce) == 1 { + return + } + if f.lazy.xi != nil { + b := f.lazy.b + val := f.typ.New() + for len(b) > 0 { + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + panic(errors.New("bad tag in lazy extension decoding")) + } + b = b[n:] + } + num := protowire.Number(tag >> 3) + wtyp := protowire.Type(tag & 7) + var out unmarshalOutput + var err error + val, out, err = f.lazy.xi.funcs.unmarshal(b, val, num, wtyp, lazyUnmarshalOptions) + if err != nil { + panic(errors.New("decode failure in lazy extension decoding: %v", err)) + } + b = b[out.n:] + } + f.lazy.value = val + } else { + f.lazy.value = f.lazy.fn() + } + f.lazy.xi = nil + f.lazy.fn = nil + f.lazy.b = nil + atomic.StoreUint32(&f.lazy.atomicOnce, 1) +} + +// Set sets the type and value of the extension field. +// This must not be called concurrently. +func (f *ExtensionField) Set(t pref.ExtensionType, v pref.Value) { + f.typ = t + f.value = v + f.lazy = nil +} + +// SetLazy sets the type and a value that is to be lazily evaluated upon first use. +// This must not be called concurrently. +func (f *ExtensionField) SetLazy(t pref.ExtensionType, fn func() pref.Value) { + f.typ = t + f.lazy = &lazyExtensionValue{fn: fn} +} + +// Value returns the value of the extension field. +// This may be called concurrently. +func (f *ExtensionField) Value() pref.Value { + if f.lazy != nil { + if atomic.LoadUint32(&f.lazy.atomicOnce) == 0 { + f.lazyInit() + } + return f.lazy.value + } + return f.value +} + +// Type returns the type of the extension field. +// This may be called concurrently. +func (f ExtensionField) Type() pref.ExtensionType { + return f.typ +} + +// IsSet returns whether the extension field is set. +// This may be called concurrently. +func (f ExtensionField) IsSet() bool { + return f.typ != nil +} + +// IsLazy reports whether a field is lazily encoded. +// It is exported for testing. +func IsLazy(m pref.Message, fd pref.FieldDescriptor) bool { + var mi *MessageInfo + var p pointer + switch m := m.(type) { + case *messageState: + mi = m.messageInfo() + p = m.pointer() + case *messageReflectWrapper: + mi = m.messageInfo() + p = m.pointer() + default: + return false + } + xd, ok := fd.(pref.ExtensionTypeDescriptor) + if !ok { + return false + } + xt := xd.Type() + ext := mi.extensionMap(p) + if ext == nil { + return false + } + f, ok := (*ext)[int32(fd.Number())] + if !ok { + return false + } + return f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go new file mode 100644 index 00000000..c00744d3 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go @@ -0,0 +1,828 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/proto" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +type errInvalidUTF8 struct{} + +func (errInvalidUTF8) Error() string { return "string field contains invalid UTF-8" } +func (errInvalidUTF8) InvalidUTF8() bool { return true } + +// initOneofFieldCoders initializes the fast-path functions for the fields in a oneof. +// +// For size, marshal, and isInit operations, functions are set only on the first field +// in the oneof. The functions are called when the oneof is non-nil, and will dispatch +// to the appropriate field-specific function as necessary. +// +// The unmarshal function is set on each field individually as usual. +func (mi *MessageInfo) initOneofFieldCoders(od pref.OneofDescriptor, si structInfo) { + fs := si.oneofsByName[od.Name()] + ft := fs.Type + oneofFields := make(map[reflect.Type]*coderFieldInfo) + needIsInit := false + fields := od.Fields() + for i, lim := 0, fields.Len(); i < lim; i++ { + fd := od.Fields().Get(i) + num := fd.Number() + // Make a copy of the original coderFieldInfo for use in unmarshaling. + // + // oneofFields[oneofType].funcs.marshal is the field-specific marshal function. + // + // mi.coderFields[num].marshal is set on only the first field in the oneof, + // and dispatches to the field-specific marshaler in oneofFields. + cf := *mi.coderFields[num] + ot := si.oneofWrappersByNumber[num] + cf.ft = ot.Field(0).Type + cf.mi, cf.funcs = fieldCoder(fd, cf.ft) + oneofFields[ot] = &cf + if cf.funcs.isInit != nil { + needIsInit = true + } + mi.coderFields[num].funcs.unmarshal = func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + var vw reflect.Value // pointer to wrapper type + vi := p.AsValueOf(ft).Elem() // oneof field value of interface kind + if !vi.IsNil() && !vi.Elem().IsNil() && vi.Elem().Elem().Type() == ot { + vw = vi.Elem() + } else { + vw = reflect.New(ot) + } + out, err := cf.funcs.unmarshal(b, pointerOfValue(vw).Apply(zeroOffset), wtyp, &cf, opts) + if err != nil { + return out, err + } + vi.Set(vw) + return out, nil + } + } + getInfo := func(p pointer) (pointer, *coderFieldInfo) { + v := p.AsValueOf(ft).Elem() + if v.IsNil() { + return pointer{}, nil + } + v = v.Elem() // interface -> *struct + if v.IsNil() { + return pointer{}, nil + } + return pointerOfValue(v).Apply(zeroOffset), oneofFields[v.Elem().Type()] + } + first := mi.coderFields[od.Fields().Get(0).Number()] + first.funcs.size = func(p pointer, _ *coderFieldInfo, opts marshalOptions) int { + p, info := getInfo(p) + if info == nil || info.funcs.size == nil { + return 0 + } + return info.funcs.size(p, info, opts) + } + first.funcs.marshal = func(b []byte, p pointer, _ *coderFieldInfo, opts marshalOptions) ([]byte, error) { + p, info := getInfo(p) + if info == nil || info.funcs.marshal == nil { + return b, nil + } + return info.funcs.marshal(b, p, info, opts) + } + first.funcs.merge = func(dst, src pointer, _ *coderFieldInfo, opts mergeOptions) { + srcp, srcinfo := getInfo(src) + if srcinfo == nil || srcinfo.funcs.merge == nil { + return + } + dstp, dstinfo := getInfo(dst) + if dstinfo != srcinfo { + dst.AsValueOf(ft).Elem().Set(reflect.New(src.AsValueOf(ft).Elem().Elem().Elem().Type())) + dstp = pointerOfValue(dst.AsValueOf(ft).Elem().Elem()).Apply(zeroOffset) + } + srcinfo.funcs.merge(dstp, srcp, srcinfo, opts) + } + if needIsInit { + first.funcs.isInit = func(p pointer, _ *coderFieldInfo) error { + p, info := getInfo(p) + if info == nil || info.funcs.isInit == nil { + return nil + } + return info.funcs.isInit(p, info) + } + } +} + +func makeWeakMessageFieldCoder(fd pref.FieldDescriptor) pointerCoderFuncs { + var once sync.Once + var messageType pref.MessageType + lazyInit := func() { + once.Do(func() { + messageName := fd.Message().FullName() + messageType, _ = preg.GlobalTypes.FindMessageByName(messageName) + }) + } + + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + m, ok := p.WeakFields().get(f.num) + if !ok { + return 0 + } + lazyInit() + if messageType == nil { + panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) + } + return sizeMessage(m, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + m, ok := p.WeakFields().get(f.num) + if !ok { + return b, nil + } + lazyInit() + if messageType == nil { + panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) + } + return appendMessage(b, m, f.wiretag, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + fs := p.WeakFields() + m, ok := fs.get(f.num) + if !ok { + lazyInit() + if messageType == nil { + return unmarshalOutput{}, errUnknown + } + m = messageType.New().Interface() + fs.set(f.num, m) + } + return consumeMessage(b, m, wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + m, ok := p.WeakFields().get(f.num) + if !ok { + return nil + } + return proto.CheckInitialized(m) + }, + merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + sm, ok := src.WeakFields().get(f.num) + if !ok { + return + } + dm, ok := dst.WeakFields().get(f.num) + if !ok { + lazyInit() + if messageType == nil { + panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) + } + dm = messageType.New().Interface() + dst.WeakFields().set(f.num, dm) + } + opts.Merge(dm, sm) + }, + } +} + +func makeMessageFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeMessageInfo, + marshal: appendMessageInfo, + unmarshal: consumeMessageInfo, + merge: mergeMessage, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageInfo + } + return funcs + } else { + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + m := asMessage(p.AsValueOf(ft).Elem()) + return sizeMessage(m, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + m := asMessage(p.AsValueOf(ft).Elem()) + return appendMessage(b, m, f.wiretag, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + mp := p.AsValueOf(ft).Elem() + if mp.IsNil() { + mp.Set(reflect.New(ft.Elem())) + } + return consumeMessage(b, asMessage(mp), wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + m := asMessage(p.AsValueOf(ft).Elem()) + return proto.CheckInitialized(m) + }, + merge: mergeMessage, + } + } +} + +func sizeMessageInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return protowire.SizeBytes(f.mi.sizePointer(p.Elem(), opts)) + f.tagsize +} + +func appendMessageInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(f.mi.sizePointer(p.Elem(), opts))) + return f.mi.marshalAppendPointer(b, p.Elem(), opts) +} + +func consumeMessageInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if p.Elem().IsNil() { + p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + o, err := f.mi.unmarshalPointer(v, p.Elem(), 0, opts) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitMessageInfo(p pointer, f *coderFieldInfo) error { + return f.mi.checkInitializedPointer(p.Elem()) +} + +func sizeMessage(m proto.Message, tagsize int, _ marshalOptions) int { + return protowire.SizeBytes(proto.Size(m)) + tagsize +} + +func appendMessage(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(proto.Size(m))) + return opts.Options().MarshalAppend(b, m) +} + +func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{ + Buf: v, + Message: m.ProtoReflect(), + }) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.Flags&piface.UnmarshalInitialized != 0 + return out, nil +} + +func sizeMessageValue(v pref.Value, tagsize int, opts marshalOptions) int { + m := v.Message().Interface() + return sizeMessage(m, tagsize, opts) +} + +func appendMessageValue(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + m := v.Message().Interface() + return appendMessage(b, m, wiretag, opts) +} + +func consumeMessageValue(b []byte, v pref.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) { + m := v.Message().Interface() + out, err := consumeMessage(b, m, wtyp, opts) + return v, out, err +} + +func isInitMessageValue(v pref.Value) error { + m := v.Message().Interface() + return proto.CheckInitialized(m) +} + +var coderMessageValue = valueCoderFuncs{ + size: sizeMessageValue, + marshal: appendMessageValue, + unmarshal: consumeMessageValue, + isInit: isInitMessageValue, + merge: mergeMessageValue, +} + +func sizeGroupValue(v pref.Value, tagsize int, opts marshalOptions) int { + m := v.Message().Interface() + return sizeGroup(m, tagsize, opts) +} + +func appendGroupValue(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + m := v.Message().Interface() + return appendGroup(b, m, wiretag, opts) +} + +func consumeGroupValue(b []byte, v pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) { + m := v.Message().Interface() + out, err := consumeGroup(b, m, num, wtyp, opts) + return v, out, err +} + +var coderGroupValue = valueCoderFuncs{ + size: sizeGroupValue, + marshal: appendGroupValue, + unmarshal: consumeGroupValue, + isInit: isInitMessageValue, + merge: mergeMessageValue, +} + +func makeGroupFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + num := fd.Number() + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeGroupType, + marshal: appendGroupType, + unmarshal: consumeGroupType, + merge: mergeMessage, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageInfo + } + return funcs + } else { + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + m := asMessage(p.AsValueOf(ft).Elem()) + return sizeGroup(m, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + m := asMessage(p.AsValueOf(ft).Elem()) + return appendGroup(b, m, f.wiretag, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + mp := p.AsValueOf(ft).Elem() + if mp.IsNil() { + mp.Set(reflect.New(ft.Elem())) + } + return consumeGroup(b, asMessage(mp), num, wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + m := asMessage(p.AsValueOf(ft).Elem()) + return proto.CheckInitialized(m) + }, + merge: mergeMessage, + } + } +} + +func sizeGroupType(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return 2*f.tagsize + f.mi.sizePointer(p.Elem(), opts) +} + +func appendGroupType(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts) + b = protowire.AppendVarint(b, f.wiretag+1) // end group + return b, err +} + +func consumeGroupType(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + if p.Elem().IsNil() { + p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + return f.mi.unmarshalPointer(b, p.Elem(), f.num, opts) +} + +func sizeGroup(m proto.Message, tagsize int, _ marshalOptions) int { + return 2*tagsize + proto.Size(m) +} + +func appendGroup(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) // start group + b, err := opts.Options().MarshalAppend(b, m) + b = protowire.AppendVarint(b, wiretag+1) // end group + return b, err +} + +func consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + b, n := protowire.ConsumeGroup(num, b) + if n < 0 { + return out, protowire.ParseError(n) + } + o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{ + Buf: b, + Message: m.ProtoReflect(), + }) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.Flags&piface.UnmarshalInitialized != 0 + return out, nil +} + +func makeMessageSliceFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeMessageSliceInfo, + marshal: appendMessageSliceInfo, + unmarshal: consumeMessageSliceInfo, + merge: mergeMessageSlice, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageSliceInfo + } + return funcs + } + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return sizeMessageSlice(p, ft, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendMessageSlice(b, p, f.wiretag, ft, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + return consumeMessageSlice(b, p, ft, wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + return isInitMessageSlice(p, ft) + }, + merge: mergeMessageSlice, + } +} + +func sizeMessageSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int { + s := p.PointerSlice() + n := 0 + for _, v := range s { + n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize + } + return n +} + +func appendMessageSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + siz := f.mi.sizePointer(v, opts) + b = protowire.AppendVarint(b, uint64(siz)) + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + } + return b, nil +} + +func consumeMessageSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + m := reflect.New(f.mi.GoReflectType.Elem()).Interface() + mp := pointerOfIface(m) + o, err := f.mi.unmarshalPointer(v, mp, 0, opts) + if err != nil { + return out, err + } + p.AppendPointerSlice(mp) + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitMessageSliceInfo(p pointer, f *coderFieldInfo) error { + s := p.PointerSlice() + for _, v := range s { + if err := f.mi.checkInitializedPointer(v); err != nil { + return err + } + } + return nil +} + +func sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, _ marshalOptions) int { + s := p.PointerSlice() + n := 0 + for _, v := range s { + m := asMessage(v.AsValueOf(goType.Elem())) + n += protowire.SizeBytes(proto.Size(m)) + tagsize + } + return n +} + +func appendMessageSlice(b []byte, p pointer, wiretag uint64, goType reflect.Type, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + m := asMessage(v.AsValueOf(goType.Elem())) + b = protowire.AppendVarint(b, wiretag) + siz := proto.Size(m) + b = protowire.AppendVarint(b, uint64(siz)) + b, err = opts.Options().MarshalAppend(b, m) + if err != nil { + return b, err + } + } + return b, nil +} + +func consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + mp := reflect.New(goType.Elem()) + o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{ + Buf: v, + Message: asMessage(mp).ProtoReflect(), + }) + if err != nil { + return out, err + } + p.AppendPointerSlice(pointerOfValue(mp)) + out.n = n + out.initialized = o.Flags&piface.UnmarshalInitialized != 0 + return out, nil +} + +func isInitMessageSlice(p pointer, goType reflect.Type) error { + s := p.PointerSlice() + for _, v := range s { + m := asMessage(v.AsValueOf(goType.Elem())) + if err := proto.CheckInitialized(m); err != nil { + return err + } + } + return nil +} + +// Slices of messages + +func sizeMessageSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int { + list := listv.List() + n := 0 + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + n += protowire.SizeBytes(proto.Size(m)) + tagsize + } + return n +} + +func appendMessageSliceValue(b []byte, listv pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + mopts := opts.Options() + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + b = protowire.AppendVarint(b, wiretag) + siz := proto.Size(m) + b = protowire.AppendVarint(b, uint64(siz)) + var err error + b, err = mopts.MarshalAppend(b, m) + if err != nil { + return b, err + } + } + return b, nil +} + +func consumeMessageSliceValue(b []byte, listv pref.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ pref.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.BytesType { + return pref.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return pref.Value{}, out, protowire.ParseError(n) + } + m := list.NewElement() + o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{ + Buf: v, + Message: m.Message(), + }) + if err != nil { + return pref.Value{}, out, err + } + list.Append(m) + out.n = n + out.initialized = o.Flags&piface.UnmarshalInitialized != 0 + return listv, out, nil +} + +func isInitMessageSliceValue(listv pref.Value) error { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + if err := proto.CheckInitialized(m); err != nil { + return err + } + } + return nil +} + +var coderMessageSliceValue = valueCoderFuncs{ + size: sizeMessageSliceValue, + marshal: appendMessageSliceValue, + unmarshal: consumeMessageSliceValue, + isInit: isInitMessageSliceValue, + merge: mergeMessageListValue, +} + +func sizeGroupSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int { + list := listv.List() + n := 0 + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + n += 2*tagsize + proto.Size(m) + } + return n +} + +func appendGroupSliceValue(b []byte, listv pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + mopts := opts.Options() + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + b = protowire.AppendVarint(b, wiretag) // start group + var err error + b, err = mopts.MarshalAppend(b, m) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, wiretag+1) // end group + } + return b, nil +} + +func consumeGroupSliceValue(b []byte, listv pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ pref.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.StartGroupType { + return pref.Value{}, out, errUnknown + } + b, n := protowire.ConsumeGroup(num, b) + if n < 0 { + return pref.Value{}, out, protowire.ParseError(n) + } + m := list.NewElement() + o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{ + Buf: b, + Message: m.Message(), + }) + if err != nil { + return pref.Value{}, out, err + } + list.Append(m) + out.n = n + out.initialized = o.Flags&piface.UnmarshalInitialized != 0 + return listv, out, nil +} + +var coderGroupSliceValue = valueCoderFuncs{ + size: sizeGroupSliceValue, + marshal: appendGroupSliceValue, + unmarshal: consumeGroupSliceValue, + isInit: isInitMessageSliceValue, + merge: mergeMessageListValue, +} + +func makeGroupSliceFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + num := fd.Number() + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeGroupSliceInfo, + marshal: appendGroupSliceInfo, + unmarshal: consumeGroupSliceInfo, + merge: mergeMessageSlice, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageSliceInfo + } + return funcs + } + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return sizeGroupSlice(p, ft, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendGroupSlice(b, p, f.wiretag, ft, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + return consumeGroupSlice(b, p, num, wtyp, ft, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + return isInitMessageSlice(p, ft) + }, + merge: mergeMessageSlice, + } +} + +func sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, _ marshalOptions) int { + s := p.PointerSlice() + n := 0 + for _, v := range s { + m := asMessage(v.AsValueOf(messageType.Elem())) + n += 2*tagsize + proto.Size(m) + } + return n +} + +func appendGroupSlice(b []byte, p pointer, wiretag uint64, messageType reflect.Type, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + m := asMessage(v.AsValueOf(messageType.Elem())) + b = protowire.AppendVarint(b, wiretag) // start group + b, err = opts.Options().MarshalAppend(b, m) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, wiretag+1) // end group + } + return b, nil +} + +func consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire.Type, goType reflect.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + b, n := protowire.ConsumeGroup(num, b) + if n < 0 { + return out, protowire.ParseError(n) + } + mp := reflect.New(goType.Elem()) + o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{ + Buf: b, + Message: asMessage(mp).ProtoReflect(), + }) + if err != nil { + return out, err + } + p.AppendPointerSlice(pointerOfValue(mp)) + out.n = n + out.initialized = o.Flags&piface.UnmarshalInitialized != 0 + return out, nil +} + +func sizeGroupSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int { + s := p.PointerSlice() + n := 0 + for _, v := range s { + n += 2*f.tagsize + f.mi.sizePointer(v, opts) + } + return n +} + +func appendGroupSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, f.wiretag+1) // end group + } + return b, nil +} + +func consumeGroupSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + if wtyp != protowire.StartGroupType { + return unmarshalOutput{}, errUnknown + } + m := reflect.New(f.mi.GoReflectType.Elem()).Interface() + mp := pointerOfIface(m) + out, err := f.mi.unmarshalPointer(b, mp, f.num, opts) + if err != nil { + return out, err + } + p.AppendPointerSlice(mp) + return out, nil +} + +func asMessage(v reflect.Value) pref.ProtoMessage { + if m, ok := v.Interface().(pref.ProtoMessage); ok { + return m + } + return legacyWrapMessage(v).Interface() +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go b/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go new file mode 100644 index 00000000..2c43b117 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go @@ -0,0 +1,5597 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "math" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// sizeBool returns the size of wire encoding a bool pointer as a Bool. +func sizeBool(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Bool() + return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) +} + +// appendBool wire encodes a bool pointer as a Bool. +func appendBool(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Bool() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + return b, nil +} + +// consumeBool wire decodes a bool pointer as a Bool. +func consumeBool(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Bool() = protowire.DecodeBool(v) + out.n = n + return out, nil +} + +var coderBool = pointerCoderFuncs{ + size: sizeBool, + marshal: appendBool, + unmarshal: consumeBool, + merge: mergeBool, +} + +// sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool. +// The zero value is not encoded. +func sizeBoolNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Bool() + if v == false { + return 0 + } + return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) +} + +// appendBoolNoZero wire encodes a bool pointer as a Bool. +// The zero value is not encoded. +func appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Bool() + if v == false { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + return b, nil +} + +var coderBoolNoZero = pointerCoderFuncs{ + size: sizeBoolNoZero, + marshal: appendBoolNoZero, + unmarshal: consumeBool, + merge: mergeBoolNoZero, +} + +// sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool. +// It panics if the pointer is nil. +func sizeBoolPtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.BoolPtr() + return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) +} + +// appendBoolPtr wire encodes a *bool pointer as a Bool. +// It panics if the pointer is nil. +func appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.BoolPtr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + return b, nil +} + +// consumeBoolPtr wire decodes a *bool pointer as a Bool. +func consumeBoolPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.BoolPtr() + if *vp == nil { + *vp = new(bool) + } + **vp = protowire.DecodeBool(v) + out.n = n + return out, nil +} + +var coderBoolPtr = pointerCoderFuncs{ + size: sizeBoolPtr, + marshal: appendBoolPtr, + unmarshal: consumeBoolPtr, + merge: mergeBoolPtr, +} + +// sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool. +func sizeBoolSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.BoolSlice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) + } + return size +} + +// appendBoolSlice encodes a []bool pointer as a repeated Bool. +func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.BoolSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + } + return b, nil +} + +// consumeBoolSlice wire decodes a []bool pointer as a repeated Bool. +func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.BoolSlice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, protowire.DecodeBool(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, protowire.DecodeBool(v)) + out.n = n + return out, nil +} + +var coderBoolSlice = pointerCoderFuncs{ + size: sizeBoolSlice, + marshal: appendBoolSlice, + unmarshal: consumeBoolSlice, + merge: mergeBoolSlice, +} + +// sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool. +func sizeBoolPackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.BoolSlice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeBool(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool. +func appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.BoolSlice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeBool(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + } + return b, nil +} + +var coderBoolPackedSlice = pointerCoderFuncs{ + size: sizeBoolPackedSlice, + marshal: appendBoolPackedSlice, + unmarshal: consumeBoolSlice, + merge: mergeBoolSlice, +} + +// sizeBoolValue returns the size of wire encoding a bool value as a Bool. +func sizeBoolValue(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool())) +} + +// appendBoolValue encodes a bool value as a Bool. +func appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + return b, nil +} + +// consumeBoolValue decodes a bool value as a Bool. +func consumeBoolValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfBool(protowire.DecodeBool(v)), out, nil +} + +var coderBoolValue = valueCoderFuncs{ + size: sizeBoolValue, + marshal: appendBoolValue, + unmarshal: consumeBoolValue, + merge: mergeScalarValue, +} + +// sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool. +func sizeBoolSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + } + return size +} + +// appendBoolSliceValue encodes a []bool value as a repeated Bool. +func appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + } + return b, nil +} + +// consumeBoolSliceValue wire decodes a []bool value as a repeated Bool. +func consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + out.n = n + return listv, out, nil +} + +var coderBoolSliceValue = valueCoderFuncs{ + size: sizeBoolSliceValue, + marshal: appendBoolSliceValue, + unmarshal: consumeBoolSliceValue, + merge: mergeListValue, +} + +// sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool. +func sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool. +func appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + } + return b, nil +} + +var coderBoolPackedSliceValue = valueCoderFuncs{ + size: sizeBoolPackedSliceValue, + marshal: appendBoolPackedSliceValue, + unmarshal: consumeBoolSliceValue, + merge: mergeListValue, +} + +// sizeEnumValue returns the size of wire encoding a value as a Enum. +func sizeEnumValue(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(v.Enum())) +} + +// appendEnumValue encodes a value as a Enum. +func appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Enum())) + return b, nil +} + +// consumeEnumValue decodes a value as a Enum. +func consumeEnumValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil +} + +var coderEnumValue = valueCoderFuncs{ + size: sizeEnumValue, + marshal: appendEnumValue, + unmarshal: consumeEnumValue, + merge: mergeScalarValue, +} + +// sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum. +func sizeEnumSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(v.Enum())) + } + return size +} + +// appendEnumSliceValue encodes a [] value as a repeated Enum. +func appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Enum())) + } + return b, nil +} + +// consumeEnumSliceValue wire decodes a [] value as a repeated Enum. +func consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + out.n = n + return listv, out, nil +} + +var coderEnumSliceValue = valueCoderFuncs{ + size: sizeEnumSliceValue, + marshal: appendEnumSliceValue, + unmarshal: consumeEnumSliceValue, + merge: mergeListValue, +} + +// sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum. +func sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Enum())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum. +func appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Enum())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(v.Enum())) + } + return b, nil +} + +var coderEnumPackedSliceValue = valueCoderFuncs{ + size: sizeEnumPackedSliceValue, + marshal: appendEnumPackedSliceValue, + unmarshal: consumeEnumSliceValue, + merge: mergeListValue, +} + +// sizeInt32 returns the size of wire encoding a int32 pointer as a Int32. +func sizeInt32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int32() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt32 wire encodes a int32 pointer as a Int32. +func appendInt32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt32 wire decodes a int32 pointer as a Int32. +func consumeInt32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Int32() = int32(v) + out.n = n + return out, nil +} + +var coderInt32 = pointerCoderFuncs{ + size: sizeInt32, + marshal: appendInt32, + unmarshal: consumeInt32, + merge: mergeInt32, +} + +// sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32. +// The zero value is not encoded. +func sizeInt32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt32NoZero wire encodes a int32 pointer as a Int32. +// The zero value is not encoded. +func appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +var coderInt32NoZero = pointerCoderFuncs{ + size: sizeInt32NoZero, + marshal: appendInt32NoZero, + unmarshal: consumeInt32, + merge: mergeInt32NoZero, +} + +// sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32. +// It panics if the pointer is nil. +func sizeInt32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.Int32Ptr() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt32Ptr wire encodes a *int32 pointer as a Int32. +// It panics if the pointer is nil. +func appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Int32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt32Ptr wire decodes a *int32 pointer as a Int32. +func consumeInt32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Int32Ptr() + if *vp == nil { + *vp = new(int32) + } + **vp = int32(v) + out.n = n + return out, nil +} + +var coderInt32Ptr = pointerCoderFuncs{ + size: sizeInt32Ptr, + marshal: appendInt32Ptr, + unmarshal: consumeInt32Ptr, + merge: mergeInt32Ptr, +} + +// sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32. +func sizeInt32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int32Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(uint64(v)) + } + return size +} + +// appendInt32Slice encodes a []int32 pointer as a repeated Int32. +func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +// consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32. +func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int32Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, int32(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, int32(v)) + out.n = n + return out, nil +} + +var coderInt32Slice = pointerCoderFuncs{ + size: sizeInt32Slice, + marshal: appendInt32Slice, + unmarshal: consumeInt32Slice, + merge: mergeInt32Slice, +} + +// sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32. +func sizeInt32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32. +func appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +var coderInt32PackedSlice = pointerCoderFuncs{ + size: sizeInt32PackedSlice, + marshal: appendInt32PackedSlice, + unmarshal: consumeInt32Slice, + merge: mergeInt32Slice, +} + +// sizeInt32Value returns the size of wire encoding a int32 value as a Int32. +func sizeInt32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(int32(v.Int()))) +} + +// appendInt32Value encodes a int32 value as a Int32. +func appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + return b, nil +} + +// consumeInt32Value decodes a int32 value as a Int32. +func consumeInt32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfInt32(int32(v)), out, nil +} + +var coderInt32Value = valueCoderFuncs{ + size: sizeInt32Value, + marshal: appendInt32Value, + unmarshal: consumeInt32Value, + merge: mergeScalarValue, +} + +// sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32. +func sizeInt32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(int32(v.Int()))) + } + return size +} + +// appendInt32SliceValue encodes a []int32 value as a repeated Int32. +func appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + } + return b, nil +} + +// consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32. +func consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + out.n = n + return listv, out, nil +} + +var coderInt32SliceValue = valueCoderFuncs{ + size: sizeInt32SliceValue, + marshal: appendInt32SliceValue, + unmarshal: consumeInt32SliceValue, + merge: mergeListValue, +} + +// sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32. +func sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(int32(v.Int()))) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32. +func appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(int32(v.Int()))) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + } + return b, nil +} + +var coderInt32PackedSliceValue = valueCoderFuncs{ + size: sizeInt32PackedSliceValue, + marshal: appendInt32PackedSliceValue, + unmarshal: consumeInt32SliceValue, + merge: mergeListValue, +} + +// sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32. +func sizeSint32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int32() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) +} + +// appendSint32 wire encodes a int32 pointer as a Sint32. +func appendSint32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + return b, nil +} + +// consumeSint32 wire decodes a int32 pointer as a Sint32. +func consumeSint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Int32() = int32(protowire.DecodeZigZag(v & math.MaxUint32)) + out.n = n + return out, nil +} + +var coderSint32 = pointerCoderFuncs{ + size: sizeSint32, + marshal: appendSint32, + unmarshal: consumeSint32, + merge: mergeInt32, +} + +// sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32. +// The zero value is not encoded. +func sizeSint32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) +} + +// appendSint32NoZero wire encodes a int32 pointer as a Sint32. +// The zero value is not encoded. +func appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + return b, nil +} + +var coderSint32NoZero = pointerCoderFuncs{ + size: sizeSint32NoZero, + marshal: appendSint32NoZero, + unmarshal: consumeSint32, + merge: mergeInt32NoZero, +} + +// sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32. +// It panics if the pointer is nil. +func sizeSint32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.Int32Ptr() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) +} + +// appendSint32Ptr wire encodes a *int32 pointer as a Sint32. +// It panics if the pointer is nil. +func appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Int32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + return b, nil +} + +// consumeSint32Ptr wire decodes a *int32 pointer as a Sint32. +func consumeSint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Int32Ptr() + if *vp == nil { + *vp = new(int32) + } + **vp = int32(protowire.DecodeZigZag(v & math.MaxUint32)) + out.n = n + return out, nil +} + +var coderSint32Ptr = pointerCoderFuncs{ + size: sizeSint32Ptr, + marshal: appendSint32Ptr, + unmarshal: consumeSint32Ptr, + merge: mergeInt32Ptr, +} + +// sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32. +func sizeSint32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int32Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) + } + return size +} + +// appendSint32Slice encodes a []int32 pointer as a repeated Sint32. +func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + } + return b, nil +} + +// consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32. +func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int32Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, int32(protowire.DecodeZigZag(v&math.MaxUint32))) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, int32(protowire.DecodeZigZag(v&math.MaxUint32))) + out.n = n + return out, nil +} + +var coderSint32Slice = pointerCoderFuncs{ + size: sizeSint32Slice, + marshal: appendSint32Slice, + unmarshal: consumeSint32Slice, + merge: mergeInt32Slice, +} + +// sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32. +func sizeSint32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32. +func appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + } + return b, nil +} + +var coderSint32PackedSlice = pointerCoderFuncs{ + size: sizeSint32PackedSlice, + marshal: appendSint32PackedSlice, + unmarshal: consumeSint32Slice, + merge: mergeInt32Slice, +} + +// sizeSint32Value returns the size of wire encoding a int32 value as a Sint32. +func sizeSint32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) +} + +// appendSint32Value encodes a int32 value as a Sint32. +func appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + return b, nil +} + +// consumeSint32Value decodes a int32 value as a Sint32. +func consumeSint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), out, nil +} + +var coderSint32Value = valueCoderFuncs{ + size: sizeSint32Value, + marshal: appendSint32Value, + unmarshal: consumeSint32Value, + merge: mergeScalarValue, +} + +// sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32. +func sizeSint32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return size +} + +// appendSint32SliceValue encodes a []int32 value as a repeated Sint32. +func appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return b, nil +} + +// consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32. +func consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + out.n = n + return listv, out, nil +} + +var coderSint32SliceValue = valueCoderFuncs{ + size: sizeSint32SliceValue, + marshal: appendSint32SliceValue, + unmarshal: consumeSint32SliceValue, + merge: mergeListValue, +} + +// sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32. +func sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32. +func appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return b, nil +} + +var coderSint32PackedSliceValue = valueCoderFuncs{ + size: sizeSint32PackedSliceValue, + marshal: appendSint32PackedSliceValue, + unmarshal: consumeSint32SliceValue, + merge: mergeListValue, +} + +// sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32. +func sizeUint32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Uint32() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendUint32 wire encodes a uint32 pointer as a Uint32. +func appendUint32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeUint32 wire decodes a uint32 pointer as a Uint32. +func consumeUint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Uint32() = uint32(v) + out.n = n + return out, nil +} + +var coderUint32 = pointerCoderFuncs{ + size: sizeUint32, + marshal: appendUint32, + unmarshal: consumeUint32, + merge: mergeUint32, +} + +// sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32. +// The zero value is not encoded. +func sizeUint32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Uint32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendUint32NoZero wire encodes a uint32 pointer as a Uint32. +// The zero value is not encoded. +func appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +var coderUint32NoZero = pointerCoderFuncs{ + size: sizeUint32NoZero, + marshal: appendUint32NoZero, + unmarshal: consumeUint32, + merge: mergeUint32NoZero, +} + +// sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32. +// It panics if the pointer is nil. +func sizeUint32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.Uint32Ptr() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendUint32Ptr wire encodes a *uint32 pointer as a Uint32. +// It panics if the pointer is nil. +func appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Uint32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32. +func consumeUint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Uint32Ptr() + if *vp == nil { + *vp = new(uint32) + } + **vp = uint32(v) + out.n = n + return out, nil +} + +var coderUint32Ptr = pointerCoderFuncs{ + size: sizeUint32Ptr, + marshal: appendUint32Ptr, + unmarshal: consumeUint32Ptr, + merge: mergeUint32Ptr, +} + +// sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32. +func sizeUint32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint32Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(uint64(v)) + } + return size +} + +// appendUint32Slice encodes a []uint32 pointer as a repeated Uint32. +func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +// consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32. +func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint32Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, uint32(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, uint32(v)) + out.n = n + return out, nil +} + +var coderUint32Slice = pointerCoderFuncs{ + size: sizeUint32Slice, + marshal: appendUint32Slice, + unmarshal: consumeUint32Slice, + merge: mergeUint32Slice, +} + +// sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32. +func sizeUint32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32. +func appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +var coderUint32PackedSlice = pointerCoderFuncs{ + size: sizeUint32PackedSlice, + marshal: appendUint32PackedSlice, + unmarshal: consumeUint32Slice, + merge: mergeUint32Slice, +} + +// sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32. +func sizeUint32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(uint32(v.Uint()))) +} + +// appendUint32Value encodes a uint32 value as a Uint32. +func appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + return b, nil +} + +// consumeUint32Value decodes a uint32 value as a Uint32. +func consumeUint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfUint32(uint32(v)), out, nil +} + +var coderUint32Value = valueCoderFuncs{ + size: sizeUint32Value, + marshal: appendUint32Value, + unmarshal: consumeUint32Value, + merge: mergeScalarValue, +} + +// sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32. +func sizeUint32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(uint32(v.Uint()))) + } + return size +} + +// appendUint32SliceValue encodes a []uint32 value as a repeated Uint32. +func appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + } + return b, nil +} + +// consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32. +func consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + out.n = n + return listv, out, nil +} + +var coderUint32SliceValue = valueCoderFuncs{ + size: sizeUint32SliceValue, + marshal: appendUint32SliceValue, + unmarshal: consumeUint32SliceValue, + merge: mergeListValue, +} + +// sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32. +func sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(uint32(v.Uint()))) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32. +func appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(uint32(v.Uint()))) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + } + return b, nil +} + +var coderUint32PackedSliceValue = valueCoderFuncs{ + size: sizeUint32PackedSliceValue, + marshal: appendUint32PackedSliceValue, + unmarshal: consumeUint32SliceValue, + merge: mergeListValue, +} + +// sizeInt64 returns the size of wire encoding a int64 pointer as a Int64. +func sizeInt64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int64() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt64 wire encodes a int64 pointer as a Int64. +func appendInt64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt64 wire decodes a int64 pointer as a Int64. +func consumeInt64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Int64() = int64(v) + out.n = n + return out, nil +} + +var coderInt64 = pointerCoderFuncs{ + size: sizeInt64, + marshal: appendInt64, + unmarshal: consumeInt64, + merge: mergeInt64, +} + +// sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64. +// The zero value is not encoded. +func sizeInt64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt64NoZero wire encodes a int64 pointer as a Int64. +// The zero value is not encoded. +func appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +var coderInt64NoZero = pointerCoderFuncs{ + size: sizeInt64NoZero, + marshal: appendInt64NoZero, + unmarshal: consumeInt64, + merge: mergeInt64NoZero, +} + +// sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64. +// It panics if the pointer is nil. +func sizeInt64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.Int64Ptr() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt64Ptr wire encodes a *int64 pointer as a Int64. +// It panics if the pointer is nil. +func appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Int64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt64Ptr wire decodes a *int64 pointer as a Int64. +func consumeInt64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Int64Ptr() + if *vp == nil { + *vp = new(int64) + } + **vp = int64(v) + out.n = n + return out, nil +} + +var coderInt64Ptr = pointerCoderFuncs{ + size: sizeInt64Ptr, + marshal: appendInt64Ptr, + unmarshal: consumeInt64Ptr, + merge: mergeInt64Ptr, +} + +// sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64. +func sizeInt64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int64Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(uint64(v)) + } + return size +} + +// appendInt64Slice encodes a []int64 pointer as a repeated Int64. +func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +// consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64. +func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int64Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, int64(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, int64(v)) + out.n = n + return out, nil +} + +var coderInt64Slice = pointerCoderFuncs{ + size: sizeInt64Slice, + marshal: appendInt64Slice, + unmarshal: consumeInt64Slice, + merge: mergeInt64Slice, +} + +// sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64. +func sizeInt64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64. +func appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +var coderInt64PackedSlice = pointerCoderFuncs{ + size: sizeInt64PackedSlice, + marshal: appendInt64PackedSlice, + unmarshal: consumeInt64Slice, + merge: mergeInt64Slice, +} + +// sizeInt64Value returns the size of wire encoding a int64 value as a Int64. +func sizeInt64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(v.Int())) +} + +// appendInt64Value encodes a int64 value as a Int64. +func appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Int())) + return b, nil +} + +// consumeInt64Value decodes a int64 value as a Int64. +func consumeInt64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfInt64(int64(v)), out, nil +} + +var coderInt64Value = valueCoderFuncs{ + size: sizeInt64Value, + marshal: appendInt64Value, + unmarshal: consumeInt64Value, + merge: mergeScalarValue, +} + +// sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64. +func sizeInt64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(v.Int())) + } + return size +} + +// appendInt64SliceValue encodes a []int64 value as a repeated Int64. +func appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Int())) + } + return b, nil +} + +// consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64. +func consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + out.n = n + return listv, out, nil +} + +var coderInt64SliceValue = valueCoderFuncs{ + size: sizeInt64SliceValue, + marshal: appendInt64SliceValue, + unmarshal: consumeInt64SliceValue, + merge: mergeListValue, +} + +// sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64. +func sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Int())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64. +func appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Int())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(v.Int())) + } + return b, nil +} + +var coderInt64PackedSliceValue = valueCoderFuncs{ + size: sizeInt64PackedSliceValue, + marshal: appendInt64PackedSliceValue, + unmarshal: consumeInt64SliceValue, + merge: mergeListValue, +} + +// sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64. +func sizeSint64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int64() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) +} + +// appendSint64 wire encodes a int64 pointer as a Sint64. +func appendSint64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + return b, nil +} + +// consumeSint64 wire decodes a int64 pointer as a Sint64. +func consumeSint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Int64() = protowire.DecodeZigZag(v) + out.n = n + return out, nil +} + +var coderSint64 = pointerCoderFuncs{ + size: sizeSint64, + marshal: appendSint64, + unmarshal: consumeSint64, + merge: mergeInt64, +} + +// sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64. +// The zero value is not encoded. +func sizeSint64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) +} + +// appendSint64NoZero wire encodes a int64 pointer as a Sint64. +// The zero value is not encoded. +func appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + return b, nil +} + +var coderSint64NoZero = pointerCoderFuncs{ + size: sizeSint64NoZero, + marshal: appendSint64NoZero, + unmarshal: consumeSint64, + merge: mergeInt64NoZero, +} + +// sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64. +// It panics if the pointer is nil. +func sizeSint64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.Int64Ptr() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) +} + +// appendSint64Ptr wire encodes a *int64 pointer as a Sint64. +// It panics if the pointer is nil. +func appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Int64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + return b, nil +} + +// consumeSint64Ptr wire decodes a *int64 pointer as a Sint64. +func consumeSint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Int64Ptr() + if *vp == nil { + *vp = new(int64) + } + **vp = protowire.DecodeZigZag(v) + out.n = n + return out, nil +} + +var coderSint64Ptr = pointerCoderFuncs{ + size: sizeSint64Ptr, + marshal: appendSint64Ptr, + unmarshal: consumeSint64Ptr, + merge: mergeInt64Ptr, +} + +// sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64. +func sizeSint64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int64Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) + } + return size +} + +// appendSint64Slice encodes a []int64 pointer as a repeated Sint64. +func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + } + return b, nil +} + +// consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64. +func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int64Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, protowire.DecodeZigZag(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, protowire.DecodeZigZag(v)) + out.n = n + return out, nil +} + +var coderSint64Slice = pointerCoderFuncs{ + size: sizeSint64Slice, + marshal: appendSint64Slice, + unmarshal: consumeSint64Slice, + merge: mergeInt64Slice, +} + +// sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64. +func sizeSint64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64. +func appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + } + return b, nil +} + +var coderSint64PackedSlice = pointerCoderFuncs{ + size: sizeSint64PackedSlice, + marshal: appendSint64PackedSlice, + unmarshal: consumeSint64Slice, + merge: mergeInt64Slice, +} + +// sizeSint64Value returns the size of wire encoding a int64 value as a Sint64. +func sizeSint64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) +} + +// appendSint64Value encodes a int64 value as a Sint64. +func appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + return b, nil +} + +// consumeSint64Value decodes a int64 value as a Sint64. +func consumeSint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), out, nil +} + +var coderSint64Value = valueCoderFuncs{ + size: sizeSint64Value, + marshal: appendSint64Value, + unmarshal: consumeSint64Value, + merge: mergeScalarValue, +} + +// sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64. +func sizeSint64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + } + return size +} + +// appendSint64SliceValue encodes a []int64 value as a repeated Sint64. +func appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + } + return b, nil +} + +// consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64. +func consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + out.n = n + return listv, out, nil +} + +var coderSint64SliceValue = valueCoderFuncs{ + size: sizeSint64SliceValue, + marshal: appendSint64SliceValue, + unmarshal: consumeSint64SliceValue, + merge: mergeListValue, +} + +// sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64. +func sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64. +func appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + } + return b, nil +} + +var coderSint64PackedSliceValue = valueCoderFuncs{ + size: sizeSint64PackedSliceValue, + marshal: appendSint64PackedSliceValue, + unmarshal: consumeSint64SliceValue, + merge: mergeListValue, +} + +// sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64. +func sizeUint64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Uint64() + return f.tagsize + protowire.SizeVarint(v) +} + +// appendUint64 wire encodes a uint64 pointer as a Uint64. +func appendUint64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + return b, nil +} + +// consumeUint64 wire decodes a uint64 pointer as a Uint64. +func consumeUint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Uint64() = v + out.n = n + return out, nil +} + +var coderUint64 = pointerCoderFuncs{ + size: sizeUint64, + marshal: appendUint64, + unmarshal: consumeUint64, + merge: mergeUint64, +} + +// sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64. +// The zero value is not encoded. +func sizeUint64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Uint64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(v) +} + +// appendUint64NoZero wire encodes a uint64 pointer as a Uint64. +// The zero value is not encoded. +func appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + return b, nil +} + +var coderUint64NoZero = pointerCoderFuncs{ + size: sizeUint64NoZero, + marshal: appendUint64NoZero, + unmarshal: consumeUint64, + merge: mergeUint64NoZero, +} + +// sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64. +// It panics if the pointer is nil. +func sizeUint64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.Uint64Ptr() + return f.tagsize + protowire.SizeVarint(v) +} + +// appendUint64Ptr wire encodes a *uint64 pointer as a Uint64. +// It panics if the pointer is nil. +func appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Uint64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + return b, nil +} + +// consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64. +func consumeUint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Uint64Ptr() + if *vp == nil { + *vp = new(uint64) + } + **vp = v + out.n = n + return out, nil +} + +var coderUint64Ptr = pointerCoderFuncs{ + size: sizeUint64Ptr, + marshal: appendUint64Ptr, + unmarshal: consumeUint64Ptr, + merge: mergeUint64Ptr, +} + +// sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64. +func sizeUint64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint64Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(v) + } + return size +} + +// appendUint64Slice encodes a []uint64 pointer as a repeated Uint64. +func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + } + return b, nil +} + +// consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64. +func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint64Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, v) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderUint64Slice = pointerCoderFuncs{ + size: sizeUint64Slice, + marshal: appendUint64Slice, + unmarshal: consumeUint64Slice, + merge: mergeUint64Slice, +} + +// sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64. +func sizeUint64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(v) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64. +func appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(v) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, v) + } + return b, nil +} + +var coderUint64PackedSlice = pointerCoderFuncs{ + size: sizeUint64PackedSlice, + marshal: appendUint64PackedSlice, + unmarshal: consumeUint64Slice, + merge: mergeUint64Slice, +} + +// sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64. +func sizeUint64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeVarint(v.Uint()) +} + +// appendUint64Value encodes a uint64 value as a Uint64. +func appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, v.Uint()) + return b, nil +} + +// consumeUint64Value decodes a uint64 value as a Uint64. +func consumeUint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfUint64(v), out, nil +} + +var coderUint64Value = valueCoderFuncs{ + size: sizeUint64Value, + marshal: appendUint64Value, + unmarshal: consumeUint64Value, + merge: mergeScalarValue, +} + +// sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64. +func sizeUint64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(v.Uint()) + } + return size +} + +// appendUint64SliceValue encodes a []uint64 value as a repeated Uint64. +func appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, v.Uint()) + } + return b, nil +} + +// consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64. +func consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint64(v)) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint64(v)) + out.n = n + return listv, out, nil +} + +var coderUint64SliceValue = valueCoderFuncs{ + size: sizeUint64SliceValue, + marshal: appendUint64SliceValue, + unmarshal: consumeUint64SliceValue, + merge: mergeListValue, +} + +// sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64. +func sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(v.Uint()) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64. +func appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(v.Uint()) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, v.Uint()) + } + return b, nil +} + +var coderUint64PackedSliceValue = valueCoderFuncs{ + size: sizeUint64PackedSliceValue, + marshal: appendUint64PackedSliceValue, + unmarshal: consumeUint64SliceValue, + merge: mergeListValue, +} + +// sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32. +func sizeSfixed32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed32() +} + +// appendSfixed32 wire encodes a int32 pointer as a Sfixed32. +func appendSfixed32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + return b, nil +} + +// consumeSfixed32 wire decodes a int32 pointer as a Sfixed32. +func consumeSfixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Int32() = int32(v) + out.n = n + return out, nil +} + +var coderSfixed32 = pointerCoderFuncs{ + size: sizeSfixed32, + marshal: appendSfixed32, + unmarshal: consumeSfixed32, + merge: mergeInt32, +} + +// sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32. +// The zero value is not encoded. +func sizeSfixed32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed32() +} + +// appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32. +// The zero value is not encoded. +func appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + return b, nil +} + +var coderSfixed32NoZero = pointerCoderFuncs{ + size: sizeSfixed32NoZero, + marshal: appendSfixed32NoZero, + unmarshal: consumeSfixed32, + merge: mergeInt32NoZero, +} + +// sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32. +// It panics if the pointer is nil. +func sizeSfixed32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed32() +} + +// appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32. +// It panics if the pointer is nil. +func appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Int32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + return b, nil +} + +// consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32. +func consumeSfixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Int32Ptr() + if *vp == nil { + *vp = new(int32) + } + **vp = int32(v) + out.n = n + return out, nil +} + +var coderSfixed32Ptr = pointerCoderFuncs{ + size: sizeSfixed32Ptr, + marshal: appendSfixed32Ptr, + unmarshal: consumeSfixed32Ptr, + merge: mergeInt32Ptr, +} + +// sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32. +func sizeSfixed32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int32Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed32()) + return size +} + +// appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32. +func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + } + return b, nil +} + +// consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32. +func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int32Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, int32(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, int32(v)) + out.n = n + return out, nil +} + +var coderSfixed32Slice = pointerCoderFuncs{ + size: sizeSfixed32Slice, + marshal: appendSfixed32Slice, + unmarshal: consumeSfixed32Slice, + merge: mergeInt32Slice, +} + +// sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32. +func sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int32Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed32() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32. +func appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed32(b, uint32(v)) + } + return b, nil +} + +var coderSfixed32PackedSlice = pointerCoderFuncs{ + size: sizeSfixed32PackedSlice, + marshal: appendSfixed32PackedSlice, + unmarshal: consumeSfixed32Slice, + merge: mergeInt32Slice, +} + +// sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32. +func sizeSfixed32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeFixed32() +} + +// appendSfixed32Value encodes a int32 value as a Sfixed32. +func appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Int())) + return b, nil +} + +// consumeSfixed32Value decodes a int32 value as a Sfixed32. +func consumeSfixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfInt32(int32(v)), out, nil +} + +var coderSfixed32Value = valueCoderFuncs{ + size: sizeSfixed32Value, + marshal: appendSfixed32Value, + unmarshal: consumeSfixed32Value, + merge: mergeScalarValue, +} + +// sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32. +func sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed32()) + return size +} + +// appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32. +func appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Int())) + } + return b, nil +} + +// consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32. +func consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + out.n = n + return listv, out, nil +} + +var coderSfixed32SliceValue = valueCoderFuncs{ + size: sizeSfixed32SliceValue, + marshal: appendSfixed32SliceValue, + unmarshal: consumeSfixed32SliceValue, + merge: mergeListValue, +} + +// sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32. +func sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed32() + return tagsize + protowire.SizeBytes(n) +} + +// appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32. +func appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed32(b, uint32(v.Int())) + } + return b, nil +} + +var coderSfixed32PackedSliceValue = valueCoderFuncs{ + size: sizeSfixed32PackedSliceValue, + marshal: appendSfixed32PackedSliceValue, + unmarshal: consumeSfixed32SliceValue, + merge: mergeListValue, +} + +// sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32. +func sizeFixed32(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed32() +} + +// appendFixed32 wire encodes a uint32 pointer as a Fixed32. +func appendFixed32(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + return b, nil +} + +// consumeFixed32 wire decodes a uint32 pointer as a Fixed32. +func consumeFixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Uint32() = v + out.n = n + return out, nil +} + +var coderFixed32 = pointerCoderFuncs{ + size: sizeFixed32, + marshal: appendFixed32, + unmarshal: consumeFixed32, + merge: mergeUint32, +} + +// sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32. +// The zero value is not encoded. +func sizeFixed32NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Uint32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed32() +} + +// appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32. +// The zero value is not encoded. +func appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + return b, nil +} + +var coderFixed32NoZero = pointerCoderFuncs{ + size: sizeFixed32NoZero, + marshal: appendFixed32NoZero, + unmarshal: consumeFixed32, + merge: mergeUint32NoZero, +} + +// sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32. +// It panics if the pointer is nil. +func sizeFixed32Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed32() +} + +// appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32. +// It panics if the pointer is nil. +func appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Uint32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + return b, nil +} + +// consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32. +func consumeFixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Uint32Ptr() + if *vp == nil { + *vp = new(uint32) + } + **vp = v + out.n = n + return out, nil +} + +var coderFixed32Ptr = pointerCoderFuncs{ + size: sizeFixed32Ptr, + marshal: appendFixed32Ptr, + unmarshal: consumeFixed32Ptr, + merge: mergeUint32Ptr, +} + +// sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32. +func sizeFixed32Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint32Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed32()) + return size +} + +// appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32. +func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + } + return b, nil +} + +// consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32. +func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint32Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, v) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderFixed32Slice = pointerCoderFuncs{ + size: sizeFixed32Slice, + marshal: appendFixed32Slice, + unmarshal: consumeFixed32Slice, + merge: mergeUint32Slice, +} + +// sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32. +func sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint32Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed32() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32. +func appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed32(b, v) + } + return b, nil +} + +var coderFixed32PackedSlice = pointerCoderFuncs{ + size: sizeFixed32PackedSlice, + marshal: appendFixed32PackedSlice, + unmarshal: consumeFixed32Slice, + merge: mergeUint32Slice, +} + +// sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32. +func sizeFixed32Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeFixed32() +} + +// appendFixed32Value encodes a uint32 value as a Fixed32. +func appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Uint())) + return b, nil +} + +// consumeFixed32Value decodes a uint32 value as a Fixed32. +func consumeFixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfUint32(uint32(v)), out, nil +} + +var coderFixed32Value = valueCoderFuncs{ + size: sizeFixed32Value, + marshal: appendFixed32Value, + unmarshal: consumeFixed32Value, + merge: mergeScalarValue, +} + +// sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32. +func sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed32()) + return size +} + +// appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32. +func appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Uint())) + } + return b, nil +} + +// consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32. +func consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + out.n = n + return listv, out, nil +} + +var coderFixed32SliceValue = valueCoderFuncs{ + size: sizeFixed32SliceValue, + marshal: appendFixed32SliceValue, + unmarshal: consumeFixed32SliceValue, + merge: mergeListValue, +} + +// sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32. +func sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed32() + return tagsize + protowire.SizeBytes(n) +} + +// appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32. +func appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed32(b, uint32(v.Uint())) + } + return b, nil +} + +var coderFixed32PackedSliceValue = valueCoderFuncs{ + size: sizeFixed32PackedSliceValue, + marshal: appendFixed32PackedSliceValue, + unmarshal: consumeFixed32SliceValue, + merge: mergeListValue, +} + +// sizeFloat returns the size of wire encoding a float32 pointer as a Float. +func sizeFloat(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed32() +} + +// appendFloat wire encodes a float32 pointer as a Float. +func appendFloat(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Float32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + return b, nil +} + +// consumeFloat wire decodes a float32 pointer as a Float. +func consumeFloat(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Float32() = math.Float32frombits(v) + out.n = n + return out, nil +} + +var coderFloat = pointerCoderFuncs{ + size: sizeFloat, + marshal: appendFloat, + unmarshal: consumeFloat, + merge: mergeFloat32, +} + +// sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float. +// The zero value is not encoded. +func sizeFloatNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Float32() + if v == 0 && !math.Signbit(float64(v)) { + return 0 + } + return f.tagsize + protowire.SizeFixed32() +} + +// appendFloatNoZero wire encodes a float32 pointer as a Float. +// The zero value is not encoded. +func appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Float32() + if v == 0 && !math.Signbit(float64(v)) { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + return b, nil +} + +var coderFloatNoZero = pointerCoderFuncs{ + size: sizeFloatNoZero, + marshal: appendFloatNoZero, + unmarshal: consumeFloat, + merge: mergeFloat32NoZero, +} + +// sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float. +// It panics if the pointer is nil. +func sizeFloatPtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed32() +} + +// appendFloatPtr wire encodes a *float32 pointer as a Float. +// It panics if the pointer is nil. +func appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Float32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + return b, nil +} + +// consumeFloatPtr wire decodes a *float32 pointer as a Float. +func consumeFloatPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Float32Ptr() + if *vp == nil { + *vp = new(float32) + } + **vp = math.Float32frombits(v) + out.n = n + return out, nil +} + +var coderFloatPtr = pointerCoderFuncs{ + size: sizeFloatPtr, + marshal: appendFloatPtr, + unmarshal: consumeFloatPtr, + merge: mergeFloat32Ptr, +} + +// sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float. +func sizeFloatSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Float32Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed32()) + return size +} + +// appendFloatSlice encodes a []float32 pointer as a repeated Float. +func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Float32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + } + return b, nil +} + +// consumeFloatSlice wire decodes a []float32 pointer as a repeated Float. +func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Float32Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, math.Float32frombits(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, math.Float32frombits(v)) + out.n = n + return out, nil +} + +var coderFloatSlice = pointerCoderFuncs{ + size: sizeFloatSlice, + marshal: appendFloatSlice, + unmarshal: consumeFloatSlice, + merge: mergeFloat32Slice, +} + +// sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float. +func sizeFloatPackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Float32Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed32() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float. +func appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Float32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed32(b, math.Float32bits(v)) + } + return b, nil +} + +var coderFloatPackedSlice = pointerCoderFuncs{ + size: sizeFloatPackedSlice, + marshal: appendFloatPackedSlice, + unmarshal: consumeFloatSlice, + merge: mergeFloat32Slice, +} + +// sizeFloatValue returns the size of wire encoding a float32 value as a Float. +func sizeFloatValue(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeFixed32() +} + +// appendFloatValue encodes a float32 value as a Float. +func appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + return b, nil +} + +// consumeFloatValue decodes a float32 value as a Float. +func consumeFloatValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil +} + +var coderFloatValue = valueCoderFuncs{ + size: sizeFloatValue, + marshal: appendFloatValue, + unmarshal: consumeFloatValue, + merge: mergeScalarValue, +} + +// sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float. +func sizeFloatSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed32()) + return size +} + +// appendFloatSliceValue encodes a []float32 value as a repeated Float. +func appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + } + return b, nil +} + +// consumeFloatSliceValue wire decodes a []float32 value as a repeated Float. +func consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + out.n = n + return listv, out, nil +} + +var coderFloatSliceValue = valueCoderFuncs{ + size: sizeFloatSliceValue, + marshal: appendFloatSliceValue, + unmarshal: consumeFloatSliceValue, + merge: mergeListValue, +} + +// sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float. +func sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed32() + return tagsize + protowire.SizeBytes(n) +} + +// appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float. +func appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + } + return b, nil +} + +var coderFloatPackedSliceValue = valueCoderFuncs{ + size: sizeFloatPackedSliceValue, + marshal: appendFloatPackedSliceValue, + unmarshal: consumeFloatSliceValue, + merge: mergeListValue, +} + +// sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64. +func sizeSfixed64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed64() +} + +// appendSfixed64 wire encodes a int64 pointer as a Sfixed64. +func appendSfixed64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + return b, nil +} + +// consumeSfixed64 wire decodes a int64 pointer as a Sfixed64. +func consumeSfixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Int64() = int64(v) + out.n = n + return out, nil +} + +var coderSfixed64 = pointerCoderFuncs{ + size: sizeSfixed64, + marshal: appendSfixed64, + unmarshal: consumeSfixed64, + merge: mergeInt64, +} + +// sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64. +// The zero value is not encoded. +func sizeSfixed64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Int64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed64() +} + +// appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64. +// The zero value is not encoded. +func appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Int64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + return b, nil +} + +var coderSfixed64NoZero = pointerCoderFuncs{ + size: sizeSfixed64NoZero, + marshal: appendSfixed64NoZero, + unmarshal: consumeSfixed64, + merge: mergeInt64NoZero, +} + +// sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64. +// It panics if the pointer is nil. +func sizeSfixed64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed64() +} + +// appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64. +// It panics if the pointer is nil. +func appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Int64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + return b, nil +} + +// consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64. +func consumeSfixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Int64Ptr() + if *vp == nil { + *vp = new(int64) + } + **vp = int64(v) + out.n = n + return out, nil +} + +var coderSfixed64Ptr = pointerCoderFuncs{ + size: sizeSfixed64Ptr, + marshal: appendSfixed64Ptr, + unmarshal: consumeSfixed64Ptr, + merge: mergeInt64Ptr, +} + +// sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64. +func sizeSfixed64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int64Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed64()) + return size +} + +// appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64. +func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + } + return b, nil +} + +// consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64. +func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int64Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, int64(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, int64(v)) + out.n = n + return out, nil +} + +var coderSfixed64Slice = pointerCoderFuncs{ + size: sizeSfixed64Slice, + marshal: appendSfixed64Slice, + unmarshal: consumeSfixed64Slice, + merge: mergeInt64Slice, +} + +// sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64. +func sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Int64Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed64() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64. +func appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed64(b, uint64(v)) + } + return b, nil +} + +var coderSfixed64PackedSlice = pointerCoderFuncs{ + size: sizeSfixed64PackedSlice, + marshal: appendSfixed64PackedSlice, + unmarshal: consumeSfixed64Slice, + merge: mergeInt64Slice, +} + +// sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64. +func sizeSfixed64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeFixed64() +} + +// appendSfixed64Value encodes a int64 value as a Sfixed64. +func appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, uint64(v.Int())) + return b, nil +} + +// consumeSfixed64Value decodes a int64 value as a Sfixed64. +func consumeSfixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfInt64(int64(v)), out, nil +} + +var coderSfixed64Value = valueCoderFuncs{ + size: sizeSfixed64Value, + marshal: appendSfixed64Value, + unmarshal: consumeSfixed64Value, + merge: mergeScalarValue, +} + +// sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64. +func sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed64()) + return size +} + +// appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64. +func appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, uint64(v.Int())) + } + return b, nil +} + +// consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64. +func consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + out.n = n + return listv, out, nil +} + +var coderSfixed64SliceValue = valueCoderFuncs{ + size: sizeSfixed64SliceValue, + marshal: appendSfixed64SliceValue, + unmarshal: consumeSfixed64SliceValue, + merge: mergeListValue, +} + +// sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64. +func sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed64() + return tagsize + protowire.SizeBytes(n) +} + +// appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64. +func appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed64(b, uint64(v.Int())) + } + return b, nil +} + +var coderSfixed64PackedSliceValue = valueCoderFuncs{ + size: sizeSfixed64PackedSliceValue, + marshal: appendSfixed64PackedSliceValue, + unmarshal: consumeSfixed64SliceValue, + merge: mergeListValue, +} + +// sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64. +func sizeFixed64(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed64() +} + +// appendFixed64 wire encodes a uint64 pointer as a Fixed64. +func appendFixed64(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + return b, nil +} + +// consumeFixed64 wire decodes a uint64 pointer as a Fixed64. +func consumeFixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Uint64() = v + out.n = n + return out, nil +} + +var coderFixed64 = pointerCoderFuncs{ + size: sizeFixed64, + marshal: appendFixed64, + unmarshal: consumeFixed64, + merge: mergeUint64, +} + +// sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64. +// The zero value is not encoded. +func sizeFixed64NoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Uint64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed64() +} + +// appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64. +// The zero value is not encoded. +func appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Uint64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + return b, nil +} + +var coderFixed64NoZero = pointerCoderFuncs{ + size: sizeFixed64NoZero, + marshal: appendFixed64NoZero, + unmarshal: consumeFixed64, + merge: mergeUint64NoZero, +} + +// sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64. +// It panics if the pointer is nil. +func sizeFixed64Ptr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed64() +} + +// appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64. +// It panics if the pointer is nil. +func appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Uint64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + return b, nil +} + +// consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64. +func consumeFixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Uint64Ptr() + if *vp == nil { + *vp = new(uint64) + } + **vp = v + out.n = n + return out, nil +} + +var coderFixed64Ptr = pointerCoderFuncs{ + size: sizeFixed64Ptr, + marshal: appendFixed64Ptr, + unmarshal: consumeFixed64Ptr, + merge: mergeUint64Ptr, +} + +// sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64. +func sizeFixed64Slice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint64Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed64()) + return size +} + +// appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64. +func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + } + return b, nil +} + +// consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64. +func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint64Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, v) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderFixed64Slice = pointerCoderFuncs{ + size: sizeFixed64Slice, + marshal: appendFixed64Slice, + unmarshal: consumeFixed64Slice, + merge: mergeUint64Slice, +} + +// sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64. +func sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Uint64Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed64() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64. +func appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed64(b, v) + } + return b, nil +} + +var coderFixed64PackedSlice = pointerCoderFuncs{ + size: sizeFixed64PackedSlice, + marshal: appendFixed64PackedSlice, + unmarshal: consumeFixed64Slice, + merge: mergeUint64Slice, +} + +// sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64. +func sizeFixed64Value(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeFixed64() +} + +// appendFixed64Value encodes a uint64 value as a Fixed64. +func appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, v.Uint()) + return b, nil +} + +// consumeFixed64Value decodes a uint64 value as a Fixed64. +func consumeFixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfUint64(v), out, nil +} + +var coderFixed64Value = valueCoderFuncs{ + size: sizeFixed64Value, + marshal: appendFixed64Value, + unmarshal: consumeFixed64Value, + merge: mergeScalarValue, +} + +// sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64. +func sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed64()) + return size +} + +// appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64. +func appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, v.Uint()) + } + return b, nil +} + +// consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64. +func consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint64(v)) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint64(v)) + out.n = n + return listv, out, nil +} + +var coderFixed64SliceValue = valueCoderFuncs{ + size: sizeFixed64SliceValue, + marshal: appendFixed64SliceValue, + unmarshal: consumeFixed64SliceValue, + merge: mergeListValue, +} + +// sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64. +func sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed64() + return tagsize + protowire.SizeBytes(n) +} + +// appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64. +func appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed64(b, v.Uint()) + } + return b, nil +} + +var coderFixed64PackedSliceValue = valueCoderFuncs{ + size: sizeFixed64PackedSliceValue, + marshal: appendFixed64PackedSliceValue, + unmarshal: consumeFixed64SliceValue, + merge: mergeListValue, +} + +// sizeDouble returns the size of wire encoding a float64 pointer as a Double. +func sizeDouble(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed64() +} + +// appendDouble wire encodes a float64 pointer as a Double. +func appendDouble(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Float64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + return b, nil +} + +// consumeDouble wire decodes a float64 pointer as a Double. +func consumeDouble(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Float64() = math.Float64frombits(v) + out.n = n + return out, nil +} + +var coderDouble = pointerCoderFuncs{ + size: sizeDouble, + marshal: appendDouble, + unmarshal: consumeDouble, + merge: mergeFloat64, +} + +// sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double. +// The zero value is not encoded. +func sizeDoubleNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Float64() + if v == 0 && !math.Signbit(float64(v)) { + return 0 + } + return f.tagsize + protowire.SizeFixed64() +} + +// appendDoubleNoZero wire encodes a float64 pointer as a Double. +// The zero value is not encoded. +func appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Float64() + if v == 0 && !math.Signbit(float64(v)) { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + return b, nil +} + +var coderDoubleNoZero = pointerCoderFuncs{ + size: sizeDoubleNoZero, + marshal: appendDoubleNoZero, + unmarshal: consumeDouble, + merge: mergeFloat64NoZero, +} + +// sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double. +// It panics if the pointer is nil. +func sizeDoublePtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed64() +} + +// appendDoublePtr wire encodes a *float64 pointer as a Double. +// It panics if the pointer is nil. +func appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.Float64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + return b, nil +} + +// consumeDoublePtr wire decodes a *float64 pointer as a Double. +func consumeDoublePtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.Float64Ptr() + if *vp == nil { + *vp = new(float64) + } + **vp = math.Float64frombits(v) + out.n = n + return out, nil +} + +var coderDoublePtr = pointerCoderFuncs{ + size: sizeDoublePtr, + marshal: appendDoublePtr, + unmarshal: consumeDoublePtr, + merge: mergeFloat64Ptr, +} + +// sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double. +func sizeDoubleSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Float64Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed64()) + return size +} + +// appendDoubleSlice encodes a []float64 pointer as a repeated Double. +func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Float64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + } + return b, nil +} + +// consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double. +func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Float64Slice() + if wtyp == protowire.BytesType { + s := *sp + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + s = append(s, math.Float64frombits(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, math.Float64frombits(v)) + out.n = n + return out, nil +} + +var coderDoubleSlice = pointerCoderFuncs{ + size: sizeDoubleSlice, + marshal: appendDoubleSlice, + unmarshal: consumeDoubleSlice, + merge: mergeFloat64Slice, +} + +// sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double. +func sizeDoublePackedSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.Float64Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed64() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double. +func appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.Float64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed64(b, math.Float64bits(v)) + } + return b, nil +} + +var coderDoublePackedSlice = pointerCoderFuncs{ + size: sizeDoublePackedSlice, + marshal: appendDoublePackedSlice, + unmarshal: consumeDoubleSlice, + merge: mergeFloat64Slice, +} + +// sizeDoubleValue returns the size of wire encoding a float64 value as a Double. +func sizeDoubleValue(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeFixed64() +} + +// appendDoubleValue encodes a float64 value as a Double. +func appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + return b, nil +} + +// consumeDoubleValue decodes a float64 value as a Double. +func consumeDoubleValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil +} + +var coderDoubleValue = valueCoderFuncs{ + size: sizeDoubleValue, + marshal: appendDoubleValue, + unmarshal: consumeDoubleValue, + merge: mergeScalarValue, +} + +// sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double. +func sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed64()) + return size +} + +// appendDoubleSliceValue encodes a []float64 value as a repeated Double. +func appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + } + return b, nil +} + +// consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double. +func consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + out.n = n + return listv, out, nil +} + +var coderDoubleSliceValue = valueCoderFuncs{ + size: sizeDoubleSliceValue, + marshal: appendDoubleSliceValue, + unmarshal: consumeDoubleSliceValue, + merge: mergeListValue, +} + +// sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double. +func sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed64() + return tagsize + protowire.SizeBytes(n) +} + +// appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double. +func appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + } + return b, nil +} + +var coderDoublePackedSliceValue = valueCoderFuncs{ + size: sizeDoublePackedSliceValue, + marshal: appendDoublePackedSliceValue, + unmarshal: consumeDoubleSliceValue, + merge: mergeListValue, +} + +// sizeString returns the size of wire encoding a string pointer as a String. +func sizeString(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.String() + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendString wire encodes a string pointer as a String. +func appendString(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.String() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + return b, nil +} + +// consumeString wire decodes a string pointer as a String. +func consumeString(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.String() = v + out.n = n + return out, nil +} + +var coderString = pointerCoderFuncs{ + size: sizeString, + marshal: appendString, + unmarshal: consumeString, + merge: mergeString, +} + +// appendStringValidateUTF8 wire encodes a string pointer as a String. +func appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.String() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeStringValidateUTF8 wire decodes a string pointer as a String. +func consumeStringValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if !utf8.ValidString(v) { + return out, errInvalidUTF8{} + } + *p.String() = v + out.n = n + return out, nil +} + +var coderStringValidateUTF8 = pointerCoderFuncs{ + size: sizeString, + marshal: appendStringValidateUTF8, + unmarshal: consumeStringValidateUTF8, + merge: mergeString, +} + +// sizeStringNoZero returns the size of wire encoding a string pointer as a String. +// The zero value is not encoded. +func sizeStringNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.String() + if len(v) == 0 { + return 0 + } + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendStringNoZero wire encodes a string pointer as a String. +// The zero value is not encoded. +func appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.String() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + return b, nil +} + +var coderStringNoZero = pointerCoderFuncs{ + size: sizeStringNoZero, + marshal: appendStringNoZero, + unmarshal: consumeString, + merge: mergeStringNoZero, +} + +// appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String. +// The zero value is not encoded. +func appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.String() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +var coderStringNoZeroValidateUTF8 = pointerCoderFuncs{ + size: sizeStringNoZero, + marshal: appendStringNoZeroValidateUTF8, + unmarshal: consumeStringValidateUTF8, + merge: mergeStringNoZero, +} + +// sizeStringPtr returns the size of wire encoding a *string pointer as a String. +// It panics if the pointer is nil. +func sizeStringPtr(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := **p.StringPtr() + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendStringPtr wire encodes a *string pointer as a String. +// It panics if the pointer is nil. +func appendStringPtr(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := **p.StringPtr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + return b, nil +} + +// consumeStringPtr wire decodes a *string pointer as a String. +func consumeStringPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return out, protowire.ParseError(n) + } + vp := p.StringPtr() + if *vp == nil { + *vp = new(string) + } + **vp = v + out.n = n + return out, nil +} + +var coderStringPtr = pointerCoderFuncs{ + size: sizeStringPtr, + marshal: appendStringPtr, + unmarshal: consumeStringPtr, + merge: mergeStringPtr, +} + +// sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String. +func sizeStringSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.StringSlice() + for _, v := range s { + size += f.tagsize + protowire.SizeBytes(len(v)) + } + return size +} + +// appendStringSlice encodes a []string pointer as a repeated String. +func appendStringSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.StringSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + } + return b, nil +} + +// consumeStringSlice wire decodes a []string pointer as a repeated String. +func consumeStringSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.StringSlice() + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderStringSlice = pointerCoderFuncs{ + size: sizeStringSlice, + marshal: appendStringSlice, + unmarshal: consumeStringSlice, + merge: mergeStringSlice, +} + +// appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String. +func appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.StringSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + } + return b, nil +} + +// consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String. +func consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.StringSlice() + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if !utf8.ValidString(v) { + return out, errInvalidUTF8{} + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderStringSliceValidateUTF8 = pointerCoderFuncs{ + size: sizeStringSlice, + marshal: appendStringSliceValidateUTF8, + unmarshal: consumeStringSliceValidateUTF8, + merge: mergeStringSlice, +} + +// sizeStringValue returns the size of wire encoding a string value as a String. +func sizeStringValue(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeBytes(len(v.String())) +} + +// appendStringValue encodes a string value as a String. +func appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendString(b, v.String()) + return b, nil +} + +// consumeStringValue decodes a string value as a String. +func consumeStringValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfString(string(v)), out, nil +} + +var coderStringValue = valueCoderFuncs{ + size: sizeStringValue, + marshal: appendStringValue, + unmarshal: consumeStringValue, + merge: mergeScalarValue, +} + +// appendStringValueValidateUTF8 encodes a string value as a String. +func appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendString(b, v.String()) + if !utf8.ValidString(v.String()) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeStringValueValidateUTF8 decodes a string value as a String. +func consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + if !utf8.ValidString(v) { + return protoreflect.Value{}, out, errInvalidUTF8{} + } + out.n = n + return protoreflect.ValueOfString(string(v)), out, nil +} + +var coderStringValueValidateUTF8 = valueCoderFuncs{ + size: sizeStringValue, + marshal: appendStringValueValidateUTF8, + unmarshal: consumeStringValueValidateUTF8, + merge: mergeScalarValue, +} + +// sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String. +func sizeStringSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeBytes(len(v.String())) + } + return size +} + +// appendStringSliceValue encodes a []string value as a repeated String. +func appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendString(b, v.String()) + } + return b, nil +} + +// consumeStringSliceValue wire decodes a []string value as a repeated String. +func consumeStringSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeString(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfString(string(v))) + out.n = n + return listv, out, nil +} + +var coderStringSliceValue = valueCoderFuncs{ + size: sizeStringSliceValue, + marshal: appendStringSliceValue, + unmarshal: consumeStringSliceValue, + merge: mergeListValue, +} + +// sizeBytes returns the size of wire encoding a []byte pointer as a Bytes. +func sizeBytes(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Bytes() + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendBytes wire encodes a []byte pointer as a Bytes. +func appendBytes(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Bytes() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + return b, nil +} + +// consumeBytes wire decodes a []byte pointer as a Bytes. +func consumeBytes(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Bytes() = append(emptyBuf[:], v...) + out.n = n + return out, nil +} + +var coderBytes = pointerCoderFuncs{ + size: sizeBytes, + marshal: appendBytes, + unmarshal: consumeBytes, + merge: mergeBytes, +} + +// appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes. +func appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Bytes() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + if !utf8.Valid(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes. +func consumeBytesValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + *p.Bytes() = append(emptyBuf[:], v...) + out.n = n + return out, nil +} + +var coderBytesValidateUTF8 = pointerCoderFuncs{ + size: sizeBytes, + marshal: appendBytesValidateUTF8, + unmarshal: consumeBytesValidateUTF8, + merge: mergeBytes, +} + +// sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes. +// The zero value is not encoded. +func sizeBytesNoZero(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := *p.Bytes() + if len(v) == 0 { + return 0 + } + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendBytesNoZero wire encodes a []byte pointer as a Bytes. +// The zero value is not encoded. +func appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Bytes() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + return b, nil +} + +// consumeBytesNoZero wire decodes a []byte pointer as a Bytes. +// The zero value is not decoded. +func consumeBytesNoZero(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *p.Bytes() = append(([]byte)(nil), v...) + out.n = n + return out, nil +} + +var coderBytesNoZero = pointerCoderFuncs{ + size: sizeBytesNoZero, + marshal: appendBytesNoZero, + unmarshal: consumeBytesNoZero, + merge: mergeBytesNoZero, +} + +// appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes. +// The zero value is not encoded. +func appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + v := *p.Bytes() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + if !utf8.Valid(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes. +func consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + *p.Bytes() = append(([]byte)(nil), v...) + out.n = n + return out, nil +} + +var coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{ + size: sizeBytesNoZero, + marshal: appendBytesNoZeroValidateUTF8, + unmarshal: consumeBytesNoZeroValidateUTF8, + merge: mergeBytesNoZero, +} + +// sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes. +func sizeBytesSlice(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + s := *p.BytesSlice() + for _, v := range s { + size += f.tagsize + protowire.SizeBytes(len(v)) + } + return size +} + +// appendBytesSlice encodes a [][]byte pointer as a repeated Bytes. +func appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.BytesSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + } + return b, nil +} + +// consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes. +func consumeBytesSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.BytesSlice() + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + *sp = append(*sp, append(emptyBuf[:], v...)) + out.n = n + return out, nil +} + +var coderBytesSlice = pointerCoderFuncs{ + size: sizeBytesSlice, + marshal: appendBytesSlice, + unmarshal: consumeBytesSlice, + merge: mergeBytesSlice, +} + +// appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes. +func appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, _ marshalOptions) ([]byte, error) { + s := *p.BytesSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + if !utf8.Valid(v) { + return b, errInvalidUTF8{} + } + } + return b, nil +} + +// consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes. +func consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.BytesSlice() + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + *sp = append(*sp, append(emptyBuf[:], v...)) + out.n = n + return out, nil +} + +var coderBytesSliceValidateUTF8 = pointerCoderFuncs{ + size: sizeBytesSlice, + marshal: appendBytesSliceValidateUTF8, + unmarshal: consumeBytesSliceValidateUTF8, + merge: mergeBytesSlice, +} + +// sizeBytesValue returns the size of wire encoding a []byte value as a Bytes. +func sizeBytesValue(v protoreflect.Value, tagsize int, _ marshalOptions) int { + return tagsize + protowire.SizeBytes(len(v.Bytes())) +} + +// appendBytesValue encodes a []byte value as a Bytes. +func appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendBytes(b, v.Bytes()) + return b, nil +} + +// consumeBytesValue decodes a []byte value as a Bytes. +func consumeBytesValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + out.n = n + return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil +} + +var coderBytesValue = valueCoderFuncs{ + size: sizeBytesValue, + marshal: appendBytesValue, + unmarshal: consumeBytesValue, + merge: mergeBytesValue, +} + +// sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes. +func sizeBytesSliceValue(listv protoreflect.Value, tagsize int, _ marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeBytes(len(v.Bytes())) + } + return size +} + +// appendBytesSliceValue encodes a [][]byte value as a repeated Bytes. +func appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, _ marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendBytes(b, v.Bytes()) + } + return b, nil +} + +// consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes. +func consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, _ unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...))) + out.n = n + return listv, out, nil +} + +var coderBytesSliceValue = valueCoderFuncs{ + size: sizeBytesSliceValue, + marshal: appendBytesSliceValue, + unmarshal: consumeBytesSliceValue, + merge: mergeBytesListValue, +} + +// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices. +var emptyBuf [0]byte + +var wireTypes = map[protoreflect.Kind]protowire.Type{ + protoreflect.BoolKind: protowire.VarintType, + protoreflect.EnumKind: protowire.VarintType, + protoreflect.Int32Kind: protowire.VarintType, + protoreflect.Sint32Kind: protowire.VarintType, + protoreflect.Uint32Kind: protowire.VarintType, + protoreflect.Int64Kind: protowire.VarintType, + protoreflect.Sint64Kind: protowire.VarintType, + protoreflect.Uint64Kind: protowire.VarintType, + protoreflect.Sfixed32Kind: protowire.Fixed32Type, + protoreflect.Fixed32Kind: protowire.Fixed32Type, + protoreflect.FloatKind: protowire.Fixed32Type, + protoreflect.Sfixed64Kind: protowire.Fixed64Type, + protoreflect.Fixed64Kind: protowire.Fixed64Type, + protoreflect.DoubleKind: protowire.Fixed64Type, + protoreflect.StringKind: protowire.BytesType, + protoreflect.BytesKind: protowire.BytesType, + protoreflect.MessageKind: protowire.BytesType, + protoreflect.GroupKind: protowire.StartGroupType, +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go new file mode 100644 index 00000000..35a67c25 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go @@ -0,0 +1,388 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "errors" + "reflect" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type mapInfo struct { + goType reflect.Type + keyWiretag uint64 + valWiretag uint64 + keyFuncs valueCoderFuncs + valFuncs valueCoderFuncs + keyZero pref.Value + keyKind pref.Kind + conv *mapConverter +} + +func encoderFuncsForMap(fd pref.FieldDescriptor, ft reflect.Type) (valueMessage *MessageInfo, funcs pointerCoderFuncs) { + // TODO: Consider generating specialized map coders. + keyField := fd.MapKey() + valField := fd.MapValue() + keyWiretag := protowire.EncodeTag(1, wireTypes[keyField.Kind()]) + valWiretag := protowire.EncodeTag(2, wireTypes[valField.Kind()]) + keyFuncs := encoderFuncsForValue(keyField) + valFuncs := encoderFuncsForValue(valField) + conv := newMapConverter(ft, fd) + + mapi := &mapInfo{ + goType: ft, + keyWiretag: keyWiretag, + valWiretag: valWiretag, + keyFuncs: keyFuncs, + valFuncs: valFuncs, + keyZero: keyField.Default(), + keyKind: keyField.Kind(), + conv: conv, + } + if valField.Kind() == pref.MessageKind { + valueMessage = getMessageInfo(ft.Elem()) + } + + funcs = pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return sizeMap(p.AsValueOf(ft).Elem(), mapi, f, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendMap(b, p.AsValueOf(ft).Elem(), mapi, f, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + mp := p.AsValueOf(ft) + if mp.Elem().IsNil() { + mp.Elem().Set(reflect.MakeMap(mapi.goType)) + } + if f.mi == nil { + return consumeMap(b, mp.Elem(), wtyp, mapi, f, opts) + } else { + return consumeMapOfMessage(b, mp.Elem(), wtyp, mapi, f, opts) + } + }, + } + switch valField.Kind() { + case pref.MessageKind: + funcs.merge = mergeMapOfMessage + case pref.BytesKind: + funcs.merge = mergeMapOfBytes + default: + funcs.merge = mergeMap + } + if valFuncs.isInit != nil { + funcs.isInit = func(p pointer, f *coderFieldInfo) error { + return isInitMap(p.AsValueOf(ft).Elem(), mapi, f) + } + } + return valueMessage, funcs +} + +const ( + mapKeyTagSize = 1 // field 1, tag size 1. + mapValTagSize = 1 // field 2, tag size 2. +) + +func sizeMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) int { + if mapv.Len() == 0 { + return 0 + } + n := 0 + iter := mapRange(mapv) + for iter.Next() { + key := mapi.conv.keyConv.PBValueOf(iter.Key()).MapKey() + keySize := mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) + var valSize int + value := mapi.conv.valConv.PBValueOf(iter.Value()) + if f.mi == nil { + valSize = mapi.valFuncs.size(value, mapValTagSize, opts) + } else { + p := pointerOfValue(iter.Value()) + valSize += mapValTagSize + valSize += protowire.SizeBytes(f.mi.sizePointer(p, opts)) + } + n += f.tagsize + protowire.SizeBytes(keySize+valSize) + } + return n +} + +func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + var ( + key = mapi.keyZero + val = mapi.conv.valConv.New() + ) + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if num > protowire.MaxValidNumber { + return out, errors.New("invalid field number") + } + b = b[n:] + err := errUnknown + switch num { + case 1: + var v pref.Value + var o unmarshalOutput + v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts) + if err != nil { + break + } + key = v + n = o.n + case 2: + var v pref.Value + var o unmarshalOutput + v, o, err = mapi.valFuncs.unmarshal(b, val, num, wtyp, opts) + if err != nil { + break + } + val = v + n = o.n + } + if err == errUnknown { + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, protowire.ParseError(n) + } + } else if err != nil { + return out, err + } + b = b[n:] + } + mapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), mapi.conv.valConv.GoValueOf(val)) + out.n = n + return out, nil +} + +func consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + var ( + key = mapi.keyZero + val = reflect.New(f.mi.GoReflectType.Elem()) + ) + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return out, protowire.ParseError(n) + } + if num > protowire.MaxValidNumber { + return out, errors.New("invalid field number") + } + b = b[n:] + err := errUnknown + switch num { + case 1: + var v pref.Value + var o unmarshalOutput + v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts) + if err != nil { + break + } + key = v + n = o.n + case 2: + if wtyp != protowire.BytesType { + break + } + var v []byte + v, n = protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + var o unmarshalOutput + o, err = f.mi.unmarshalPointer(v, pointerOfValue(val), 0, opts) + if o.initialized { + // Consider this map item initialized so long as we see + // an initialized value. + out.initialized = true + } + } + if err == errUnknown { + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, protowire.ParseError(n) + } + } else if err != nil { + return out, err + } + b = b[n:] + } + mapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), val) + out.n = n + return out, nil +} + +func appendMapItem(b []byte, keyrv, valrv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + if f.mi == nil { + key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey() + val := mapi.conv.valConv.PBValueOf(valrv) + size := 0 + size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) + size += mapi.valFuncs.size(val, mapValTagSize, opts) + b = protowire.AppendVarint(b, uint64(size)) + b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts) + if err != nil { + return nil, err + } + return mapi.valFuncs.marshal(b, val, mapi.valWiretag, opts) + } else { + key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey() + val := pointerOfValue(valrv) + valSize := f.mi.sizePointer(val, opts) + size := 0 + size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) + size += mapValTagSize + protowire.SizeBytes(valSize) + b = protowire.AppendVarint(b, uint64(size)) + b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts) + if err != nil { + return nil, err + } + b = protowire.AppendVarint(b, mapi.valWiretag) + b = protowire.AppendVarint(b, uint64(valSize)) + return f.mi.marshalAppendPointer(b, val, opts) + } +} + +func appendMap(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + if mapv.Len() == 0 { + return b, nil + } + if opts.Deterministic() { + return appendMapDeterministic(b, mapv, mapi, f, opts) + } + iter := mapRange(mapv) + for iter.Next() { + var err error + b = protowire.AppendVarint(b, f.wiretag) + b, err = appendMapItem(b, iter.Key(), iter.Value(), mapi, f, opts) + if err != nil { + return b, err + } + } + return b, nil +} + +func appendMapDeterministic(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + keys := mapv.MapKeys() + sort.Slice(keys, func(i, j int) bool { + switch keys[i].Kind() { + case reflect.Bool: + return !keys[i].Bool() && keys[j].Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return keys[i].Int() < keys[j].Int() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return keys[i].Uint() < keys[j].Uint() + case reflect.Float32, reflect.Float64: + return keys[i].Float() < keys[j].Float() + case reflect.String: + return keys[i].String() < keys[j].String() + default: + panic("invalid kind: " + keys[i].Kind().String()) + } + }) + for _, key := range keys { + var err error + b = protowire.AppendVarint(b, f.wiretag) + b, err = appendMapItem(b, key, mapv.MapIndex(key), mapi, f, opts) + if err != nil { + return b, err + } + } + return b, nil +} + +func isInitMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo) error { + if mi := f.mi; mi != nil { + mi.init() + if !mi.needsInitCheck { + return nil + } + iter := mapRange(mapv) + for iter.Next() { + val := pointerOfValue(iter.Value()) + if err := mi.checkInitializedPointer(val); err != nil { + return err + } + } + } else { + iter := mapRange(mapv) + for iter.Next() { + val := mapi.conv.valConv.PBValueOf(iter.Value()) + if err := mapi.valFuncs.isInit(val); err != nil { + return err + } + } + } + return nil +} + +func mergeMap(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstm := dst.AsValueOf(f.ft).Elem() + srcm := src.AsValueOf(f.ft).Elem() + if srcm.Len() == 0 { + return + } + if dstm.IsNil() { + dstm.Set(reflect.MakeMap(f.ft)) + } + iter := mapRange(srcm) + for iter.Next() { + dstm.SetMapIndex(iter.Key(), iter.Value()) + } +} + +func mergeMapOfBytes(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstm := dst.AsValueOf(f.ft).Elem() + srcm := src.AsValueOf(f.ft).Elem() + if srcm.Len() == 0 { + return + } + if dstm.IsNil() { + dstm.Set(reflect.MakeMap(f.ft)) + } + iter := mapRange(srcm) + for iter.Next() { + dstm.SetMapIndex(iter.Key(), reflect.ValueOf(append(emptyBuf[:], iter.Value().Bytes()...))) + } +} + +func mergeMapOfMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstm := dst.AsValueOf(f.ft).Elem() + srcm := src.AsValueOf(f.ft).Elem() + if srcm.Len() == 0 { + return + } + if dstm.IsNil() { + dstm.Set(reflect.MakeMap(f.ft)) + } + iter := mapRange(srcm) + for iter.Next() { + val := reflect.New(f.ft.Elem().Elem()) + if f.mi != nil { + f.mi.mergePointer(pointerOfValue(val), pointerOfValue(iter.Value()), opts) + } else { + opts.Merge(asMessage(val), asMessage(iter.Value())) + } + dstm.SetMapIndex(iter.Key(), val) + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go new file mode 100644 index 00000000..2706bb67 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go @@ -0,0 +1,37 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.12 + +package impl + +import "reflect" + +type mapIter struct { + v reflect.Value + keys []reflect.Value +} + +// mapRange provides a less-efficient equivalent to +// the Go 1.12 reflect.Value.MapRange method. +func mapRange(v reflect.Value) *mapIter { + return &mapIter{v: v} +} + +func (i *mapIter) Next() bool { + if i.keys == nil { + i.keys = i.v.MapKeys() + } else { + i.keys = i.keys[1:] + } + return len(i.keys) > 0 +} + +func (i *mapIter) Key() reflect.Value { + return i.keys[0] +} + +func (i *mapIter) Value() reflect.Value { + return i.v.MapIndex(i.keys[0]) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go new file mode 100644 index 00000000..1533ef60 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go @@ -0,0 +1,11 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.12 + +package impl + +import "reflect" + +func mapRange(v reflect.Value) *reflect.MapIter { return v.MapRange() } diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go new file mode 100644 index 00000000..370ec65a --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go @@ -0,0 +1,157 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/fieldsort" + pref "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// coderMessageInfo contains per-message information used by the fast-path functions. +// This is a different type from MessageInfo to keep MessageInfo as general-purpose as +// possible. +type coderMessageInfo struct { + methods piface.Methods + + orderedCoderFields []*coderFieldInfo + denseCoderFields []*coderFieldInfo + coderFields map[protowire.Number]*coderFieldInfo + sizecacheOffset offset + unknownOffset offset + extensionOffset offset + needsInitCheck bool + isMessageSet bool + numRequiredFields uint8 +} + +type coderFieldInfo struct { + funcs pointerCoderFuncs // fast-path per-field functions + mi *MessageInfo // field's message + ft reflect.Type + validation validationInfo // information used by message validation + num pref.FieldNumber // field number + offset offset // struct field offset + wiretag uint64 // field tag (number + wire type) + tagsize int // size of the varint-encoded tag + isPointer bool // true if IsNil may be called on the struct field + isRequired bool // true if field is required +} + +func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { + mi.sizecacheOffset = si.sizecacheOffset + mi.unknownOffset = si.unknownOffset + mi.extensionOffset = si.extensionOffset + + mi.coderFields = make(map[protowire.Number]*coderFieldInfo) + fields := mi.Desc.Fields() + for i := 0; i < fields.Len(); i++ { + fd := fields.Get(i) + + fs := si.fieldsByNumber[fd.Number()] + if fd.ContainingOneof() != nil { + fs = si.oneofsByName[fd.ContainingOneof().Name()] + } + ft := fs.Type + var wiretag uint64 + if !fd.IsPacked() { + wiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()]) + } else { + wiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType) + } + var fieldOffset offset + var funcs pointerCoderFuncs + var childMessage *MessageInfo + switch { + case fd.ContainingOneof() != nil: + fieldOffset = offsetOf(fs, mi.Exporter) + case fd.IsWeak(): + fieldOffset = si.weakOffset + funcs = makeWeakMessageFieldCoder(fd) + default: + fieldOffset = offsetOf(fs, mi.Exporter) + childMessage, funcs = fieldCoder(fd, ft) + } + cf := &coderFieldInfo{ + num: fd.Number(), + offset: fieldOffset, + wiretag: wiretag, + ft: ft, + tagsize: protowire.SizeVarint(wiretag), + funcs: funcs, + mi: childMessage, + validation: newFieldValidationInfo(mi, si, fd, ft), + isPointer: (fd.Cardinality() == pref.Repeated || + fd.Kind() == pref.MessageKind || + fd.Kind() == pref.GroupKind || + fd.Syntax() != pref.Proto3), + isRequired: fd.Cardinality() == pref.Required, + } + mi.orderedCoderFields = append(mi.orderedCoderFields, cf) + mi.coderFields[cf.num] = cf + } + for i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ { + mi.initOneofFieldCoders(oneofs.Get(i), si) + } + if messageset.IsMessageSet(mi.Desc) { + if !mi.extensionOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no extensions field", mi.Desc.FullName())) + } + if !mi.unknownOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no unknown field", mi.Desc.FullName())) + } + mi.isMessageSet = true + } + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num + }) + + var maxDense pref.FieldNumber + for _, cf := range mi.orderedCoderFields { + if cf.num >= 16 && cf.num >= 2*maxDense { + break + } + maxDense = cf.num + } + mi.denseCoderFields = make([]*coderFieldInfo, maxDense+1) + for _, cf := range mi.orderedCoderFields { + if int(cf.num) > len(mi.denseCoderFields) { + break + } + mi.denseCoderFields[cf.num] = cf + } + + // To preserve compatibility with historic wire output, marshal oneofs last. + if mi.Desc.Oneofs().Len() > 0 { + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + fi := fields.ByNumber(mi.orderedCoderFields[i].num) + fj := fields.ByNumber(mi.orderedCoderFields[j].num) + return fieldsort.Less(fi, fj) + }) + } + + mi.needsInitCheck = needsInitCheck(mi.Desc) + if mi.methods.Marshal == nil && mi.methods.Size == nil { + mi.methods.Flags |= piface.SupportMarshalDeterministic + mi.methods.Marshal = mi.marshal + mi.methods.Size = mi.size + } + if mi.methods.Unmarshal == nil { + mi.methods.Flags |= piface.SupportUnmarshalDiscardUnknown + mi.methods.Unmarshal = mi.unmarshal + } + if mi.methods.CheckInitialized == nil { + mi.methods.CheckInitialized = mi.checkInitialized + } + if mi.methods.Merge == nil { + mi.methods.Merge = mi.merge + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go b/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go new file mode 100644 index 00000000..cfb68e12 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go @@ -0,0 +1,120 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" +) + +func sizeMessageSet(mi *MessageInfo, p pointer, opts marshalOptions) (size int) { + if !flags.ProtoLegacy { + return 0 + } + + ext := *p.Apply(mi.extensionOffset).Extensions() + for _, x := range ext { + xi := getExtensionFieldInfo(x.Type()) + if xi.funcs.size == nil { + continue + } + num, _ := protowire.DecodeTag(xi.wiretag) + size += messageset.SizeField(num) + size += xi.funcs.size(x.Value(), protowire.SizeTag(messageset.FieldMessage), opts) + } + + unknown := *p.Apply(mi.unknownOffset).Bytes() + size += messageset.SizeUnknown(unknown) + + return size +} + +func marshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts marshalOptions) ([]byte, error) { + if !flags.ProtoLegacy { + return b, errors.New("no support for message_set_wire_format") + } + + ext := *p.Apply(mi.extensionOffset).Extensions() + switch len(ext) { + case 0: + case 1: + // Fast-path for one extension: Don't bother sorting the keys. + for _, x := range ext { + var err error + b, err = marshalMessageSetField(mi, b, x, opts) + if err != nil { + return b, err + } + } + default: + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(ext)) + for k := range ext { + keys = append(keys, int(k)) + } + sort.Ints(keys) + for _, k := range keys { + var err error + b, err = marshalMessageSetField(mi, b, ext[int32(k)], opts) + if err != nil { + return b, err + } + } + } + + unknown := *p.Apply(mi.unknownOffset).Bytes() + b, err := messageset.AppendUnknown(b, unknown) + if err != nil { + return b, err + } + + return b, nil +} + +func marshalMessageSetField(mi *MessageInfo, b []byte, x ExtensionField, opts marshalOptions) ([]byte, error) { + xi := getExtensionFieldInfo(x.Type()) + num, _ := protowire.DecodeTag(xi.wiretag) + b = messageset.AppendFieldStart(b, num) + b, err := xi.funcs.marshal(b, x.Value(), protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType), opts) + if err != nil { + return b, err + } + b = messageset.AppendFieldEnd(b) + return b, nil +} + +func unmarshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts unmarshalOptions) (out unmarshalOutput, err error) { + if !flags.ProtoLegacy { + return out, errors.New("no support for message_set_wire_format") + } + + ep := p.Apply(mi.extensionOffset).Extensions() + if *ep == nil { + *ep = make(map[int32]ExtensionField) + } + ext := *ep + unknown := p.Apply(mi.unknownOffset).Bytes() + initialized := true + err = messageset.Unmarshal(b, true, func(num protowire.Number, v []byte) error { + o, err := mi.unmarshalExtension(v, num, protowire.BytesType, ext, opts) + if err == errUnknown { + *unknown = protowire.AppendTag(*unknown, num, protowire.BytesType) + *unknown = append(*unknown, v...) + return nil + } + if !o.initialized { + initialized = false + } + return err + }) + out.n = len(b) + out.initialized = initialized + return out, err +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go new file mode 100644 index 00000000..86f7dc3c --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go @@ -0,0 +1,209 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build purego appengine + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/encoding/protowire" +) + +func sizeEnum(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { + v := p.v.Elem().Int() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +func appendEnum(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := p.v.Elem().Int() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +func consumeEnum(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return out, protowire.ParseError(n) + } + p.v.Elem().SetInt(int64(v)) + out.n = n + return out, nil +} + +func mergeEnum(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + dst.v.Elem().Set(src.v.Elem()) +} + +var coderEnum = pointerCoderFuncs{ + size: sizeEnum, + marshal: appendEnum, + unmarshal: consumeEnum, + merge: mergeEnum, +} + +func sizeEnumNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + if p.v.Elem().Int() == 0 { + return 0 + } + return sizeEnum(p, f, opts) +} + +func appendEnumNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + if p.v.Elem().Int() == 0 { + return b, nil + } + return appendEnum(b, p, f, opts) +} + +func mergeEnumNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + if src.v.Elem().Int() != 0 { + dst.v.Elem().Set(src.v.Elem()) + } +} + +var coderEnumNoZero = pointerCoderFuncs{ + size: sizeEnumNoZero, + marshal: appendEnumNoZero, + unmarshal: consumeEnum, + merge: mergeEnumNoZero, +} + +func sizeEnumPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return sizeEnum(pointer{p.v.Elem()}, f, opts) +} + +func appendEnumPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendEnum(b, pointer{p.v.Elem()}, f, opts) +} + +func consumeEnumPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + if p.v.Elem().IsNil() { + p.v.Elem().Set(reflect.New(p.v.Elem().Type().Elem())) + } + return consumeEnum(b, pointer{p.v.Elem()}, wtyp, f, opts) +} + +func mergeEnumPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + if !src.v.Elem().IsNil() { + v := reflect.New(dst.v.Type().Elem().Elem()) + v.Elem().Set(src.v.Elem().Elem()) + dst.v.Elem().Set(v) + } +} + +var coderEnumPtr = pointerCoderFuncs{ + size: sizeEnumPtr, + marshal: appendEnumPtr, + unmarshal: consumeEnumPtr, + merge: mergeEnumPtr, +} + +func sizeEnumSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := p.v.Elem() + for i, llen := 0, s.Len(); i < llen; i++ { + size += protowire.SizeVarint(uint64(s.Index(i).Int())) + f.tagsize + } + return size +} + +func appendEnumSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.v.Elem() + for i, llen := 0, s.Len(); i < llen; i++ { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(s.Index(i).Int())) + } + return b, nil +} + +func consumeEnumSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + s := p.v.Elem() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, protowire.ParseError(n) + } + for len(b) > 0 { + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return out, protowire.ParseError(n) + } + rv := reflect.New(s.Type().Elem()).Elem() + rv.SetInt(int64(v)) + s.Set(reflect.Append(s, rv)) + b = b[n:] + } + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return out, protowire.ParseError(n) + } + rv := reflect.New(s.Type().Elem()).Elem() + rv.SetInt(int64(v)) + s.Set(reflect.Append(s, rv)) + out.n = n + return out, nil +} + +func mergeEnumSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + dst.v.Elem().Set(reflect.AppendSlice(dst.v.Elem(), src.v.Elem())) +} + +var coderEnumSlice = pointerCoderFuncs{ + size: sizeEnumSlice, + marshal: appendEnumSlice, + unmarshal: consumeEnumSlice, + merge: mergeEnumSlice, +} + +func sizeEnumPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := p.v.Elem() + llen := s.Len() + if llen == 0 { + return 0 + } + n := 0 + for i := 0; i < llen; i++ { + n += protowire.SizeVarint(uint64(s.Index(i).Int())) + } + return f.tagsize + protowire.SizeBytes(n) +} + +func appendEnumPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.v.Elem() + llen := s.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for i := 0; i < llen; i++ { + n += protowire.SizeVarint(uint64(s.Index(i).Int())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + b = protowire.AppendVarint(b, uint64(s.Index(i).Int())) + } + return b, nil +} + +var coderEnumPackedSlice = pointerCoderFuncs{ + size: sizeEnumPackedSlice, + marshal: appendEnumPackedSlice, + unmarshal: consumeEnumSlice, + merge: mergeEnumSlice, +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go b/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go new file mode 100644 index 00000000..c934c8d3 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go @@ -0,0 +1,554 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/strs" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// pointerCoderFuncs is a set of pointer encoding functions. +type pointerCoderFuncs struct { + mi *MessageInfo + size func(p pointer, f *coderFieldInfo, opts marshalOptions) int + marshal func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) + unmarshal func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) + isInit func(p pointer, f *coderFieldInfo) error + merge func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) +} + +// valueCoderFuncs is a set of protoreflect.Value encoding functions. +type valueCoderFuncs struct { + size func(v pref.Value, tagsize int, opts marshalOptions) int + marshal func(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) + unmarshal func(b []byte, v pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) + isInit func(v pref.Value) error + merge func(dst, src pref.Value, opts mergeOptions) pref.Value +} + +// fieldCoder returns pointer functions for a field, used for operating on +// struct fields. +func fieldCoder(fd pref.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) { + switch { + case fd.IsMap(): + return encoderFuncsForMap(fd, ft) + case fd.Cardinality() == pref.Repeated && !fd.IsPacked(): + // Repeated fields (not packed). + if ft.Kind() != reflect.Slice { + break + } + ft := ft.Elem() + switch fd.Kind() { + case pref.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolSlice + } + case pref.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumSlice + } + case pref.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32Slice + } + case pref.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32Slice + } + case pref.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32Slice + } + case pref.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64Slice + } + case pref.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64Slice + } + case pref.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64Slice + } + case pref.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32Slice + } + case pref.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32Slice + } + case pref.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatSlice + } + case pref.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64Slice + } + case pref.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64Slice + } + case pref.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoubleSlice + } + case pref.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringSliceValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderStringSlice + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) { + return nil, coderBytesSliceValidateUTF8 + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesSlice + } + case pref.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderStringSlice + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesSlice + } + case pref.MessageKind: + return getMessageInfo(ft), makeMessageSliceFieldCoder(fd, ft) + case pref.GroupKind: + return getMessageInfo(ft), makeGroupSliceFieldCoder(fd, ft) + } + case fd.Cardinality() == pref.Repeated && fd.IsPacked(): + // Packed repeated fields. + // + // Only repeated fields of primitive numeric types + // (Varint, Fixed32, or Fixed64 wire type) can be packed. + if ft.Kind() != reflect.Slice { + break + } + ft := ft.Elem() + switch fd.Kind() { + case pref.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolPackedSlice + } + case pref.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumPackedSlice + } + case pref.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32PackedSlice + } + case pref.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32PackedSlice + } + case pref.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32PackedSlice + } + case pref.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64PackedSlice + } + case pref.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64PackedSlice + } + case pref.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64PackedSlice + } + case pref.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32PackedSlice + } + case pref.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32PackedSlice + } + case pref.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatPackedSlice + } + case pref.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64PackedSlice + } + case pref.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64PackedSlice + } + case pref.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoublePackedSlice + } + } + case fd.Kind() == pref.MessageKind: + return getMessageInfo(ft), makeMessageFieldCoder(fd, ft) + case fd.Kind() == pref.GroupKind: + return getMessageInfo(ft), makeGroupFieldCoder(fd, ft) + case fd.Syntax() == pref.Proto3 && fd.ContainingOneof() == nil: + // Populated oneof fields always encode even if set to the zero value, + // which normally are not encoded in proto3. + switch fd.Kind() { + case pref.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolNoZero + } + case pref.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumNoZero + } + case pref.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32NoZero + } + case pref.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32NoZero + } + case pref.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32NoZero + } + case pref.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64NoZero + } + case pref.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64NoZero + } + case pref.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64NoZero + } + case pref.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32NoZero + } + case pref.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32NoZero + } + case pref.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatNoZero + } + case pref.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64NoZero + } + case pref.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64NoZero + } + case pref.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoubleNoZero + } + case pref.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringNoZeroValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderStringNoZero + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) { + return nil, coderBytesNoZeroValidateUTF8 + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesNoZero + } + case pref.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderStringNoZero + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesNoZero + } + } + case ft.Kind() == reflect.Ptr: + ft := ft.Elem() + switch fd.Kind() { + case pref.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolPtr + } + case pref.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumPtr + } + case pref.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32Ptr + } + case pref.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32Ptr + } + case pref.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32Ptr + } + case pref.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64Ptr + } + case pref.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64Ptr + } + case pref.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64Ptr + } + case pref.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32Ptr + } + case pref.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32Ptr + } + case pref.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatPtr + } + case pref.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64Ptr + } + case pref.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64Ptr + } + case pref.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoublePtr + } + case pref.StringKind: + if ft.Kind() == reflect.String { + return nil, coderStringPtr + } + case pref.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderStringPtr + } + } + default: + switch fd.Kind() { + case pref.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBool + } + case pref.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnum + } + case pref.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32 + } + case pref.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32 + } + case pref.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32 + } + case pref.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64 + } + case pref.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64 + } + case pref.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64 + } + case pref.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32 + } + case pref.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32 + } + case pref.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloat + } + case pref.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64 + } + case pref.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64 + } + case pref.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDouble + } + case pref.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderString + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) { + return nil, coderBytesValidateUTF8 + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytes + } + case pref.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderString + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytes + } + } + } + panic(fmt.Sprintf("invalid type: no encoder for %v %v %v/%v", fd.FullName(), fd.Cardinality(), fd.Kind(), ft)) +} + +// encoderFuncsForValue returns value functions for a field, used for +// extension values and map encoding. +func encoderFuncsForValue(fd pref.FieldDescriptor) valueCoderFuncs { + switch { + case fd.Cardinality() == pref.Repeated && !fd.IsPacked(): + switch fd.Kind() { + case pref.BoolKind: + return coderBoolSliceValue + case pref.EnumKind: + return coderEnumSliceValue + case pref.Int32Kind: + return coderInt32SliceValue + case pref.Sint32Kind: + return coderSint32SliceValue + case pref.Uint32Kind: + return coderUint32SliceValue + case pref.Int64Kind: + return coderInt64SliceValue + case pref.Sint64Kind: + return coderSint64SliceValue + case pref.Uint64Kind: + return coderUint64SliceValue + case pref.Sfixed32Kind: + return coderSfixed32SliceValue + case pref.Fixed32Kind: + return coderFixed32SliceValue + case pref.FloatKind: + return coderFloatSliceValue + case pref.Sfixed64Kind: + return coderSfixed64SliceValue + case pref.Fixed64Kind: + return coderFixed64SliceValue + case pref.DoubleKind: + return coderDoubleSliceValue + case pref.StringKind: + // We don't have a UTF-8 validating coder for repeated string fields. + // Value coders are used for extensions and maps. + // Extensions are never proto3, and maps never contain lists. + return coderStringSliceValue + case pref.BytesKind: + return coderBytesSliceValue + case pref.MessageKind: + return coderMessageSliceValue + case pref.GroupKind: + return coderGroupSliceValue + } + case fd.Cardinality() == pref.Repeated && fd.IsPacked(): + switch fd.Kind() { + case pref.BoolKind: + return coderBoolPackedSliceValue + case pref.EnumKind: + return coderEnumPackedSliceValue + case pref.Int32Kind: + return coderInt32PackedSliceValue + case pref.Sint32Kind: + return coderSint32PackedSliceValue + case pref.Uint32Kind: + return coderUint32PackedSliceValue + case pref.Int64Kind: + return coderInt64PackedSliceValue + case pref.Sint64Kind: + return coderSint64PackedSliceValue + case pref.Uint64Kind: + return coderUint64PackedSliceValue + case pref.Sfixed32Kind: + return coderSfixed32PackedSliceValue + case pref.Fixed32Kind: + return coderFixed32PackedSliceValue + case pref.FloatKind: + return coderFloatPackedSliceValue + case pref.Sfixed64Kind: + return coderSfixed64PackedSliceValue + case pref.Fixed64Kind: + return coderFixed64PackedSliceValue + case pref.DoubleKind: + return coderDoublePackedSliceValue + } + default: + switch fd.Kind() { + default: + case pref.BoolKind: + return coderBoolValue + case pref.EnumKind: + return coderEnumValue + case pref.Int32Kind: + return coderInt32Value + case pref.Sint32Kind: + return coderSint32Value + case pref.Uint32Kind: + return coderUint32Value + case pref.Int64Kind: + return coderInt64Value + case pref.Sint64Kind: + return coderSint64Value + case pref.Uint64Kind: + return coderUint64Value + case pref.Sfixed32Kind: + return coderSfixed32Value + case pref.Fixed32Kind: + return coderFixed32Value + case pref.FloatKind: + return coderFloatValue + case pref.Sfixed64Kind: + return coderSfixed64Value + case pref.Fixed64Kind: + return coderFixed64Value + case pref.DoubleKind: + return coderDoubleValue + case pref.StringKind: + if strs.EnforceUTF8(fd) { + return coderStringValueValidateUTF8 + } + return coderStringValue + case pref.BytesKind: + return coderBytesValue + case pref.MessageKind: + return coderMessageValue + case pref.GroupKind: + return coderGroupValue + } + } + panic(fmt.Sprintf("invalid field: no encoder for %v %v %v", fd.FullName(), fd.Cardinality(), fd.Kind())) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go new file mode 100644 index 00000000..e118af1e --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go @@ -0,0 +1,17 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !purego,!appengine + +package impl + +// When using unsafe pointers, we can just treat enum values as int32s. + +var ( + coderEnumNoZero = coderInt32NoZero + coderEnum = coderInt32 + coderEnumPtr = coderInt32Ptr + coderEnumSlice = coderInt32Slice + coderEnumPackedSlice = coderInt32PackedSlice +) diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert.go b/vendor/google.golang.org/protobuf/internal/impl/convert.go new file mode 100644 index 00000000..9fc384a7 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/convert.go @@ -0,0 +1,467 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// unwrapper unwraps the value to the underlying value. +// This is implemented by List and Map. +type unwrapper interface { + protoUnwrap() interface{} +} + +// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types. +type Converter interface { + // PBValueOf converts a reflect.Value to a protoreflect.Value. + PBValueOf(reflect.Value) pref.Value + + // GoValueOf converts a protoreflect.Value to a reflect.Value. + GoValueOf(pref.Value) reflect.Value + + // IsValidPB returns whether a protoreflect.Value is compatible with this type. + IsValidPB(pref.Value) bool + + // IsValidGo returns whether a reflect.Value is compatible with this type. + IsValidGo(reflect.Value) bool + + // New returns a new field value. + // For scalars, it returns the default value of the field. + // For composite types, it returns a new mutable value. + New() pref.Value + + // Zero returns a new field value. + // For scalars, it returns the default value of the field. + // For composite types, it returns an immutable, empty value. + Zero() pref.Value +} + +// NewConverter matches a Go type with a protobuf field and returns a Converter +// that converts between the two. Enums must be a named int32 kind that +// implements protoreflect.Enum, and messages must be pointer to a named +// struct type that implements protoreflect.ProtoMessage. +// +// This matcher deliberately supports a wider range of Go types than what +// protoc-gen-go historically generated to be able to automatically wrap some +// v1 messages generated by other forks of protoc-gen-go. +func NewConverter(t reflect.Type, fd pref.FieldDescriptor) Converter { + switch { + case fd.IsList(): + return newListConverter(t, fd) + case fd.IsMap(): + return newMapConverter(t, fd) + default: + return newSingularConverter(t, fd) + } + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) +} + +var ( + boolType = reflect.TypeOf(bool(false)) + int32Type = reflect.TypeOf(int32(0)) + int64Type = reflect.TypeOf(int64(0)) + uint32Type = reflect.TypeOf(uint32(0)) + uint64Type = reflect.TypeOf(uint64(0)) + float32Type = reflect.TypeOf(float32(0)) + float64Type = reflect.TypeOf(float64(0)) + stringType = reflect.TypeOf(string("")) + bytesType = reflect.TypeOf([]byte(nil)) + byteType = reflect.TypeOf(byte(0)) +) + +var ( + boolZero = pref.ValueOfBool(false) + int32Zero = pref.ValueOfInt32(0) + int64Zero = pref.ValueOfInt64(0) + uint32Zero = pref.ValueOfUint32(0) + uint64Zero = pref.ValueOfUint64(0) + float32Zero = pref.ValueOfFloat32(0) + float64Zero = pref.ValueOfFloat64(0) + stringZero = pref.ValueOfString("") + bytesZero = pref.ValueOfBytes(nil) +) + +func newSingularConverter(t reflect.Type, fd pref.FieldDescriptor) Converter { + defVal := func(fd pref.FieldDescriptor, zero pref.Value) pref.Value { + if fd.Cardinality() == pref.Repeated { + // Default isn't defined for repeated fields. + return zero + } + return fd.Default() + } + switch fd.Kind() { + case pref.BoolKind: + if t.Kind() == reflect.Bool { + return &boolConverter{t, defVal(fd, boolZero)} + } + case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: + if t.Kind() == reflect.Int32 { + return &int32Converter{t, defVal(fd, int32Zero)} + } + case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: + if t.Kind() == reflect.Int64 { + return &int64Converter{t, defVal(fd, int64Zero)} + } + case pref.Uint32Kind, pref.Fixed32Kind: + if t.Kind() == reflect.Uint32 { + return &uint32Converter{t, defVal(fd, uint32Zero)} + } + case pref.Uint64Kind, pref.Fixed64Kind: + if t.Kind() == reflect.Uint64 { + return &uint64Converter{t, defVal(fd, uint64Zero)} + } + case pref.FloatKind: + if t.Kind() == reflect.Float32 { + return &float32Converter{t, defVal(fd, float32Zero)} + } + case pref.DoubleKind: + if t.Kind() == reflect.Float64 { + return &float64Converter{t, defVal(fd, float64Zero)} + } + case pref.StringKind: + if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) { + return &stringConverter{t, defVal(fd, stringZero)} + } + case pref.BytesKind: + if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) { + return &bytesConverter{t, defVal(fd, bytesZero)} + } + case pref.EnumKind: + // Handle enums, which must be a named int32 type. + if t.Kind() == reflect.Int32 { + return newEnumConverter(t, fd) + } + case pref.MessageKind, pref.GroupKind: + return newMessageConverter(t) + } + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) +} + +type boolConverter struct { + goType reflect.Type + def pref.Value +} + +func (c *boolConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfBool(v.Bool()) +} +func (c *boolConverter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(v.Bool()).Convert(c.goType) +} +func (c *boolConverter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(bool) + return ok +} +func (c *boolConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *boolConverter) New() pref.Value { return c.def } +func (c *boolConverter) Zero() pref.Value { return c.def } + +type int32Converter struct { + goType reflect.Type + def pref.Value +} + +func (c *int32Converter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfInt32(int32(v.Int())) +} +func (c *int32Converter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(int32(v.Int())).Convert(c.goType) +} +func (c *int32Converter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(int32) + return ok +} +func (c *int32Converter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *int32Converter) New() pref.Value { return c.def } +func (c *int32Converter) Zero() pref.Value { return c.def } + +type int64Converter struct { + goType reflect.Type + def pref.Value +} + +func (c *int64Converter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfInt64(int64(v.Int())) +} +func (c *int64Converter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(int64(v.Int())).Convert(c.goType) +} +func (c *int64Converter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(int64) + return ok +} +func (c *int64Converter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *int64Converter) New() pref.Value { return c.def } +func (c *int64Converter) Zero() pref.Value { return c.def } + +type uint32Converter struct { + goType reflect.Type + def pref.Value +} + +func (c *uint32Converter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfUint32(uint32(v.Uint())) +} +func (c *uint32Converter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(uint32(v.Uint())).Convert(c.goType) +} +func (c *uint32Converter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(uint32) + return ok +} +func (c *uint32Converter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *uint32Converter) New() pref.Value { return c.def } +func (c *uint32Converter) Zero() pref.Value { return c.def } + +type uint64Converter struct { + goType reflect.Type + def pref.Value +} + +func (c *uint64Converter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfUint64(uint64(v.Uint())) +} +func (c *uint64Converter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(uint64(v.Uint())).Convert(c.goType) +} +func (c *uint64Converter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(uint64) + return ok +} +func (c *uint64Converter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *uint64Converter) New() pref.Value { return c.def } +func (c *uint64Converter) Zero() pref.Value { return c.def } + +type float32Converter struct { + goType reflect.Type + def pref.Value +} + +func (c *float32Converter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfFloat32(float32(v.Float())) +} +func (c *float32Converter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(float32(v.Float())).Convert(c.goType) +} +func (c *float32Converter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(float32) + return ok +} +func (c *float32Converter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *float32Converter) New() pref.Value { return c.def } +func (c *float32Converter) Zero() pref.Value { return c.def } + +type float64Converter struct { + goType reflect.Type + def pref.Value +} + +func (c *float64Converter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfFloat64(float64(v.Float())) +} +func (c *float64Converter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(float64(v.Float())).Convert(c.goType) +} +func (c *float64Converter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(float64) + return ok +} +func (c *float64Converter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *float64Converter) New() pref.Value { return c.def } +func (c *float64Converter) Zero() pref.Value { return c.def } + +type stringConverter struct { + goType reflect.Type + def pref.Value +} + +func (c *stringConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfString(v.Convert(stringType).String()) +} +func (c *stringConverter) GoValueOf(v pref.Value) reflect.Value { + // pref.Value.String never panics, so we go through an interface + // conversion here to check the type. + s := v.Interface().(string) + if c.goType.Kind() == reflect.Slice && s == "" { + return reflect.Zero(c.goType) // ensure empty string is []byte(nil) + } + return reflect.ValueOf(s).Convert(c.goType) +} +func (c *stringConverter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(string) + return ok +} +func (c *stringConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *stringConverter) New() pref.Value { return c.def } +func (c *stringConverter) Zero() pref.Value { return c.def } + +type bytesConverter struct { + goType reflect.Type + def pref.Value +} + +func (c *bytesConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + if c.goType.Kind() == reflect.String && v.Len() == 0 { + return pref.ValueOfBytes(nil) // ensure empty string is []byte(nil) + } + return pref.ValueOfBytes(v.Convert(bytesType).Bytes()) +} +func (c *bytesConverter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(v.Bytes()).Convert(c.goType) +} +func (c *bytesConverter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().([]byte) + return ok +} +func (c *bytesConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} +func (c *bytesConverter) New() pref.Value { return c.def } +func (c *bytesConverter) Zero() pref.Value { return c.def } + +type enumConverter struct { + goType reflect.Type + def pref.Value +} + +func newEnumConverter(goType reflect.Type, fd pref.FieldDescriptor) Converter { + var def pref.Value + if fd.Cardinality() == pref.Repeated { + def = pref.ValueOfEnum(fd.Enum().Values().Get(0).Number()) + } else { + def = fd.Default() + } + return &enumConverter{goType, def} +} + +func (c *enumConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfEnum(pref.EnumNumber(v.Int())) +} + +func (c *enumConverter) GoValueOf(v pref.Value) reflect.Value { + return reflect.ValueOf(v.Enum()).Convert(c.goType) +} + +func (c *enumConverter) IsValidPB(v pref.Value) bool { + _, ok := v.Interface().(pref.EnumNumber) + return ok +} + +func (c *enumConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} + +func (c *enumConverter) New() pref.Value { + return c.def +} + +func (c *enumConverter) Zero() pref.Value { + return c.def +} + +type messageConverter struct { + goType reflect.Type +} + +func newMessageConverter(goType reflect.Type) Converter { + return &messageConverter{goType} +} + +func (c *messageConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + if m, ok := v.Interface().(pref.ProtoMessage); ok { + return pref.ValueOfMessage(m.ProtoReflect()) + } + return pref.ValueOfMessage(legacyWrapMessage(v)) +} + +func (c *messageConverter) GoValueOf(v pref.Value) reflect.Value { + m := v.Message() + var rv reflect.Value + if u, ok := m.(unwrapper); ok { + rv = reflect.ValueOf(u.protoUnwrap()) + } else { + rv = reflect.ValueOf(m.Interface()) + } + if rv.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", rv.Type(), c.goType)) + } + return rv +} + +func (c *messageConverter) IsValidPB(v pref.Value) bool { + m := v.Message() + var rv reflect.Value + if u, ok := m.(unwrapper); ok { + rv = reflect.ValueOf(u.protoUnwrap()) + } else { + rv = reflect.ValueOf(m.Interface()) + } + return rv.Type() == c.goType +} + +func (c *messageConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} + +func (c *messageConverter) New() pref.Value { + return c.PBValueOf(reflect.New(c.goType.Elem())) +} + +func (c *messageConverter) Zero() pref.Value { + return c.PBValueOf(reflect.Zero(c.goType)) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_list.go b/vendor/google.golang.org/protobuf/internal/impl/convert_list.go new file mode 100644 index 00000000..fe9384ab --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/convert_list.go @@ -0,0 +1,141 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +func newListConverter(t reflect.Type, fd pref.FieldDescriptor) Converter { + switch { + case t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Slice: + return &listPtrConverter{t, newSingularConverter(t.Elem().Elem(), fd)} + case t.Kind() == reflect.Slice: + return &listConverter{t, newSingularConverter(t.Elem(), fd)} + } + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) +} + +type listConverter struct { + goType reflect.Type + c Converter +} + +func (c *listConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + pv := reflect.New(c.goType) + pv.Elem().Set(v) + return pref.ValueOfList(&listReflect{pv, c.c}) +} + +func (c *listConverter) GoValueOf(v pref.Value) reflect.Value { + rv := v.List().(*listReflect).v + if rv.IsNil() { + return reflect.Zero(c.goType) + } + return rv.Elem() +} + +func (c *listConverter) IsValidPB(v pref.Value) bool { + list, ok := v.Interface().(*listReflect) + if !ok { + return false + } + return list.v.Type().Elem() == c.goType && list.IsValid() +} + +func (c *listConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} + +func (c *listConverter) New() pref.Value { + return pref.ValueOfList(&listReflect{reflect.New(c.goType), c.c}) +} + +func (c *listConverter) Zero() pref.Value { + return pref.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c}) +} + +type listPtrConverter struct { + goType reflect.Type + c Converter +} + +func (c *listPtrConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfList(&listReflect{v, c.c}) +} + +func (c *listPtrConverter) GoValueOf(v pref.Value) reflect.Value { + return v.List().(*listReflect).v +} + +func (c *listPtrConverter) IsValidPB(v pref.Value) bool { + list, ok := v.Interface().(*listReflect) + if !ok { + return false + } + return list.v.Type() == c.goType +} + +func (c *listPtrConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} + +func (c *listPtrConverter) New() pref.Value { + return c.PBValueOf(reflect.New(c.goType.Elem())) +} + +func (c *listPtrConverter) Zero() pref.Value { + return c.PBValueOf(reflect.Zero(c.goType)) +} + +type listReflect struct { + v reflect.Value // *[]T + conv Converter +} + +func (ls *listReflect) Len() int { + if ls.v.IsNil() { + return 0 + } + return ls.v.Elem().Len() +} +func (ls *listReflect) Get(i int) pref.Value { + return ls.conv.PBValueOf(ls.v.Elem().Index(i)) +} +func (ls *listReflect) Set(i int, v pref.Value) { + ls.v.Elem().Index(i).Set(ls.conv.GoValueOf(v)) +} +func (ls *listReflect) Append(v pref.Value) { + ls.v.Elem().Set(reflect.Append(ls.v.Elem(), ls.conv.GoValueOf(v))) +} +func (ls *listReflect) AppendMutable() pref.Value { + if _, ok := ls.conv.(*messageConverter); !ok { + panic("invalid AppendMutable on list with non-message type") + } + v := ls.NewElement() + ls.Append(v) + return v +} +func (ls *listReflect) Truncate(i int) { + ls.v.Elem().Set(ls.v.Elem().Slice(0, i)) +} +func (ls *listReflect) NewElement() pref.Value { + return ls.conv.New() +} +func (ls *listReflect) IsValid() bool { + return !ls.v.IsNil() +} +func (ls *listReflect) protoUnwrap() interface{} { + return ls.v.Interface() +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_map.go b/vendor/google.golang.org/protobuf/internal/impl/convert_map.go new file mode 100644 index 00000000..3ef36d3f --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/convert_map.go @@ -0,0 +1,121 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type mapConverter struct { + goType reflect.Type + keyConv, valConv Converter +} + +func newMapConverter(t reflect.Type, fd pref.FieldDescriptor) *mapConverter { + if t.Kind() != reflect.Map { + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) + } + return &mapConverter{ + goType: t, + keyConv: newSingularConverter(t.Key(), fd.MapKey()), + valConv: newSingularConverter(t.Elem(), fd.MapValue()), + } +} + +func (c *mapConverter) PBValueOf(v reflect.Value) pref.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return pref.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv}) +} + +func (c *mapConverter) GoValueOf(v pref.Value) reflect.Value { + return v.Map().(*mapReflect).v +} + +func (c *mapConverter) IsValidPB(v pref.Value) bool { + mapv, ok := v.Interface().(*mapReflect) + if !ok { + return false + } + return mapv.v.Type() == c.goType && mapv.IsValid() +} + +func (c *mapConverter) IsValidGo(v reflect.Value) bool { + return v.Type() == c.goType +} + +func (c *mapConverter) New() pref.Value { + return c.PBValueOf(reflect.MakeMap(c.goType)) +} + +func (c *mapConverter) Zero() pref.Value { + return c.PBValueOf(reflect.Zero(c.goType)) +} + +type mapReflect struct { + v reflect.Value // map[K]V + keyConv Converter + valConv Converter +} + +func (ms *mapReflect) Len() int { + return ms.v.Len() +} +func (ms *mapReflect) Has(k pref.MapKey) bool { + rk := ms.keyConv.GoValueOf(k.Value()) + rv := ms.v.MapIndex(rk) + return rv.IsValid() +} +func (ms *mapReflect) Get(k pref.MapKey) pref.Value { + rk := ms.keyConv.GoValueOf(k.Value()) + rv := ms.v.MapIndex(rk) + if !rv.IsValid() { + return pref.Value{} + } + return ms.valConv.PBValueOf(rv) +} +func (ms *mapReflect) Set(k pref.MapKey, v pref.Value) { + rk := ms.keyConv.GoValueOf(k.Value()) + rv := ms.valConv.GoValueOf(v) + ms.v.SetMapIndex(rk, rv) +} +func (ms *mapReflect) Clear(k pref.MapKey) { + rk := ms.keyConv.GoValueOf(k.Value()) + ms.v.SetMapIndex(rk, reflect.Value{}) +} +func (ms *mapReflect) Mutable(k pref.MapKey) pref.Value { + if _, ok := ms.valConv.(*messageConverter); !ok { + panic("invalid Mutable on map with non-message value type") + } + v := ms.Get(k) + if !v.IsValid() { + v = ms.NewValue() + ms.Set(k, v) + } + return v +} +func (ms *mapReflect) Range(f func(pref.MapKey, pref.Value) bool) { + iter := mapRange(ms.v) + for iter.Next() { + k := ms.keyConv.PBValueOf(iter.Key()).MapKey() + v := ms.valConv.PBValueOf(iter.Value()) + if !f(k, v) { + return + } + } +} +func (ms *mapReflect) NewValue() pref.Value { + return ms.valConv.New() +} +func (ms *mapReflect) IsValid() bool { + return !ms.v.IsNil() +} +func (ms *mapReflect) protoUnwrap() interface{} { + return ms.v.Interface() +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/decode.go b/vendor/google.golang.org/protobuf/internal/impl/decode.go new file mode 100644 index 00000000..85ba1d3b --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/decode.go @@ -0,0 +1,274 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "math/bits" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +type unmarshalOptions struct { + flags protoiface.UnmarshalInputFlags + resolver interface { + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) + } +} + +func (o unmarshalOptions) Options() proto.UnmarshalOptions { + return proto.UnmarshalOptions{ + Merge: true, + AllowPartial: true, + DiscardUnknown: o.DiscardUnknown(), + Resolver: o.resolver, + } +} + +func (o unmarshalOptions) DiscardUnknown() bool { return o.flags&piface.UnmarshalDiscardUnknown != 0 } + +func (o unmarshalOptions) IsDefault() bool { + return o.flags == 0 && o.resolver == preg.GlobalTypes +} + +var lazyUnmarshalOptions = unmarshalOptions{ + resolver: preg.GlobalTypes, +} + +type unmarshalOutput struct { + n int // number of bytes consumed + initialized bool +} + +// unmarshal is protoreflect.Methods.Unmarshal. +func (mi *MessageInfo) unmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutput, error) { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + out, err := mi.unmarshalPointer(in.Buf, p, 0, unmarshalOptions{ + flags: in.Flags, + resolver: in.Resolver, + }) + var flags piface.UnmarshalOutputFlags + if out.initialized { + flags |= piface.UnmarshalInitialized + } + return piface.UnmarshalOutput{ + Flags: flags, + }, err +} + +// errUnknown is returned during unmarshaling to indicate a parse error that +// should result in a field being placed in the unknown fields section (for example, +// when the wire type doesn't match) as opposed to the entire unmarshal operation +// failing (for example, when a field extends past the available input). +// +// This is a sentinel error which should never be visible to the user. +var errUnknown = errors.New("unknown") + +func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { + mi.init() + if flags.ProtoLegacy && mi.isMessageSet { + return unmarshalMessageSet(mi, b, p, opts) + } + initialized := true + var requiredMask uint64 + var exts *map[int32]ExtensionField + start := len(b) + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, protowire.ParseError(n) + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return out, errors.New("invalid field number") + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + + if wtyp == protowire.EndGroupType { + if num != groupTag { + return out, errors.New("mismatching end group marker") + } + groupTag = 0 + break + } + + var f *coderFieldInfo + if int(num) < len(mi.denseCoderFields) { + f = mi.denseCoderFields[num] + } else { + f = mi.coderFields[num] + } + var n int + err := errUnknown + switch { + case f != nil: + if f.funcs.unmarshal == nil { + break + } + var o unmarshalOutput + o, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts) + n = o.n + if err != nil { + break + } + requiredMask |= f.validation.requiredBit + if f.funcs.isInit != nil && !o.initialized { + initialized = false + } + default: + // Possible extension. + if exts == nil && mi.extensionOffset.IsValid() { + exts = p.Apply(mi.extensionOffset).Extensions() + if *exts == nil { + *exts = make(map[int32]ExtensionField) + } + } + if exts == nil { + break + } + var o unmarshalOutput + o, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts) + if err != nil { + break + } + n = o.n + if !o.initialized { + initialized = false + } + } + if err != nil { + if err != errUnknown { + return out, err + } + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, protowire.ParseError(n) + } + if !opts.DiscardUnknown() && mi.unknownOffset.IsValid() { + u := p.Apply(mi.unknownOffset).Bytes() + *u = protowire.AppendTag(*u, num, wtyp) + *u = append(*u, b[:n]...) + } + } + b = b[n:] + } + if groupTag != 0 { + return out, errors.New("missing end group marker") + } + if mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) { + initialized = false + } + if initialized { + out.initialized = true + } + out.n = start - len(b) + return out, nil +} + +func (mi *MessageInfo) unmarshalExtension(b []byte, num protowire.Number, wtyp protowire.Type, exts map[int32]ExtensionField, opts unmarshalOptions) (out unmarshalOutput, err error) { + x := exts[int32(num)] + xt := x.Type() + if xt == nil { + var err error + xt, err = opts.resolver.FindExtensionByNumber(mi.Desc.FullName(), num) + if err != nil { + if err == preg.NotFound { + return out, errUnknown + } + return out, errors.New("%v: unable to resolve extension %v: %v", mi.Desc.FullName(), num, err) + } + } + xi := getExtensionFieldInfo(xt) + if xi.funcs.unmarshal == nil { + return out, errUnknown + } + if flags.LazyUnmarshalExtensions { + if opts.IsDefault() && x.canLazy(xt) { + out, valid := skipExtension(b, xi, num, wtyp, opts) + switch valid { + case ValidationValid: + if out.initialized { + x.appendLazyBytes(xt, xi, num, wtyp, b[:out.n]) + exts[int32(num)] = x + return out, nil + } + case ValidationInvalid: + return out, errors.New("invalid wire format") + case ValidationUnknown: + } + } + } + ival := x.Value() + if !ival.IsValid() && xi.unmarshalNeedsValue { + // Create a new message, list, or map value to fill in. + // For enums, create a prototype value to let the unmarshal func know the + // concrete type. + ival = xt.New() + } + v, out, err := xi.funcs.unmarshal(b, ival, num, wtyp, opts) + if err != nil { + return out, err + } + if xi.funcs.isInit == nil { + out.initialized = true + } + x.Set(xt, v) + exts[int32(num)] = x + return out, nil +} + +func skipExtension(b []byte, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) { + if xi.validation.mi == nil { + return out, ValidationUnknown + } + xi.validation.mi.init() + switch xi.validation.typ { + case validationTypeMessage: + if wtyp != protowire.BytesType { + return out, ValidationUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, ValidationUnknown + } + out, st := xi.validation.mi.validate(v, 0, opts) + out.n = n + return out, st + case validationTypeGroup: + if wtyp != protowire.StartGroupType { + return out, ValidationUnknown + } + out, st := xi.validation.mi.validate(b, num, opts) + return out, st + default: + return out, ValidationUnknown + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/encode.go b/vendor/google.golang.org/protobuf/internal/impl/encode.go new file mode 100644 index 00000000..8c8a794c --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/encode.go @@ -0,0 +1,199 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "math" + "sort" + "sync/atomic" + + "google.golang.org/protobuf/internal/flags" + proto "google.golang.org/protobuf/proto" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +type marshalOptions struct { + flags piface.MarshalInputFlags +} + +func (o marshalOptions) Options() proto.MarshalOptions { + return proto.MarshalOptions{ + AllowPartial: true, + Deterministic: o.Deterministic(), + UseCachedSize: o.UseCachedSize(), + } +} + +func (o marshalOptions) Deterministic() bool { return o.flags&piface.MarshalDeterministic != 0 } +func (o marshalOptions) UseCachedSize() bool { return o.flags&piface.MarshalUseCachedSize != 0 } + +// size is protoreflect.Methods.Size. +func (mi *MessageInfo) size(in piface.SizeInput) piface.SizeOutput { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + size := mi.sizePointer(p, marshalOptions{ + flags: in.Flags, + }) + return piface.SizeOutput{Size: size} +} + +func (mi *MessageInfo) sizePointer(p pointer, opts marshalOptions) (size int) { + mi.init() + if p.IsNil() { + return 0 + } + if opts.UseCachedSize() && mi.sizecacheOffset.IsValid() { + if size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size >= 0 { + return int(size) + } + } + return mi.sizePointerSlow(p, opts) +} + +func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int) { + if flags.ProtoLegacy && mi.isMessageSet { + size = sizeMessageSet(mi, p, opts) + if mi.sizecacheOffset.IsValid() { + atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size)) + } + return size + } + if mi.extensionOffset.IsValid() { + e := p.Apply(mi.extensionOffset).Extensions() + size += mi.sizeExtensions(e, opts) + } + for _, f := range mi.orderedCoderFields { + if f.funcs.size == nil { + continue + } + fptr := p.Apply(f.offset) + if f.isPointer && fptr.Elem().IsNil() { + continue + } + size += f.funcs.size(fptr, f, opts) + } + if mi.unknownOffset.IsValid() { + u := *p.Apply(mi.unknownOffset).Bytes() + size += len(u) + } + if mi.sizecacheOffset.IsValid() { + if size > math.MaxInt32 { + // The size is too large for the int32 sizecache field. + // We will need to recompute the size when encoding; + // unfortunately expensive, but better than invalid output. + atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), -1) + } else { + atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size)) + } + } + return size +} + +// marshal is protoreflect.Methods.Marshal. +func (mi *MessageInfo) marshal(in piface.MarshalInput) (out piface.MarshalOutput, err error) { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + b, err := mi.marshalAppendPointer(in.Buf, p, marshalOptions{ + flags: in.Flags, + }) + return piface.MarshalOutput{Buf: b}, err +} + +func (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOptions) ([]byte, error) { + mi.init() + if p.IsNil() { + return b, nil + } + if flags.ProtoLegacy && mi.isMessageSet { + return marshalMessageSet(mi, b, p, opts) + } + var err error + // The old marshaler encodes extensions at beginning. + if mi.extensionOffset.IsValid() { + e := p.Apply(mi.extensionOffset).Extensions() + // TODO: Special handling for MessageSet? + b, err = mi.appendExtensions(b, e, opts) + if err != nil { + return b, err + } + } + for _, f := range mi.orderedCoderFields { + if f.funcs.marshal == nil { + continue + } + fptr := p.Apply(f.offset) + if f.isPointer && fptr.Elem().IsNil() { + continue + } + b, err = f.funcs.marshal(b, fptr, f, opts) + if err != nil { + return b, err + } + } + if mi.unknownOffset.IsValid() && !mi.isMessageSet { + u := *p.Apply(mi.unknownOffset).Bytes() + b = append(b, u...) + } + return b, nil +} + +func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) { + if ext == nil { + return 0 + } + for _, x := range *ext { + xi := getExtensionFieldInfo(x.Type()) + if xi.funcs.size == nil { + continue + } + n += xi.funcs.size(x.Value(), xi.tagsize, opts) + } + return n +} + +func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField, opts marshalOptions) ([]byte, error) { + if ext == nil { + return b, nil + } + + switch len(*ext) { + case 0: + return b, nil + case 1: + // Fast-path for one extension: Don't bother sorting the keys. + var err error + for _, x := range *ext { + xi := getExtensionFieldInfo(x.Type()) + b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts) + } + return b, err + default: + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(*ext)) + for k := range *ext { + keys = append(keys, int(k)) + } + sort.Ints(keys) + var err error + for _, k := range keys { + x := (*ext)[int32(k)] + xi := getExtensionFieldInfo(x.Type()) + b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts) + if err != nil { + return b, err + } + } + return b, nil + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/enum.go b/vendor/google.golang.org/protobuf/internal/impl/enum.go new file mode 100644 index 00000000..8c1eab4b --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/enum.go @@ -0,0 +1,21 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type EnumInfo struct { + GoReflectType reflect.Type // int32 kind + Desc pref.EnumDescriptor +} + +func (t *EnumInfo) New(n pref.EnumNumber) pref.Enum { + return reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(pref.Enum) +} +func (t *EnumInfo) Descriptor() pref.EnumDescriptor { return t.Desc } diff --git a/vendor/google.golang.org/protobuf/internal/impl/extension.go b/vendor/google.golang.org/protobuf/internal/impl/extension.go new file mode 100644 index 00000000..e904fd99 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/extension.go @@ -0,0 +1,156 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + "sync" + "sync/atomic" + + pref "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// ExtensionInfo implements ExtensionType. +// +// This type contains a number of exported fields for legacy compatibility. +// The only non-deprecated use of this type is through the methods of the +// ExtensionType interface. +type ExtensionInfo struct { + // An ExtensionInfo may exist in several stages of initialization. + // + // extensionInfoUninitialized: Some or all of the legacy exported + // fields may be set, but none of the unexported fields have been + // initialized. This is the starting state for an ExtensionInfo + // in legacy generated code. + // + // extensionInfoDescInit: The desc field is set, but other unexported fields + // may not be initialized. Legacy exported fields may or may not be set. + // This is the starting state for an ExtensionInfo in newly generated code. + // + // extensionInfoFullInit: The ExtensionInfo is fully initialized. + // This state is only entered after lazy initialization is complete. + init uint32 + mu sync.Mutex + + goType reflect.Type + desc extensionTypeDescriptor + conv Converter + info *extensionFieldInfo // for fast-path method implementations + + // ExtendedType is a typed nil-pointer to the parent message type that + // is being extended. It is possible for this to be unpopulated in v2 + // since the message may no longer implement the MessageV1 interface. + // + // Deprecated: Use the ExtendedType method instead. + ExtendedType piface.MessageV1 + + // ExtensionType is the zero value of the extension type. + // + // For historical reasons, reflect.TypeOf(ExtensionType) and the + // type returned by InterfaceOf may not be identical. + // + // Deprecated: Use InterfaceOf(xt.Zero()) instead. + ExtensionType interface{} + + // Field is the field number of the extension. + // + // Deprecated: Use the Descriptor().Number method instead. + Field int32 + + // Name is the fully qualified name of extension. + // + // Deprecated: Use the Descriptor().FullName method instead. + Name string + + // Tag is the protobuf struct tag used in the v1 API. + // + // Deprecated: Do not use. + Tag string + + // Filename is the proto filename in which the extension is defined. + // + // Deprecated: Use Descriptor().ParentFile().Path() instead. + Filename string +} + +// Stages of initialization: See the ExtensionInfo.init field. +const ( + extensionInfoUninitialized = 0 + extensionInfoDescInit = 1 + extensionInfoFullInit = 2 +) + +func InitExtensionInfo(xi *ExtensionInfo, xd pref.ExtensionDescriptor, goType reflect.Type) { + xi.goType = goType + xi.desc = extensionTypeDescriptor{xd, xi} + xi.init = extensionInfoDescInit +} + +func (xi *ExtensionInfo) New() pref.Value { + return xi.lazyInit().New() +} +func (xi *ExtensionInfo) Zero() pref.Value { + return xi.lazyInit().Zero() +} +func (xi *ExtensionInfo) ValueOf(v interface{}) pref.Value { + return xi.lazyInit().PBValueOf(reflect.ValueOf(v)) +} +func (xi *ExtensionInfo) InterfaceOf(v pref.Value) interface{} { + return xi.lazyInit().GoValueOf(v).Interface() +} +func (xi *ExtensionInfo) IsValidValue(v pref.Value) bool { + return xi.lazyInit().IsValidPB(v) +} +func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool { + return xi.lazyInit().IsValidGo(reflect.ValueOf(v)) +} +func (xi *ExtensionInfo) TypeDescriptor() pref.ExtensionTypeDescriptor { + if atomic.LoadUint32(&xi.init) < extensionInfoDescInit { + xi.lazyInitSlow() + } + return &xi.desc +} + +func (xi *ExtensionInfo) lazyInit() Converter { + if atomic.LoadUint32(&xi.init) < extensionInfoFullInit { + xi.lazyInitSlow() + } + return xi.conv +} + +func (xi *ExtensionInfo) lazyInitSlow() { + xi.mu.Lock() + defer xi.mu.Unlock() + + if xi.init == extensionInfoFullInit { + return + } + defer atomic.StoreUint32(&xi.init, extensionInfoFullInit) + + if xi.desc.ExtensionDescriptor == nil { + xi.initFromLegacy() + } + if !xi.desc.ExtensionDescriptor.IsPlaceholder() { + if xi.ExtensionType == nil { + xi.initToLegacy() + } + xi.conv = NewConverter(xi.goType, xi.desc.ExtensionDescriptor) + xi.info = makeExtensionFieldInfo(xi.desc.ExtensionDescriptor) + xi.info.validation = newValidationInfo(xi.desc.ExtensionDescriptor, xi.goType) + } +} + +type extensionTypeDescriptor struct { + pref.ExtensionDescriptor + xi *ExtensionInfo +} + +func (xtd *extensionTypeDescriptor) Type() pref.ExtensionType { + return xtd.xi +} +func (xtd *extensionTypeDescriptor) Descriptor() pref.ExtensionDescriptor { + return xtd.ExtensionDescriptor +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go new file mode 100644 index 00000000..f7d7ffb5 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go @@ -0,0 +1,219 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strings" + "sync" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// legacyEnumName returns the name of enums used in legacy code. +// It is neither the protobuf full name nor the qualified Go name, +// but rather an odd hybrid of both. +func legacyEnumName(ed pref.EnumDescriptor) string { + var protoPkg string + enumName := string(ed.FullName()) + if fd := ed.ParentFile(); fd != nil { + protoPkg = string(fd.Package()) + enumName = strings.TrimPrefix(enumName, protoPkg+".") + } + if protoPkg == "" { + return strs.GoCamelCase(enumName) + } + return protoPkg + "." + strs.GoCamelCase(enumName) +} + +// legacyWrapEnum wraps v as a protoreflect.Enum, +// where v must be a int32 kind and not implement the v2 API already. +func legacyWrapEnum(v reflect.Value) pref.Enum { + et := legacyLoadEnumType(v.Type()) + return et.New(pref.EnumNumber(v.Int())) +} + +var legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType + +// legacyLoadEnumType dynamically loads a protoreflect.EnumType for t, +// where t must be an int32 kind and not implement the v2 API already. +func legacyLoadEnumType(t reflect.Type) pref.EnumType { + // Fast-path: check if a EnumType is cached for this concrete type. + if et, ok := legacyEnumTypeCache.Load(t); ok { + return et.(pref.EnumType) + } + + // Slow-path: derive enum descriptor and initialize EnumType. + var et pref.EnumType + ed := LegacyLoadEnumDesc(t) + et = &legacyEnumType{ + desc: ed, + goType: t, + } + if et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok { + return et.(pref.EnumType) + } + return et +} + +type legacyEnumType struct { + desc pref.EnumDescriptor + goType reflect.Type + m sync.Map // map[protoreflect.EnumNumber]proto.Enum +} + +func (t *legacyEnumType) New(n pref.EnumNumber) pref.Enum { + if e, ok := t.m.Load(n); ok { + return e.(pref.Enum) + } + e := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType} + t.m.Store(n, e) + return e +} +func (t *legacyEnumType) Descriptor() pref.EnumDescriptor { + return t.desc +} + +type legacyEnumWrapper struct { + num pref.EnumNumber + pbTyp pref.EnumType + goTyp reflect.Type +} + +func (e *legacyEnumWrapper) Descriptor() pref.EnumDescriptor { + return e.pbTyp.Descriptor() +} +func (e *legacyEnumWrapper) Type() pref.EnumType { + return e.pbTyp +} +func (e *legacyEnumWrapper) Number() pref.EnumNumber { + return e.num +} +func (e *legacyEnumWrapper) ProtoReflect() pref.Enum { + return e +} +func (e *legacyEnumWrapper) protoUnwrap() interface{} { + v := reflect.New(e.goTyp).Elem() + v.SetInt(int64(e.num)) + return v.Interface() +} + +var ( + _ pref.Enum = (*legacyEnumWrapper)(nil) + _ unwrapper = (*legacyEnumWrapper)(nil) +) + +var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor + +// LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type, +// which must be an int32 kind and not implement the v2 API already. +// +// This is exported for testing purposes. +func LegacyLoadEnumDesc(t reflect.Type) pref.EnumDescriptor { + // Fast-path: check if an EnumDescriptor is cached for this concrete type. + if ed, ok := legacyEnumDescCache.Load(t); ok { + return ed.(pref.EnumDescriptor) + } + + // Slow-path: initialize EnumDescriptor from the raw descriptor. + ev := reflect.Zero(t).Interface() + if _, ok := ev.(pref.Enum); ok { + panic(fmt.Sprintf("%v already implements proto.Enum", t)) + } + edV1, ok := ev.(enumV1) + if !ok { + return aberrantLoadEnumDesc(t) + } + b, idxs := edV1.EnumDescriptor() + + var ed pref.EnumDescriptor + if len(idxs) == 1 { + ed = legacyLoadFileDesc(b).Enums().Get(idxs[0]) + } else { + md := legacyLoadFileDesc(b).Messages().Get(idxs[0]) + for _, i := range idxs[1 : len(idxs)-1] { + md = md.Messages().Get(i) + } + ed = md.Enums().Get(idxs[len(idxs)-1]) + } + if ed, ok := legacyEnumDescCache.LoadOrStore(t, ed); ok { + return ed.(protoreflect.EnumDescriptor) + } + return ed +} + +var aberrantEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor + +// aberrantLoadEnumDesc returns an EnumDescriptor derived from the Go type, +// which must not implement protoreflect.Enum or enumV1. +// +// If the type does not implement enumV1, then there is no reliable +// way to derive the original protobuf type information. +// We are unable to use the global enum registry since it is +// unfortunately keyed by the protobuf full name, which we also do not know. +// Thus, this produces some bogus enum descriptor based on the Go type name. +func aberrantLoadEnumDesc(t reflect.Type) pref.EnumDescriptor { + // Fast-path: check if an EnumDescriptor is cached for this concrete type. + if ed, ok := aberrantEnumDescCache.Load(t); ok { + return ed.(pref.EnumDescriptor) + } + + // Slow-path: construct a bogus, but unique EnumDescriptor. + ed := &filedesc.Enum{L2: new(filedesc.EnumL2)} + ed.L0.FullName = AberrantDeriveFullName(t) // e.g., github_com.user.repo.MyEnum + ed.L0.ParentFile = filedesc.SurrogateProto3 + ed.L2.Values.List = append(ed.L2.Values.List, filedesc.EnumValue{}) + + // TODO: Use the presence of a UnmarshalJSON method to determine proto2? + + vd := &ed.L2.Values.List[0] + vd.L0.FullName = ed.L0.FullName + "_UNKNOWN" // e.g., github_com.user.repo.MyEnum_UNKNOWN + vd.L0.ParentFile = ed.L0.ParentFile + vd.L0.Parent = ed + + // TODO: We could use the String method to obtain some enum value names by + // starting at 0 and print the enum until it produces invalid identifiers. + // An exhaustive query is clearly impractical, but can be best-effort. + + if ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok { + return ed.(pref.EnumDescriptor) + } + return ed +} + +// AberrantDeriveFullName derives a fully qualified protobuf name for the given Go type +// The provided name is not guaranteed to be stable nor universally unique. +// It should be sufficiently unique within a program. +// +// This is exported for testing purposes. +func AberrantDeriveFullName(t reflect.Type) pref.FullName { + sanitize := func(r rune) rune { + switch { + case r == '/': + return '.' + case 'a' <= r && r <= 'z', 'A' <= r && r <= 'Z', '0' <= r && r <= '9': + return r + default: + return '_' + } + } + prefix := strings.Map(sanitize, t.PkgPath()) + suffix := strings.Map(sanitize, t.Name()) + if suffix == "" { + suffix = fmt.Sprintf("UnknownX%X", reflect.ValueOf(t).Pointer()) + } + + ss := append(strings.Split(prefix, "."), suffix) + for i, s := range ss { + if s == "" || ('0' <= s[0] && s[0] <= '9') { + ss[i] = "x" + s + } + } + return pref.FullName(strings.Join(ss, ".")) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go new file mode 100644 index 00000000..94f45725 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go @@ -0,0 +1,104 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "encoding/binary" + "encoding/json" + "fmt" + "hash/crc32" + "math" + "reflect" + + "google.golang.org/protobuf/internal/errors" + pref "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// These functions exist to support exported APIs in generated protobufs. +// While these are deprecated, they cannot be removed for compatibility reasons. + +// LegacyEnumName returns the name of enums used in legacy code. +func (Export) LegacyEnumName(ed pref.EnumDescriptor) string { + return legacyEnumName(ed) +} + +// LegacyMessageTypeOf returns the protoreflect.MessageType for m, +// with name used as the message name if necessary. +func (Export) LegacyMessageTypeOf(m piface.MessageV1, name pref.FullName) pref.MessageType { + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect().Type() + } + return legacyLoadMessageInfo(reflect.TypeOf(m), name) +} + +// UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input. +// The input can either be a string representing the enum value by name, +// or a number representing the enum number itself. +func (Export) UnmarshalJSONEnum(ed pref.EnumDescriptor, b []byte) (pref.EnumNumber, error) { + if b[0] == '"' { + var name pref.Name + if err := json.Unmarshal(b, &name); err != nil { + return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b) + } + ev := ed.Values().ByName(name) + if ev == nil { + return 0, errors.New("invalid value for enum %v: %s", ed.FullName(), name) + } + return ev.Number(), nil + } else { + var num pref.EnumNumber + if err := json.Unmarshal(b, &num); err != nil { + return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b) + } + return num, nil + } +} + +// CompressGZIP compresses the input as a GZIP-encoded file. +// The current implementation does no compression. +func (Export) CompressGZIP(in []byte) (out []byte) { + // RFC 1952, section 2.3.1. + var gzipHeader = [10]byte{0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff} + + // RFC 1951, section 3.2.4. + var blockHeader [5]byte + const maxBlockSize = math.MaxUint16 + numBlocks := 1 + len(in)/maxBlockSize + + // RFC 1952, section 2.3.1. + var gzipFooter [8]byte + binary.LittleEndian.PutUint32(gzipFooter[0:4], crc32.ChecksumIEEE(in)) + binary.LittleEndian.PutUint32(gzipFooter[4:8], uint32(len(in))) + + // Encode the input without compression using raw DEFLATE blocks. + out = make([]byte, 0, len(gzipHeader)+len(blockHeader)*numBlocks+len(in)+len(gzipFooter)) + out = append(out, gzipHeader[:]...) + for blockHeader[0] == 0 { + blockSize := maxBlockSize + if blockSize > len(in) { + blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3. + blockSize = len(in) + } + binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize)^0x0000) + binary.LittleEndian.PutUint16(blockHeader[3:5], uint16(blockSize)^0xffff) + out = append(out, blockHeader[:]...) + out = append(out, in[:blockSize]...) + in = in[blockSize:] + } + out = append(out, gzipFooter[:]...) + return out +} + +// WeakNil returns a typed nil pointer to a concrete message. +// It panics if the message is not linked into the binary. +func (Export) WeakNil(s pref.FullName) piface.MessageV1 { + mt, err := protoregistry.GlobalTypes.FindMessageByName(s) + if err != nil { + panic(fmt.Sprintf("weak message %v is not linked in", s)) + } + return mt.Zero().Interface().(piface.MessageV1) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go new file mode 100644 index 00000000..93c318f9 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go @@ -0,0 +1,173 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/encoding/messageset" + ptag "google.golang.org/protobuf/internal/encoding/tag" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/pragma" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +func (xi *ExtensionInfo) initToLegacy() { + xd := xi.desc + var parent piface.MessageV1 + messageName := xd.ContainingMessage().FullName() + if mt, _ := preg.GlobalTypes.FindMessageByName(messageName); mt != nil { + // Create a new parent message and unwrap it if possible. + mv := mt.New().Interface() + t := reflect.TypeOf(mv) + if mv, ok := mv.(unwrapper); ok { + t = reflect.TypeOf(mv.protoUnwrap()) + } + + // Check whether the message implements the legacy v1 Message interface. + mz := reflect.Zero(t).Interface() + if mz, ok := mz.(piface.MessageV1); ok { + parent = mz + } + } + + // Determine the v1 extension type, which is unfortunately not the same as + // the v2 ExtensionType.GoType. + extType := xi.goType + switch extType.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + extType = reflect.PtrTo(extType) // T -> *T for singular scalar fields + } + + // Reconstruct the legacy enum full name. + var enumName string + if xd.Kind() == pref.EnumKind { + enumName = legacyEnumName(xd.Enum()) + } + + // Derive the proto file that the extension was declared within. + var filename string + if fd := xd.ParentFile(); fd != nil { + filename = fd.Path() + } + + // For MessageSet extensions, the name used is the parent message. + name := xd.FullName() + if messageset.IsMessageSetExtension(xd) { + name = name.Parent() + } + + xi.ExtendedType = parent + xi.ExtensionType = reflect.Zero(extType).Interface() + xi.Field = int32(xd.Number()) + xi.Name = string(name) + xi.Tag = ptag.Marshal(xd, enumName) + xi.Filename = filename +} + +// initFromLegacy initializes an ExtensionInfo from +// the contents of the deprecated exported fields of the type. +func (xi *ExtensionInfo) initFromLegacy() { + // The v1 API returns "type incomplete" descriptors where only the + // field number is specified. In such a case, use a placeholder. + if xi.ExtendedType == nil || xi.ExtensionType == nil { + xd := placeholderExtension{ + name: pref.FullName(xi.Name), + number: pref.FieldNumber(xi.Field), + } + xi.desc = extensionTypeDescriptor{xd, xi} + return + } + + // Resolve enum or message dependencies. + var ed pref.EnumDescriptor + var md pref.MessageDescriptor + t := reflect.TypeOf(xi.ExtensionType) + isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct + isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 + if isOptional || isRepeated { + t = t.Elem() + } + switch v := reflect.Zero(t).Interface().(type) { + case pref.Enum: + ed = v.Descriptor() + case enumV1: + ed = LegacyLoadEnumDesc(t) + case pref.ProtoMessage: + md = v.ProtoReflect().Descriptor() + case messageV1: + md = LegacyLoadMessageDesc(t) + } + + // Derive basic field information from the struct tag. + var evs pref.EnumValueDescriptors + if ed != nil { + evs = ed.Values() + } + fd := ptag.Unmarshal(xi.Tag, t, evs).(*filedesc.Field) + + // Construct a v2 ExtensionType. + xd := &filedesc.Extension{L2: new(filedesc.ExtensionL2)} + xd.L0.ParentFile = filedesc.SurrogateProto2 + xd.L0.FullName = pref.FullName(xi.Name) + xd.L1.Number = pref.FieldNumber(xi.Field) + xd.L1.Cardinality = fd.L1.Cardinality + xd.L1.Kind = fd.L1.Kind + xd.L2.IsPacked = fd.L1.IsPacked + xd.L2.Default = fd.L1.Default + xd.L1.Extendee = Export{}.MessageDescriptorOf(xi.ExtendedType) + xd.L2.Enum = ed + xd.L2.Message = md + + // Derive real extension field name for MessageSets. + if messageset.IsMessageSet(xd.L1.Extendee) && md.FullName() == xd.L0.FullName { + xd.L0.FullName = xd.L0.FullName.Append(messageset.ExtensionName) + } + + tt := reflect.TypeOf(xi.ExtensionType) + if isOptional { + tt = tt.Elem() + } + xi.goType = tt + xi.desc = extensionTypeDescriptor{xd, xi} +} + +type placeholderExtension struct { + name pref.FullName + number pref.FieldNumber +} + +func (x placeholderExtension) ParentFile() pref.FileDescriptor { return nil } +func (x placeholderExtension) Parent() pref.Descriptor { return nil } +func (x placeholderExtension) Index() int { return 0 } +func (x placeholderExtension) Syntax() pref.Syntax { return 0 } +func (x placeholderExtension) Name() pref.Name { return x.name.Name() } +func (x placeholderExtension) FullName() pref.FullName { return x.name } +func (x placeholderExtension) IsPlaceholder() bool { return true } +func (x placeholderExtension) Options() pref.ProtoMessage { return descopts.Field } +func (x placeholderExtension) Number() pref.FieldNumber { return x.number } +func (x placeholderExtension) Cardinality() pref.Cardinality { return 0 } +func (x placeholderExtension) Kind() pref.Kind { return 0 } +func (x placeholderExtension) HasJSONName() bool { return false } +func (x placeholderExtension) JSONName() string { return "" } +func (x placeholderExtension) IsExtension() bool { return true } +func (x placeholderExtension) IsWeak() bool { return false } +func (x placeholderExtension) IsPacked() bool { return false } +func (x placeholderExtension) IsList() bool { return false } +func (x placeholderExtension) IsMap() bool { return false } +func (x placeholderExtension) MapKey() pref.FieldDescriptor { return nil } +func (x placeholderExtension) MapValue() pref.FieldDescriptor { return nil } +func (x placeholderExtension) HasDefault() bool { return false } +func (x placeholderExtension) Default() pref.Value { return pref.Value{} } +func (x placeholderExtension) DefaultEnumValue() pref.EnumValueDescriptor { return nil } +func (x placeholderExtension) ContainingOneof() pref.OneofDescriptor { return nil } +func (x placeholderExtension) ContainingMessage() pref.MessageDescriptor { return nil } +func (x placeholderExtension) Enum() pref.EnumDescriptor { return nil } +func (x placeholderExtension) Message() pref.MessageDescriptor { return nil } +func (x placeholderExtension) ProtoType(pref.FieldDescriptor) { return } +func (x placeholderExtension) ProtoInternal(pragma.DoNotImplement) { return } diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go new file mode 100644 index 00000000..9ab09108 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go @@ -0,0 +1,81 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "bytes" + "compress/gzip" + "io/ioutil" + "sync" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Every enum and message type generated by protoc-gen-go since commit 2fc053c5 +// on February 25th, 2016 has had a method to get the raw descriptor. +// Types that were not generated by protoc-gen-go or were generated prior +// to that version are not supported. +// +// The []byte returned is the encoded form of a FileDescriptorProto message +// compressed using GZIP. The []int is the path from the top-level file +// to the specific message or enum declaration. +type ( + enumV1 interface { + EnumDescriptor() ([]byte, []int) + } + messageV1 interface { + Descriptor() ([]byte, []int) + } +) + +var legacyFileDescCache sync.Map // map[*byte]protoreflect.FileDescriptor + +// legacyLoadFileDesc unmarshals b as a compressed FileDescriptorProto message. +// +// This assumes that b is immutable and that b does not refer to part of a +// concatenated series of GZIP files (which would require shenanigans that +// rely on the concatenation properties of both protobufs and GZIP). +// File descriptors generated by protoc-gen-go do not rely on that property. +func legacyLoadFileDesc(b []byte) protoreflect.FileDescriptor { + // Fast-path: check whether we already have a cached file descriptor. + if fd, ok := legacyFileDescCache.Load(&b[0]); ok { + return fd.(protoreflect.FileDescriptor) + } + + // Slow-path: decompress and unmarshal the file descriptor proto. + zr, err := gzip.NewReader(bytes.NewReader(b)) + if err != nil { + panic(err) + } + b2, err := ioutil.ReadAll(zr) + if err != nil { + panic(err) + } + + fd := filedesc.Builder{ + RawDescriptor: b2, + FileRegistry: resolverOnly{protoregistry.GlobalFiles}, // do not register back to global registry + }.Build().File + if fd, ok := legacyFileDescCache.LoadOrStore(&b[0], fd); ok { + return fd.(protoreflect.FileDescriptor) + } + return fd +} + +type resolverOnly struct { + reg *protoregistry.Files +} + +func (r resolverOnly) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { + return r.reg.FindFileByPath(path) +} +func (r resolverOnly) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { + return r.reg.FindDescriptorByName(name) +} +func (resolverOnly) RegisterFile(protoreflect.FileDescriptor) error { + return nil +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go new file mode 100644 index 00000000..06c68e11 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go @@ -0,0 +1,502 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strings" + "sync" + + "google.golang.org/protobuf/internal/descopts" + ptag "google.golang.org/protobuf/internal/encoding/tag" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" + pref "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// legacyWrapMessage wraps v as a protoreflect.Message, +// where v must be a *struct kind and not implement the v2 API already. +func legacyWrapMessage(v reflect.Value) pref.Message { + typ := v.Type() + if typ.Kind() != reflect.Ptr || typ.Elem().Kind() != reflect.Struct { + return aberrantMessage{v: v} + } + mt := legacyLoadMessageInfo(typ, "") + return mt.MessageOf(v.Interface()) +} + +var legacyMessageTypeCache sync.Map // map[reflect.Type]*MessageInfo + +// legacyLoadMessageInfo dynamically loads a *MessageInfo for t, +// where t must be a *struct kind and not implement the v2 API already. +// The provided name is used if it cannot be determined from the message. +func legacyLoadMessageInfo(t reflect.Type, name pref.FullName) *MessageInfo { + // Fast-path: check if a MessageInfo is cached for this concrete type. + if mt, ok := legacyMessageTypeCache.Load(t); ok { + return mt.(*MessageInfo) + } + + // Slow-path: derive message descriptor and initialize MessageInfo. + mi := &MessageInfo{ + Desc: legacyLoadMessageDesc(t, name), + GoReflectType: t, + } + + v := reflect.Zero(t).Interface() + if _, ok := v.(legacyMarshaler); ok { + mi.methods.Marshal = legacyMarshal + + // We have no way to tell whether the type's Marshal method + // supports deterministic serialization or not, but this + // preserves the v1 implementation's behavior of always + // calling Marshal methods when present. + mi.methods.Flags |= piface.SupportMarshalDeterministic + } + if _, ok := v.(legacyUnmarshaler); ok { + mi.methods.Unmarshal = legacyUnmarshal + } + if _, ok := v.(legacyMerger); ok { + mi.methods.Merge = legacyMerge + } + + if mi, ok := legacyMessageTypeCache.LoadOrStore(t, mi); ok { + return mi.(*MessageInfo) + } + return mi +} + +var legacyMessageDescCache sync.Map // map[reflect.Type]protoreflect.MessageDescriptor + +// LegacyLoadMessageDesc returns an MessageDescriptor derived from the Go type, +// which must be a *struct kind and not implement the v2 API already. +// +// This is exported for testing purposes. +func LegacyLoadMessageDesc(t reflect.Type) pref.MessageDescriptor { + return legacyLoadMessageDesc(t, "") +} +func legacyLoadMessageDesc(t reflect.Type, name pref.FullName) pref.MessageDescriptor { + // Fast-path: check if a MessageDescriptor is cached for this concrete type. + if mi, ok := legacyMessageDescCache.Load(t); ok { + return mi.(pref.MessageDescriptor) + } + + // Slow-path: initialize MessageDescriptor from the raw descriptor. + mv := reflect.Zero(t).Interface() + if _, ok := mv.(pref.ProtoMessage); ok { + panic(fmt.Sprintf("%v already implements proto.Message", t)) + } + mdV1, ok := mv.(messageV1) + if !ok { + return aberrantLoadMessageDesc(t, name) + } + + // If this is a dynamic message type where there isn't a 1-1 mapping between + // Go and protobuf types, calling the Descriptor method on the zero value of + // the message type isn't likely to work. If it panics, swallow the panic and + // continue as if the Descriptor method wasn't present. + b, idxs := func() ([]byte, []int) { + defer func() { + recover() + }() + return mdV1.Descriptor() + }() + if b == nil { + return aberrantLoadMessageDesc(t, name) + } + + // If the Go type has no fields, then this might be a proto3 empty message + // from before the size cache was added. If there are any fields, check to + // see that at least one of them looks like something we generated. + if nfield := t.Elem().NumField(); nfield > 0 { + hasProtoField := false + for i := 0; i < nfield; i++ { + f := t.Elem().Field(i) + if f.Tag.Get("protobuf") != "" || f.Tag.Get("protobuf_oneof") != "" || strings.HasPrefix(f.Name, "XXX_") { + hasProtoField = true + break + } + } + if !hasProtoField { + return aberrantLoadMessageDesc(t, name) + } + } + + md := legacyLoadFileDesc(b).Messages().Get(idxs[0]) + for _, i := range idxs[1:] { + md = md.Messages().Get(i) + } + if name != "" && md.FullName() != name { + panic(fmt.Sprintf("mismatching message name: got %v, want %v", md.FullName(), name)) + } + if md, ok := legacyMessageDescCache.LoadOrStore(t, md); ok { + return md.(protoreflect.MessageDescriptor) + } + return md +} + +var ( + aberrantMessageDescLock sync.Mutex + aberrantMessageDescCache map[reflect.Type]protoreflect.MessageDescriptor +) + +// aberrantLoadMessageDesc returns an MessageDescriptor derived from the Go type, +// which must not implement protoreflect.ProtoMessage or messageV1. +// +// This is a best-effort derivation of the message descriptor using the protobuf +// tags on the struct fields. +func aberrantLoadMessageDesc(t reflect.Type, name pref.FullName) pref.MessageDescriptor { + aberrantMessageDescLock.Lock() + defer aberrantMessageDescLock.Unlock() + if aberrantMessageDescCache == nil { + aberrantMessageDescCache = make(map[reflect.Type]protoreflect.MessageDescriptor) + } + return aberrantLoadMessageDescReentrant(t, name) +} +func aberrantLoadMessageDescReentrant(t reflect.Type, name pref.FullName) pref.MessageDescriptor { + // Fast-path: check if an MessageDescriptor is cached for this concrete type. + if md, ok := aberrantMessageDescCache[t]; ok { + return md + } + + // Slow-path: construct a descriptor from the Go struct type (best-effort). + // Cache the MessageDescriptor early on so that we can resolve internal + // cyclic references. + md := &filedesc.Message{L2: new(filedesc.MessageL2)} + md.L0.FullName = aberrantDeriveMessageName(t, name) + md.L0.ParentFile = filedesc.SurrogateProto2 + aberrantMessageDescCache[t] = md + + if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct { + return md + } + + // Try to determine if the message is using proto3 by checking scalars. + for i := 0; i < t.Elem().NumField(); i++ { + f := t.Elem().Field(i) + if tag := f.Tag.Get("protobuf"); tag != "" { + switch f.Type.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + md.L0.ParentFile = filedesc.SurrogateProto3 + } + for _, s := range strings.Split(tag, ",") { + if s == "proto3" { + md.L0.ParentFile = filedesc.SurrogateProto3 + } + } + } + } + + // Obtain a list of oneof wrapper types. + var oneofWrappers []reflect.Type + for _, method := range []string{"XXX_OneofFuncs", "XXX_OneofWrappers"} { + if fn, ok := t.MethodByName(method); ok { + for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) { + if vs, ok := v.Interface().([]interface{}); ok { + for _, v := range vs { + oneofWrappers = append(oneofWrappers, reflect.TypeOf(v)) + } + } + } + } + } + + // Obtain a list of the extension ranges. + if fn, ok := t.MethodByName("ExtensionRangeArray"); ok { + vs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0] + for i := 0; i < vs.Len(); i++ { + v := vs.Index(i) + md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, [2]pref.FieldNumber{ + pref.FieldNumber(v.FieldByName("Start").Int()), + pref.FieldNumber(v.FieldByName("End").Int() + 1), + }) + md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, nil) + } + } + + // Derive the message fields by inspecting the struct fields. + for i := 0; i < t.Elem().NumField(); i++ { + f := t.Elem().Field(i) + if tag := f.Tag.Get("protobuf"); tag != "" { + tagKey := f.Tag.Get("protobuf_key") + tagVal := f.Tag.Get("protobuf_val") + aberrantAppendField(md, f.Type, tag, tagKey, tagVal) + } + if tag := f.Tag.Get("protobuf_oneof"); tag != "" { + n := len(md.L2.Oneofs.List) + md.L2.Oneofs.List = append(md.L2.Oneofs.List, filedesc.Oneof{}) + od := &md.L2.Oneofs.List[n] + od.L0.FullName = md.FullName().Append(pref.Name(tag)) + od.L0.ParentFile = md.L0.ParentFile + od.L0.Parent = md + od.L0.Index = n + + for _, t := range oneofWrappers { + if t.Implements(f.Type) { + f := t.Elem().Field(0) + if tag := f.Tag.Get("protobuf"); tag != "" { + aberrantAppendField(md, f.Type, tag, "", "") + fd := &md.L2.Fields.List[len(md.L2.Fields.List)-1] + fd.L1.ContainingOneof = od + od.L1.Fields.List = append(od.L1.Fields.List, fd) + } + } + } + } + } + + return md +} + +func aberrantDeriveMessageName(t reflect.Type, name pref.FullName) pref.FullName { + if name.IsValid() { + return name + } + func() { + defer func() { recover() }() // swallow possible nil panics + if m, ok := reflect.Zero(t).Interface().(interface{ XXX_MessageName() string }); ok { + name = pref.FullName(m.XXX_MessageName()) + } + }() + if name.IsValid() { + return name + } + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + return AberrantDeriveFullName(t) +} + +func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey, tagVal string) { + t := goType + isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct + isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 + if isOptional || isRepeated { + t = t.Elem() + } + fd := ptag.Unmarshal(tag, t, placeholderEnumValues{}).(*filedesc.Field) + + // Append field descriptor to the message. + n := len(md.L2.Fields.List) + md.L2.Fields.List = append(md.L2.Fields.List, *fd) + fd = &md.L2.Fields.List[n] + fd.L0.FullName = md.FullName().Append(fd.Name()) + fd.L0.ParentFile = md.L0.ParentFile + fd.L0.Parent = md + fd.L0.Index = n + + if fd.L1.IsWeak || fd.L1.HasPacked { + fd.L1.Options = func() pref.ProtoMessage { + opts := descopts.Field.ProtoReflect().New() + if fd.L1.IsWeak { + opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true)) + } + if fd.L1.HasPacked { + opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.IsPacked)) + } + return opts.Interface() + } + } + + // Populate Enum and Message. + if fd.Enum() == nil && fd.Kind() == pref.EnumKind { + switch v := reflect.Zero(t).Interface().(type) { + case pref.Enum: + fd.L1.Enum = v.Descriptor() + default: + fd.L1.Enum = LegacyLoadEnumDesc(t) + } + } + if fd.Message() == nil && (fd.Kind() == pref.MessageKind || fd.Kind() == pref.GroupKind) { + switch v := reflect.Zero(t).Interface().(type) { + case pref.ProtoMessage: + fd.L1.Message = v.ProtoReflect().Descriptor() + case messageV1: + fd.L1.Message = LegacyLoadMessageDesc(t) + default: + if t.Kind() == reflect.Map { + n := len(md.L1.Messages.List) + md.L1.Messages.List = append(md.L1.Messages.List, filedesc.Message{L2: new(filedesc.MessageL2)}) + md2 := &md.L1.Messages.List[n] + md2.L0.FullName = md.FullName().Append(pref.Name(strs.MapEntryName(string(fd.Name())))) + md2.L0.ParentFile = md.L0.ParentFile + md2.L0.Parent = md + md2.L0.Index = n + + md2.L1.IsMapEntry = true + md2.L2.Options = func() pref.ProtoMessage { + opts := descopts.Message.ProtoReflect().New() + opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOfBool(true)) + return opts.Interface() + } + + aberrantAppendField(md2, t.Key(), tagKey, "", "") + aberrantAppendField(md2, t.Elem(), tagVal, "", "") + + fd.L1.Message = md2 + break + } + fd.L1.Message = aberrantLoadMessageDescReentrant(t, "") + } + } +} + +type placeholderEnumValues struct { + protoreflect.EnumValueDescriptors +} + +func (placeholderEnumValues) ByNumber(n pref.EnumNumber) pref.EnumValueDescriptor { + return filedesc.PlaceholderEnumValue(pref.FullName(fmt.Sprintf("UNKNOWN_%d", n))) +} + +// legacyMarshaler is the proto.Marshaler interface superseded by protoiface.Methoder. +type legacyMarshaler interface { + Marshal() ([]byte, error) +} + +// legacyUnmarshaler is the proto.Unmarshaler interface superseded by protoiface.Methoder. +type legacyUnmarshaler interface { + Unmarshal([]byte) error +} + +// legacyMerger is the proto.Merger interface superseded by protoiface.Methoder. +type legacyMerger interface { + Merge(protoiface.MessageV1) +} + +var legacyProtoMethods = &piface.Methods{ + Marshal: legacyMarshal, + Unmarshal: legacyUnmarshal, + Merge: legacyMerge, + + // We have no way to tell whether the type's Marshal method + // supports deterministic serialization or not, but this + // preserves the v1 implementation's behavior of always + // calling Marshal methods when present. + Flags: piface.SupportMarshalDeterministic, +} + +func legacyMarshal(in piface.MarshalInput) (piface.MarshalOutput, error) { + v := in.Message.(unwrapper).protoUnwrap() + marshaler, ok := v.(legacyMarshaler) + if !ok { + return piface.MarshalOutput{}, errors.New("%T does not implement Marshal", v) + } + out, err := marshaler.Marshal() + if in.Buf != nil { + out = append(in.Buf, out...) + } + return piface.MarshalOutput{ + Buf: out, + }, err +} + +func legacyUnmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutput, error) { + v := in.Message.(unwrapper).protoUnwrap() + unmarshaler, ok := v.(legacyUnmarshaler) + if !ok { + return piface.UnmarshalOutput{}, errors.New("%T does not implement Marshal", v) + } + return piface.UnmarshalOutput{}, unmarshaler.Unmarshal(in.Buf) +} + +func legacyMerge(in piface.MergeInput) piface.MergeOutput { + dstv := in.Destination.(unwrapper).protoUnwrap() + merger, ok := dstv.(legacyMerger) + if !ok { + return piface.MergeOutput{} + } + merger.Merge(Export{}.ProtoMessageV1Of(in.Source)) + return piface.MergeOutput{Flags: piface.MergeComplete} +} + +// aberrantMessageType implements MessageType for all types other than pointer-to-struct. +type aberrantMessageType struct { + t reflect.Type +} + +func (mt aberrantMessageType) New() pref.Message { + return aberrantMessage{reflect.Zero(mt.t)} +} +func (mt aberrantMessageType) Zero() pref.Message { + return aberrantMessage{reflect.Zero(mt.t)} +} +func (mt aberrantMessageType) GoType() reflect.Type { + return mt.t +} +func (mt aberrantMessageType) Descriptor() pref.MessageDescriptor { + return LegacyLoadMessageDesc(mt.t) +} + +// aberrantMessage implements Message for all types other than pointer-to-struct. +// +// When the underlying type implements legacyMarshaler or legacyUnmarshaler, +// the aberrant Message can be marshaled or unmarshaled. Otherwise, there is +// not much that can be done with values of this type. +type aberrantMessage struct { + v reflect.Value +} + +func (m aberrantMessage) ProtoReflect() pref.Message { + return m +} + +func (m aberrantMessage) Descriptor() pref.MessageDescriptor { + return LegacyLoadMessageDesc(m.v.Type()) +} +func (m aberrantMessage) Type() pref.MessageType { + return aberrantMessageType{m.v.Type()} +} +func (m aberrantMessage) New() pref.Message { + return aberrantMessage{reflect.Zero(m.v.Type())} +} +func (m aberrantMessage) Interface() pref.ProtoMessage { + return m +} +func (m aberrantMessage) Range(f func(pref.FieldDescriptor, pref.Value) bool) { +} +func (m aberrantMessage) Has(pref.FieldDescriptor) bool { + panic("invalid field descriptor") +} +func (m aberrantMessage) Clear(pref.FieldDescriptor) { + panic("invalid field descriptor") +} +func (m aberrantMessage) Get(pref.FieldDescriptor) pref.Value { + panic("invalid field descriptor") +} +func (m aberrantMessage) Set(pref.FieldDescriptor, pref.Value) { + panic("invalid field descriptor") +} +func (m aberrantMessage) Mutable(pref.FieldDescriptor) pref.Value { + panic("invalid field descriptor") +} +func (m aberrantMessage) NewField(pref.FieldDescriptor) pref.Value { + panic("invalid field descriptor") +} +func (m aberrantMessage) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor { + panic("invalid oneof descriptor") +} +func (m aberrantMessage) GetUnknown() pref.RawFields { + return nil +} +func (m aberrantMessage) SetUnknown(pref.RawFields) { + // SetUnknown discards its input on messages which don't support unknown field storage. +} +func (m aberrantMessage) IsValid() bool { + // An invalid message is a read-only, empty message. Since we don't know anything + // about the alleged contents of this message, we can't say with confidence that + // it is invalid in this sense. Therefore, report it as valid. + return true +} +func (m aberrantMessage) ProtoMethods() *piface.Methods { + return legacyProtoMethods +} +func (m aberrantMessage) protoUnwrap() interface{} { + return m.v.Interface() +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge.go b/vendor/google.golang.org/protobuf/internal/impl/merge.go new file mode 100644 index 00000000..cdc4267d --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/merge.go @@ -0,0 +1,176 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/proto" + pref "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +type mergeOptions struct{} + +func (o mergeOptions) Merge(dst, src proto.Message) { + proto.Merge(dst, src) +} + +// merge is protoreflect.Methods.Merge. +func (mi *MessageInfo) merge(in piface.MergeInput) piface.MergeOutput { + dp, ok := mi.getPointer(in.Destination) + if !ok { + return piface.MergeOutput{} + } + sp, ok := mi.getPointer(in.Source) + if !ok { + return piface.MergeOutput{} + } + mi.mergePointer(dp, sp, mergeOptions{}) + return piface.MergeOutput{Flags: piface.MergeComplete} +} + +func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) { + mi.init() + if dst.IsNil() { + panic(fmt.Sprintf("invalid value: merging into nil message")) + } + if src.IsNil() { + return + } + for _, f := range mi.orderedCoderFields { + if f.funcs.merge == nil { + continue + } + sfptr := src.Apply(f.offset) + if f.isPointer && sfptr.Elem().IsNil() { + continue + } + f.funcs.merge(dst.Apply(f.offset), sfptr, f, opts) + } + if mi.extensionOffset.IsValid() { + sext := src.Apply(mi.extensionOffset).Extensions() + dext := dst.Apply(mi.extensionOffset).Extensions() + if *dext == nil { + *dext = make(map[int32]ExtensionField) + } + for num, sx := range *sext { + xt := sx.Type() + xi := getExtensionFieldInfo(xt) + if xi.funcs.merge == nil { + continue + } + dx := (*dext)[num] + var dv pref.Value + if dx.Type() == sx.Type() { + dv = dx.Value() + } + if !dv.IsValid() && xi.unmarshalNeedsValue { + dv = xt.New() + } + dv = xi.funcs.merge(dv, sx.Value(), opts) + dx.Set(sx.Type(), dv) + (*dext)[num] = dx + } + } + if mi.unknownOffset.IsValid() { + du := dst.Apply(mi.unknownOffset).Bytes() + su := src.Apply(mi.unknownOffset).Bytes() + if len(*su) > 0 { + *du = append(*du, *su...) + } + } +} + +func mergeScalarValue(dst, src pref.Value, opts mergeOptions) pref.Value { + return src +} + +func mergeBytesValue(dst, src pref.Value, opts mergeOptions) pref.Value { + return pref.ValueOfBytes(append(emptyBuf[:], src.Bytes()...)) +} + +func mergeListValue(dst, src pref.Value, opts mergeOptions) pref.Value { + dstl := dst.List() + srcl := src.List() + for i, llen := 0, srcl.Len(); i < llen; i++ { + dstl.Append(srcl.Get(i)) + } + return dst +} + +func mergeBytesListValue(dst, src pref.Value, opts mergeOptions) pref.Value { + dstl := dst.List() + srcl := src.List() + for i, llen := 0, srcl.Len(); i < llen; i++ { + sb := srcl.Get(i).Bytes() + db := append(emptyBuf[:], sb...) + dstl.Append(pref.ValueOfBytes(db)) + } + return dst +} + +func mergeMessageListValue(dst, src pref.Value, opts mergeOptions) pref.Value { + dstl := dst.List() + srcl := src.List() + for i, llen := 0, srcl.Len(); i < llen; i++ { + sm := srcl.Get(i).Message() + dm := proto.Clone(sm.Interface()).ProtoReflect() + dstl.Append(pref.ValueOfMessage(dm)) + } + return dst +} + +func mergeMessageValue(dst, src pref.Value, opts mergeOptions) pref.Value { + opts.Merge(dst.Message().Interface(), src.Message().Interface()) + return dst +} + +func mergeMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + if f.mi != nil { + if dst.Elem().IsNil() { + dst.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + f.mi.mergePointer(dst.Elem(), src.Elem(), opts) + } else { + dm := dst.AsValueOf(f.ft).Elem() + sm := src.AsValueOf(f.ft).Elem() + if dm.IsNil() { + dm.Set(reflect.New(f.ft.Elem())) + } + opts.Merge(asMessage(dm), asMessage(sm)) + } +} + +func mergeMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + for _, sp := range src.PointerSlice() { + dm := reflect.New(f.ft.Elem().Elem()) + if f.mi != nil { + f.mi.mergePointer(pointerOfValue(dm), sp, opts) + } else { + opts.Merge(asMessage(dm), asMessage(sp.AsValueOf(f.ft.Elem().Elem()))) + } + dst.AppendPointerSlice(pointerOfValue(dm)) + } +} + +func mergeBytes(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Bytes() = append(emptyBuf[:], *src.Bytes()...) +} + +func mergeBytesNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Bytes() + if len(v) > 0 { + *dst.Bytes() = append(emptyBuf[:], v...) + } +} + +func mergeBytesSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.BytesSlice() + for _, v := range *src.BytesSlice() { + *ds = append(*ds, append(emptyBuf[:], v...)) + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go b/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go new file mode 100644 index 00000000..8816c274 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go @@ -0,0 +1,209 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import () + +func mergeBool(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Bool() = *src.Bool() +} + +func mergeBoolNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Bool() + if v != false { + *dst.Bool() = v + } +} + +func mergeBoolPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.BoolPtr() + if p != nil { + v := *p + *dst.BoolPtr() = &v + } +} + +func mergeBoolSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.BoolSlice() + ss := src.BoolSlice() + *ds = append(*ds, *ss...) +} + +func mergeInt32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Int32() = *src.Int32() +} + +func mergeInt32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Int32() + if v != 0 { + *dst.Int32() = v + } +} + +func mergeInt32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Int32Ptr() + if p != nil { + v := *p + *dst.Int32Ptr() = &v + } +} + +func mergeInt32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Int32Slice() + ss := src.Int32Slice() + *ds = append(*ds, *ss...) +} + +func mergeUint32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Uint32() = *src.Uint32() +} + +func mergeUint32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Uint32() + if v != 0 { + *dst.Uint32() = v + } +} + +func mergeUint32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Uint32Ptr() + if p != nil { + v := *p + *dst.Uint32Ptr() = &v + } +} + +func mergeUint32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Uint32Slice() + ss := src.Uint32Slice() + *ds = append(*ds, *ss...) +} + +func mergeInt64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Int64() = *src.Int64() +} + +func mergeInt64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Int64() + if v != 0 { + *dst.Int64() = v + } +} + +func mergeInt64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Int64Ptr() + if p != nil { + v := *p + *dst.Int64Ptr() = &v + } +} + +func mergeInt64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Int64Slice() + ss := src.Int64Slice() + *ds = append(*ds, *ss...) +} + +func mergeUint64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Uint64() = *src.Uint64() +} + +func mergeUint64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Uint64() + if v != 0 { + *dst.Uint64() = v + } +} + +func mergeUint64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Uint64Ptr() + if p != nil { + v := *p + *dst.Uint64Ptr() = &v + } +} + +func mergeUint64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Uint64Slice() + ss := src.Uint64Slice() + *ds = append(*ds, *ss...) +} + +func mergeFloat32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Float32() = *src.Float32() +} + +func mergeFloat32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Float32() + if v != 0 { + *dst.Float32() = v + } +} + +func mergeFloat32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Float32Ptr() + if p != nil { + v := *p + *dst.Float32Ptr() = &v + } +} + +func mergeFloat32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Float32Slice() + ss := src.Float32Slice() + *ds = append(*ds, *ss...) +} + +func mergeFloat64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Float64() = *src.Float64() +} + +func mergeFloat64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Float64() + if v != 0 { + *dst.Float64() = v + } +} + +func mergeFloat64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Float64Ptr() + if p != nil { + v := *p + *dst.Float64Ptr() = &v + } +} + +func mergeFloat64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Float64Slice() + ss := src.Float64Slice() + *ds = append(*ds, *ss...) +} + +func mergeString(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.String() = *src.String() +} + +func mergeStringNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.String() + if v != "" { + *dst.String() = v + } +} + +func mergeStringPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.StringPtr() + if p != nil { + v := *p + *dst.StringPtr() = &v + } +} + +func mergeStringSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.StringSlice() + ss := src.StringSlice() + *ds = append(*ds, *ss...) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/message.go b/vendor/google.golang.org/protobuf/internal/impl/message.go new file mode 100644 index 00000000..c1d89023 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message.go @@ -0,0 +1,216 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strconv" + "strings" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/internal/genname" + "google.golang.org/protobuf/reflect/protoreflect" + pref "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// MessageInfo provides protobuf related functionality for a given Go type +// that represents a message. A given instance of MessageInfo is tied to +// exactly one Go type, which must be a pointer to a struct type. +// +// The exported fields must be populated before any methods are called +// and cannot be mutated after set. +type MessageInfo struct { + // GoReflectType is the underlying message Go type and must be populated. + GoReflectType reflect.Type // pointer to struct + + // Desc is the underlying message descriptor type and must be populated. + Desc pref.MessageDescriptor + + // Exporter must be provided in a purego environment in order to provide + // access to unexported fields. + Exporter exporter + + // OneofWrappers is list of pointers to oneof wrapper struct types. + OneofWrappers []interface{} + + initMu sync.Mutex // protects all unexported fields + initDone uint32 + + reflectMessageInfo // for reflection implementation + coderMessageInfo // for fast-path method implementations +} + +// exporter is a function that returns a reference to the ith field of v, +// where v is a pointer to a struct. It returns nil if it does not support +// exporting the requested field (e.g., already exported). +type exporter func(v interface{}, i int) interface{} + +// getMessageInfo returns the MessageInfo for any message type that +// is generated by our implementation of protoc-gen-go (for v2 and on). +// If it is unable to obtain a MessageInfo, it returns nil. +func getMessageInfo(mt reflect.Type) *MessageInfo { + m, ok := reflect.Zero(mt).Interface().(pref.ProtoMessage) + if !ok { + return nil + } + mr, ok := m.ProtoReflect().(interface{ ProtoMessageInfo() *MessageInfo }) + if !ok { + return nil + } + return mr.ProtoMessageInfo() +} + +func (mi *MessageInfo) init() { + // This function is called in the hot path. Inline the sync.Once logic, + // since allocating a closure for Once.Do is expensive. + // Keep init small to ensure that it can be inlined. + if atomic.LoadUint32(&mi.initDone) == 0 { + mi.initOnce() + } +} + +func (mi *MessageInfo) initOnce() { + mi.initMu.Lock() + defer mi.initMu.Unlock() + if mi.initDone == 1 { + return + } + + t := mi.GoReflectType + if t.Kind() != reflect.Ptr && t.Elem().Kind() != reflect.Struct { + panic(fmt.Sprintf("got %v, want *struct kind", t)) + } + t = t.Elem() + + si := mi.makeStructInfo(t) + mi.makeReflectFuncs(t, si) + mi.makeCoderMethods(t, si) + + atomic.StoreUint32(&mi.initDone, 1) +} + +// getPointer returns the pointer for a message, which should be of +// the type of the MessageInfo. If the message is of a different type, +// it returns ok==false. +func (mi *MessageInfo) getPointer(m pref.Message) (p pointer, ok bool) { + switch m := m.(type) { + case *messageState: + return m.pointer(), m.messageInfo() == mi + case *messageReflectWrapper: + return m.pointer(), m.messageInfo() == mi + } + return pointer{}, false +} + +type ( + SizeCache = int32 + WeakFields = map[int32]piface.MessageV1 + UnknownFields = []byte + ExtensionFields = map[int32]ExtensionField +) + +var ( + sizecacheType = reflect.TypeOf(SizeCache(0)) + weakFieldsType = reflect.TypeOf(WeakFields(nil)) + unknownFieldsType = reflect.TypeOf(UnknownFields(nil)) + extensionFieldsType = reflect.TypeOf(ExtensionFields(nil)) +) + +type structInfo struct { + sizecacheOffset offset + weakOffset offset + unknownOffset offset + extensionOffset offset + + fieldsByNumber map[pref.FieldNumber]reflect.StructField + oneofsByName map[pref.Name]reflect.StructField + oneofWrappersByType map[reflect.Type]pref.FieldNumber + oneofWrappersByNumber map[pref.FieldNumber]reflect.Type +} + +func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo { + si := structInfo{ + sizecacheOffset: invalidOffset, + weakOffset: invalidOffset, + unknownOffset: invalidOffset, + extensionOffset: invalidOffset, + + fieldsByNumber: map[pref.FieldNumber]reflect.StructField{}, + oneofsByName: map[pref.Name]reflect.StructField{}, + oneofWrappersByType: map[reflect.Type]pref.FieldNumber{}, + oneofWrappersByNumber: map[pref.FieldNumber]reflect.Type{}, + } + +fieldLoop: + for i := 0; i < t.NumField(); i++ { + switch f := t.Field(i); f.Name { + case genname.SizeCache, genname.SizeCacheA: + if f.Type == sizecacheType { + si.sizecacheOffset = offsetOf(f, mi.Exporter) + } + case genname.WeakFields, genname.WeakFieldsA: + if f.Type == weakFieldsType { + si.weakOffset = offsetOf(f, mi.Exporter) + } + case genname.UnknownFields, genname.UnknownFieldsA: + if f.Type == unknownFieldsType { + si.unknownOffset = offsetOf(f, mi.Exporter) + } + case genname.ExtensionFields, genname.ExtensionFieldsA, genname.ExtensionFieldsB: + if f.Type == extensionFieldsType { + si.extensionOffset = offsetOf(f, mi.Exporter) + } + default: + for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") { + if len(s) > 0 && strings.Trim(s, "0123456789") == "" { + n, _ := strconv.ParseUint(s, 10, 64) + si.fieldsByNumber[pref.FieldNumber(n)] = f + continue fieldLoop + } + } + if s := f.Tag.Get("protobuf_oneof"); len(s) > 0 { + si.oneofsByName[pref.Name(s)] = f + continue fieldLoop + } + } + } + + // Derive a mapping of oneof wrappers to fields. + oneofWrappers := mi.OneofWrappers + for _, method := range []string{"XXX_OneofFuncs", "XXX_OneofWrappers"} { + if fn, ok := reflect.PtrTo(t).MethodByName(method); ok { + for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) { + if vs, ok := v.Interface().([]interface{}); ok { + oneofWrappers = vs + } + } + } + } + for _, v := range oneofWrappers { + tf := reflect.TypeOf(v).Elem() + f := tf.Field(0) + for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") { + if len(s) > 0 && strings.Trim(s, "0123456789") == "" { + n, _ := strconv.ParseUint(s, 10, 64) + si.oneofWrappersByType[tf] = pref.FieldNumber(n) + si.oneofWrappersByNumber[pref.FieldNumber(n)] = tf + break + } + } + } + + return si +} + +func (mi *MessageInfo) New() protoreflect.Message { + return mi.MessageOf(reflect.New(mi.GoReflectType.Elem()).Interface()) +} +func (mi *MessageInfo) Zero() protoreflect.Message { + return mi.MessageOf(reflect.Zero(mi.GoReflectType).Interface()) +} +func (mi *MessageInfo) Descriptor() protoreflect.MessageDescriptor { return mi.Desc } diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go new file mode 100644 index 00000000..aac55ee8 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go @@ -0,0 +1,346 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/internal/pragma" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type reflectMessageInfo struct { + fields map[pref.FieldNumber]*fieldInfo + oneofs map[pref.Name]*oneofInfo + + // denseFields is a subset of fields where: + // 0 < fieldDesc.Number() < len(denseFields) + // It provides faster access to the fieldInfo, but may be incomplete. + denseFields []*fieldInfo + + // rangeInfos is a list of all fields (not belonging to a oneof) and oneofs. + rangeInfos []interface{} // either *fieldInfo or *oneofInfo + + getUnknown func(pointer) pref.RawFields + setUnknown func(pointer, pref.RawFields) + extensionMap func(pointer) *extensionMap + + nilMessage atomicNilMessage +} + +// makeReflectFuncs generates the set of functions to support reflection. +func (mi *MessageInfo) makeReflectFuncs(t reflect.Type, si structInfo) { + mi.makeKnownFieldsFunc(si) + mi.makeUnknownFieldsFunc(t, si) + mi.makeExtensionFieldsFunc(t, si) +} + +// makeKnownFieldsFunc generates functions for operations that can be performed +// on each protobuf message field. It takes in a reflect.Type representing the +// Go struct and matches message fields with struct fields. +// +// This code assumes that the struct is well-formed and panics if there are +// any discrepancies. +func (mi *MessageInfo) makeKnownFieldsFunc(si structInfo) { + mi.fields = map[pref.FieldNumber]*fieldInfo{} + md := mi.Desc + fds := md.Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + fs := si.fieldsByNumber[fd.Number()] + var fi fieldInfo + switch { + case fd.ContainingOneof() != nil: + fi = fieldInfoForOneof(fd, si.oneofsByName[fd.ContainingOneof().Name()], mi.Exporter, si.oneofWrappersByNumber[fd.Number()]) + case fd.IsMap(): + fi = fieldInfoForMap(fd, fs, mi.Exporter) + case fd.IsList(): + fi = fieldInfoForList(fd, fs, mi.Exporter) + case fd.IsWeak(): + fi = fieldInfoForWeakMessage(fd, si.weakOffset) + case fd.Kind() == pref.MessageKind || fd.Kind() == pref.GroupKind: + fi = fieldInfoForMessage(fd, fs, mi.Exporter) + default: + fi = fieldInfoForScalar(fd, fs, mi.Exporter) + } + mi.fields[fd.Number()] = &fi + } + + mi.oneofs = map[pref.Name]*oneofInfo{} + for i := 0; i < md.Oneofs().Len(); i++ { + od := md.Oneofs().Get(i) + mi.oneofs[od.Name()] = makeOneofInfo(od, si.oneofsByName[od.Name()], mi.Exporter, si.oneofWrappersByType) + } + + mi.denseFields = make([]*fieldInfo, fds.Len()*2) + for i := 0; i < fds.Len(); i++ { + if fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) { + mi.denseFields[fd.Number()] = mi.fields[fd.Number()] + } + } + + for i := 0; i < fds.Len(); { + fd := fds.Get(i) + if od := fd.ContainingOneof(); od != nil { + mi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()]) + i += od.Fields().Len() + } else { + mi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()]) + i++ + } + } +} + +func (mi *MessageInfo) makeUnknownFieldsFunc(t reflect.Type, si structInfo) { + mi.getUnknown = func(pointer) pref.RawFields { return nil } + mi.setUnknown = func(pointer, pref.RawFields) { return } + if si.unknownOffset.IsValid() { + mi.getUnknown = func(p pointer) pref.RawFields { + if p.IsNil() { + return nil + } + rv := p.Apply(si.unknownOffset).AsValueOf(unknownFieldsType) + return pref.RawFields(*rv.Interface().(*[]byte)) + } + mi.setUnknown = func(p pointer, b pref.RawFields) { + if p.IsNil() { + panic("invalid SetUnknown on nil Message") + } + rv := p.Apply(si.unknownOffset).AsValueOf(unknownFieldsType) + *rv.Interface().(*[]byte) = []byte(b) + } + } else { + mi.getUnknown = func(pointer) pref.RawFields { + return nil + } + mi.setUnknown = func(p pointer, _ pref.RawFields) { + if p.IsNil() { + panic("invalid SetUnknown on nil Message") + } + } + } +} + +func (mi *MessageInfo) makeExtensionFieldsFunc(t reflect.Type, si structInfo) { + if si.extensionOffset.IsValid() { + mi.extensionMap = func(p pointer) *extensionMap { + if p.IsNil() { + return (*extensionMap)(nil) + } + v := p.Apply(si.extensionOffset).AsValueOf(extensionFieldsType) + return (*extensionMap)(v.Interface().(*map[int32]ExtensionField)) + } + } else { + mi.extensionMap = func(pointer) *extensionMap { + return (*extensionMap)(nil) + } + } +} + +type extensionMap map[int32]ExtensionField + +func (m *extensionMap) Range(f func(pref.FieldDescriptor, pref.Value) bool) { + if m != nil { + for _, x := range *m { + xd := x.Type().TypeDescriptor() + v := x.Value() + if xd.IsList() && v.List().Len() == 0 { + continue + } + if !f(xd, v) { + return + } + } + } +} +func (m *extensionMap) Has(xt pref.ExtensionType) (ok bool) { + if m == nil { + return false + } + xd := xt.TypeDescriptor() + x, ok := (*m)[int32(xd.Number())] + if !ok { + return false + } + switch { + case xd.IsList(): + return x.Value().List().Len() > 0 + case xd.IsMap(): + return x.Value().Map().Len() > 0 + } + return true +} +func (m *extensionMap) Clear(xt pref.ExtensionType) { + delete(*m, int32(xt.TypeDescriptor().Number())) +} +func (m *extensionMap) Get(xt pref.ExtensionType) pref.Value { + xd := xt.TypeDescriptor() + if m != nil { + if x, ok := (*m)[int32(xd.Number())]; ok { + return x.Value() + } + } + return xt.Zero() +} +func (m *extensionMap) Set(xt pref.ExtensionType, v pref.Value) { + if !xt.IsValidValue(v) { + panic(fmt.Sprintf("%v: assigning invalid value", xt.TypeDescriptor().FullName())) + } + if *m == nil { + *m = make(map[int32]ExtensionField) + } + var x ExtensionField + x.Set(xt, v) + (*m)[int32(xt.TypeDescriptor().Number())] = x +} +func (m *extensionMap) Mutable(xt pref.ExtensionType) pref.Value { + xd := xt.TypeDescriptor() + if xd.Kind() != pref.MessageKind && xd.Kind() != pref.GroupKind && !xd.IsList() && !xd.IsMap() { + panic("invalid Mutable on field with non-composite type") + } + if x, ok := (*m)[int32(xd.Number())]; ok { + return x.Value() + } + v := xt.New() + m.Set(xt, v) + return v +} + +// MessageState is a data structure that is nested as the first field in a +// concrete message. It provides a way to implement the ProtoReflect method +// in an allocation-free way without needing to have a shadow Go type generated +// for every message type. This technique only works using unsafe. +// +// +// Example generated code: +// +// type M struct { +// state protoimpl.MessageState +// +// Field1 int32 +// Field2 string +// Field3 *BarMessage +// ... +// } +// +// func (m *M) ProtoReflect() protoreflect.Message { +// mi := &file_fizz_buzz_proto_msgInfos[5] +// if protoimpl.UnsafeEnabled && m != nil { +// ms := protoimpl.X.MessageStateOf(Pointer(m)) +// if ms.LoadMessageInfo() == nil { +// ms.StoreMessageInfo(mi) +// } +// return ms +// } +// return mi.MessageOf(m) +// } +// +// The MessageState type holds a *MessageInfo, which must be atomically set to +// the message info associated with a given message instance. +// By unsafely converting a *M into a *MessageState, the MessageState object +// has access to all the information needed to implement protobuf reflection. +// It has access to the message info as its first field, and a pointer to the +// MessageState is identical to a pointer to the concrete message value. +// +// +// Requirements: +// • The type M must implement protoreflect.ProtoMessage. +// • The address of m must not be nil. +// • The address of m and the address of m.state must be equal, +// even though they are different Go types. +type MessageState struct { + pragma.NoUnkeyedLiterals + pragma.DoNotCompare + pragma.DoNotCopy + + atomicMessageInfo *MessageInfo +} + +type messageState MessageState + +var ( + _ pref.Message = (*messageState)(nil) + _ unwrapper = (*messageState)(nil) +) + +// messageDataType is a tuple of a pointer to the message data and +// a pointer to the message type. It is a generalized way of providing a +// reflective view over a message instance. The disadvantage of this approach +// is the need to allocate this tuple of 16B. +type messageDataType struct { + p pointer + mi *MessageInfo +} + +type ( + messageReflectWrapper messageDataType + messageIfaceWrapper messageDataType +) + +var ( + _ pref.Message = (*messageReflectWrapper)(nil) + _ unwrapper = (*messageReflectWrapper)(nil) + _ pref.ProtoMessage = (*messageIfaceWrapper)(nil) + _ unwrapper = (*messageIfaceWrapper)(nil) +) + +// MessageOf returns a reflective view over a message. The input must be a +// pointer to a named Go struct. If the provided type has a ProtoReflect method, +// it must be implemented by calling this method. +func (mi *MessageInfo) MessageOf(m interface{}) pref.Message { + // TODO: Switch the input to be an opaque Pointer. + if reflect.TypeOf(m) != mi.GoReflectType { + panic(fmt.Sprintf("type mismatch: got %T, want %v", m, mi.GoReflectType)) + } + p := pointerOfIface(m) + if p.IsNil() { + return mi.nilMessage.Init(mi) + } + return &messageReflectWrapper{p, mi} +} + +func (m *messageReflectWrapper) pointer() pointer { return m.p } +func (m *messageReflectWrapper) messageInfo() *MessageInfo { return m.mi } + +func (m *messageIfaceWrapper) ProtoReflect() pref.Message { + return (*messageReflectWrapper)(m) +} +func (m *messageIfaceWrapper) protoUnwrap() interface{} { + return m.p.AsIfaceOf(m.mi.GoReflectType.Elem()) +} + +// checkField verifies that the provided field descriptor is valid. +// Exactly one of the returned values is populated. +func (mi *MessageInfo) checkField(fd pref.FieldDescriptor) (*fieldInfo, pref.ExtensionType) { + var fi *fieldInfo + if n := fd.Number(); 0 < n && int(n) < len(mi.denseFields) { + fi = mi.denseFields[n] + } else { + fi = mi.fields[n] + } + if fi != nil { + if fi.fieldDesc != fd { + panic("mismatching field descriptor") + } + return fi, nil + } + + if fd.IsExtension() { + if fd.ContainingMessage().FullName() != mi.Desc.FullName() { + // TODO: Should this be exact containing message descriptor match? + panic("mismatching containing message") + } + if !mi.Desc.ExtensionRanges().Has(fd.Number()) { + panic("invalid extension field") + } + xtd, ok := fd.(pref.ExtensionTypeDescriptor) + if !ok { + panic("extension descriptor does not implement ExtensionTypeDescriptor") + } + return nil, xtd.Type() + } + panic("invalid field descriptor") +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go new file mode 100644 index 00000000..7b87d471 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go @@ -0,0 +1,448 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math" + "reflect" + "sync" + + "google.golang.org/protobuf/internal/flags" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" +) + +type fieldInfo struct { + fieldDesc pref.FieldDescriptor + + // These fields are used for protobuf reflection support. + has func(pointer) bool + clear func(pointer) + get func(pointer) pref.Value + set func(pointer, pref.Value) + mutable func(pointer) pref.Value + newMessage func() pref.Message + newField func() pref.Value +} + +func fieldInfoForOneof(fd pref.FieldDescriptor, fs reflect.StructField, x exporter, ot reflect.Type) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Interface { + panic(fmt.Sprintf("invalid type: got %v, want interface kind", ft)) + } + if ot.Kind() != reflect.Struct { + panic(fmt.Sprintf("invalid type: got %v, want struct kind", ot)) + } + if !reflect.PtrTo(ot).Implements(ft) { + panic(fmt.Sprintf("invalid type: %v does not implement %v", ot, ft)) + } + conv := NewConverter(ot.Field(0).Type, fd) + isMessage := fd.Message() != nil + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs, x) + return fieldInfo{ + // NOTE: The logic below intentionally assumes that oneof fields are + // well-formatted. That is, the oneof interface never contains a + // typed nil pointer to one of the wrapper structs. + + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + return false + } + return true + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot { + // NOTE: We intentionally don't check for rv.Elem().IsNil() + // so that (*OneofWrapperType)(nil) gets cleared to nil. + return + } + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) pref.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + return conv.Zero() + } + rv = rv.Elem().Elem().Field(0) + return conv.PBValueOf(rv) + }, + set: func(p pointer, v pref.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + rv.Set(reflect.New(ot)) + } + rv = rv.Elem().Elem().Field(0) + rv.Set(conv.GoValueOf(v)) + }, + mutable: func(p pointer) pref.Value { + if !isMessage { + panic("invalid Mutable on field with non-composite type") + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + rv.Set(reflect.New(ot)) + } + rv = rv.Elem().Elem().Field(0) + if rv.IsNil() { + rv.Set(conv.GoValueOf(pref.ValueOfMessage(conv.New().Message()))) + } + return conv.PBValueOf(rv) + }, + newMessage: func() pref.Message { + return conv.New().Message() + }, + newField: func() pref.Value { + return conv.New() + }, + } +} + +func fieldInfoForMap(fd pref.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Map { + panic(fmt.Sprintf("invalid type: got %v, want map kind", ft)) + } + conv := NewConverter(ft, fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs, x) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) pref.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v pref.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("invalid value: setting map field to read-only value")) + } + rv.Set(pv) + }, + mutable: func(p pointer) pref.Value { + v := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if v.IsNil() { + v.Set(reflect.MakeMap(fs.Type)) + } + return conv.PBValueOf(v) + }, + newField: func() pref.Value { + return conv.New() + }, + } +} + +func fieldInfoForList(fd pref.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(reflect.PtrTo(ft), fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs, x) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) pref.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type) + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v pref.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } + rv.Set(pv.Elem()) + }, + mutable: func(p pointer) pref.Value { + v := p.Apply(fieldOffset).AsValueOf(fs.Type) + return conv.PBValueOf(v) + }, + newField: func() pref.Value { + return conv.New() + }, + } +} + +var ( + nilBytes = reflect.ValueOf([]byte(nil)) + emptyBytes = reflect.ValueOf([]byte{}) +) + +func fieldInfoForScalar(fd pref.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + nullable := fd.Syntax() == pref.Proto2 + isBytes := ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 + if nullable { + if ft.Kind() != reflect.Ptr && ft.Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want pointer", ft)) + } + if ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + } + conv := NewConverter(ft, fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs, x) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if nullable { + return !rv.IsNil() + } + switch rv.Kind() { + case reflect.Bool: + return rv.Bool() + case reflect.Int32, reflect.Int64: + return rv.Int() != 0 + case reflect.Uint32, reflect.Uint64: + return rv.Uint() != 0 + case reflect.Float32, reflect.Float64: + return rv.Float() != 0 || math.Signbit(rv.Float()) + case reflect.String, reflect.Slice: + return rv.Len() > 0 + default: + panic(fmt.Sprintf("invalid type: %v", rv.Type())) // should never happen + } + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) pref.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if nullable { + if rv.IsNil() { + return conv.Zero() + } + if rv.Kind() == reflect.Ptr { + rv = rv.Elem() + } + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v pref.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if nullable && rv.Kind() == reflect.Ptr { + if rv.IsNil() { + rv.Set(reflect.New(ft)) + } + rv = rv.Elem() + } + rv.Set(conv.GoValueOf(v)) + if isBytes && rv.Len() == 0 { + if nullable { + rv.Set(emptyBytes) // preserve presence in proto2 + } else { + rv.Set(nilBytes) // do not preserve presence in proto3 + } + } + }, + newField: func() pref.Value { + return conv.New() + }, + } +} + +func fieldInfoForWeakMessage(fd pref.FieldDescriptor, weakOffset offset) fieldInfo { + if !flags.ProtoLegacy { + panic("no support for proto1 weak fields") + } + + var once sync.Once + var messageType pref.MessageType + lazyInit := func() { + once.Do(func() { + messageName := fd.Message().FullName() + messageType, _ = preg.GlobalTypes.FindMessageByName(messageName) + if messageType == nil { + panic(fmt.Sprintf("weak message %v is not linked in", messageName)) + } + }) + } + + num := fd.Number() + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + _, ok := p.Apply(weakOffset).WeakFields().get(num) + return ok + }, + clear: func(p pointer) { + p.Apply(weakOffset).WeakFields().clear(num) + }, + get: func(p pointer) pref.Value { + lazyInit() + if p.IsNil() { + return pref.ValueOfMessage(messageType.Zero()) + } + m, ok := p.Apply(weakOffset).WeakFields().get(num) + if !ok { + return pref.ValueOfMessage(messageType.Zero()) + } + return pref.ValueOfMessage(m.ProtoReflect()) + }, + set: func(p pointer, v pref.Value) { + lazyInit() + m := v.Message() + if m.Descriptor() != messageType.Descriptor() { + panic("mismatching message descriptor") + } + p.Apply(weakOffset).WeakFields().set(num, m.Interface()) + }, + mutable: func(p pointer) pref.Value { + lazyInit() + fs := p.Apply(weakOffset).WeakFields() + m, ok := fs.get(num) + if !ok { + m = messageType.New().Interface() + fs.set(num, m) + } + return pref.ValueOfMessage(m.ProtoReflect()) + }, + newMessage: func() pref.Message { + lazyInit() + return messageType.New() + }, + newField: func() pref.Value { + lazyInit() + return pref.ValueOfMessage(messageType.New()) + }, + } +} + +func fieldInfoForMessage(fd pref.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + conv := NewConverter(ft, fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs, x) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return !rv.IsNil() + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) pref.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return conv.PBValueOf(rv) + }, + set: func(p pointer, v pref.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(conv.GoValueOf(v)) + if rv.IsNil() { + panic("invalid nil pointer") + } + }, + mutable: func(p pointer) pref.Value { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + rv.Set(conv.GoValueOf(conv.New())) + } + return conv.PBValueOf(rv) + }, + newMessage: func() pref.Message { + return conv.New().Message() + }, + newField: func() pref.Value { + return conv.New() + }, + } +} + +type oneofInfo struct { + oneofDesc pref.OneofDescriptor + which func(pointer) pref.FieldNumber +} + +func makeOneofInfo(od pref.OneofDescriptor, fs reflect.StructField, x exporter, wrappersByType map[reflect.Type]pref.FieldNumber) *oneofInfo { + fieldOffset := offsetOf(fs, x) + return &oneofInfo{ + oneofDesc: od, + which: func(p pointer) pref.FieldNumber { + if p.IsNil() { + return 0 + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + return 0 + } + rv = rv.Elem() + if rv.IsNil() { + return 0 + } + return wrappersByType[rv.Type().Elem()] + }, + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go new file mode 100644 index 00000000..7d65f5ca --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go @@ -0,0 +1,249 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +func (m *messageState) Descriptor() protoreflect.MessageDescriptor { + return m.messageInfo().Desc +} +func (m *messageState) Type() protoreflect.MessageType { + return m.messageInfo() +} +func (m *messageState) New() protoreflect.Message { + return m.messageInfo().New() +} +func (m *messageState) Interface() protoreflect.ProtoMessage { + return m.protoUnwrap().(protoreflect.ProtoMessage) +} +func (m *messageState) protoUnwrap() interface{} { + return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem()) +} +func (m *messageState) ProtoMethods() *protoiface.Methods { + m.messageInfo().init() + return &m.messageInfo().methods +} + +// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code +// to be able to retrieve a v2 MessageInfo struct. +// +// WARNING: This method is exempt from the compatibility promise and +// may be removed in the future without warning. +func (m *messageState) ProtoMessageInfo() *MessageInfo { + return m.messageInfo() +} + +func (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + m.messageInfo().init() + for _, ri := range m.messageInfo().rangeInfos { + switch ri := ri.(type) { + case *fieldInfo: + if ri.has(m.pointer()) { + if !f(ri.fieldDesc, ri.get(m.pointer())) { + return + } + } + case *oneofInfo: + if n := ri.which(m.pointer()); n > 0 { + fi := m.messageInfo().fields[n] + if !f(fi.fieldDesc, fi.get(m.pointer())) { + return + } + } + } + } + m.messageInfo().extensionMap(m.pointer()).Range(f) +} +func (m *messageState) Has(fd protoreflect.FieldDescriptor) bool { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.has(m.pointer()) + } else { + return m.messageInfo().extensionMap(m.pointer()).Has(xt) + } +} +func (m *messageState) Clear(fd protoreflect.FieldDescriptor) { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + fi.clear(m.pointer()) + } else { + m.messageInfo().extensionMap(m.pointer()).Clear(xt) + } +} +func (m *messageState) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.get(m.pointer()) + } else { + return m.messageInfo().extensionMap(m.pointer()).Get(xt) + } +} +func (m *messageState) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + fi.set(m.pointer(), v) + } else { + m.messageInfo().extensionMap(m.pointer()).Set(xt, v) + } +} +func (m *messageState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.mutable(m.pointer()) + } else { + return m.messageInfo().extensionMap(m.pointer()).Mutable(xt) + } +} +func (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.newField() + } else { + return xt.New() + } +} +func (m *messageState) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + m.messageInfo().init() + if oi := m.messageInfo().oneofs[od.Name()]; oi != nil && oi.oneofDesc == od { + return od.Fields().ByNumber(oi.which(m.pointer())) + } + panic("invalid oneof descriptor") +} +func (m *messageState) GetUnknown() protoreflect.RawFields { + m.messageInfo().init() + return m.messageInfo().getUnknown(m.pointer()) +} +func (m *messageState) SetUnknown(b protoreflect.RawFields) { + m.messageInfo().init() + m.messageInfo().setUnknown(m.pointer(), b) +} +func (m *messageState) IsValid() bool { + return !m.pointer().IsNil() +} + +func (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor { + return m.messageInfo().Desc +} +func (m *messageReflectWrapper) Type() protoreflect.MessageType { + return m.messageInfo() +} +func (m *messageReflectWrapper) New() protoreflect.Message { + return m.messageInfo().New() +} +func (m *messageReflectWrapper) Interface() protoreflect.ProtoMessage { + if m, ok := m.protoUnwrap().(protoreflect.ProtoMessage); ok { + return m + } + return (*messageIfaceWrapper)(m) +} +func (m *messageReflectWrapper) protoUnwrap() interface{} { + return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem()) +} +func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods { + m.messageInfo().init() + return &m.messageInfo().methods +} + +// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code +// to be able to retrieve a v2 MessageInfo struct. +// +// WARNING: This method is exempt from the compatibility promise and +// may be removed in the future without warning. +func (m *messageReflectWrapper) ProtoMessageInfo() *MessageInfo { + return m.messageInfo() +} + +func (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + m.messageInfo().init() + for _, ri := range m.messageInfo().rangeInfos { + switch ri := ri.(type) { + case *fieldInfo: + if ri.has(m.pointer()) { + if !f(ri.fieldDesc, ri.get(m.pointer())) { + return + } + } + case *oneofInfo: + if n := ri.which(m.pointer()); n > 0 { + fi := m.messageInfo().fields[n] + if !f(fi.fieldDesc, fi.get(m.pointer())) { + return + } + } + } + } + m.messageInfo().extensionMap(m.pointer()).Range(f) +} +func (m *messageReflectWrapper) Has(fd protoreflect.FieldDescriptor) bool { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.has(m.pointer()) + } else { + return m.messageInfo().extensionMap(m.pointer()).Has(xt) + } +} +func (m *messageReflectWrapper) Clear(fd protoreflect.FieldDescriptor) { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + fi.clear(m.pointer()) + } else { + m.messageInfo().extensionMap(m.pointer()).Clear(xt) + } +} +func (m *messageReflectWrapper) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.get(m.pointer()) + } else { + return m.messageInfo().extensionMap(m.pointer()).Get(xt) + } +} +func (m *messageReflectWrapper) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + fi.set(m.pointer(), v) + } else { + m.messageInfo().extensionMap(m.pointer()).Set(xt, v) + } +} +func (m *messageReflectWrapper) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.mutable(m.pointer()) + } else { + return m.messageInfo().extensionMap(m.pointer()).Mutable(xt) + } +} +func (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.messageInfo().init() + if fi, xt := m.messageInfo().checkField(fd); fi != nil { + return fi.newField() + } else { + return xt.New() + } +} +func (m *messageReflectWrapper) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + m.messageInfo().init() + if oi := m.messageInfo().oneofs[od.Name()]; oi != nil && oi.oneofDesc == od { + return od.Fields().ByNumber(oi.which(m.pointer())) + } + panic("invalid oneof descriptor") +} +func (m *messageReflectWrapper) GetUnknown() protoreflect.RawFields { + m.messageInfo().init() + return m.messageInfo().getUnknown(m.pointer()) +} +func (m *messageReflectWrapper) SetUnknown(b protoreflect.RawFields) { + m.messageInfo().init() + m.messageInfo().setUnknown(m.pointer(), b) +} +func (m *messageReflectWrapper) IsValid() bool { + return !m.pointer().IsNil() +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go new file mode 100644 index 00000000..67b4ede6 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go @@ -0,0 +1,177 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build purego appengine + +package impl + +import ( + "fmt" + "reflect" + "sync" +) + +const UnsafeEnabled = false + +// Pointer is an opaque pointer type. +type Pointer interface{} + +// offset represents the offset to a struct field, accessible from a pointer. +// The offset is the field index into a struct. +type offset struct { + index int + export exporter +} + +// offsetOf returns a field offset for the struct field. +func offsetOf(f reflect.StructField, x exporter) offset { + if len(f.Index) != 1 { + panic("embedded structs are not supported") + } + if f.PkgPath == "" { + return offset{index: f.Index[0]} // field is already exported + } + if x == nil { + panic("exporter must be provided for unexported field") + } + return offset{index: f.Index[0], export: x} +} + +// IsValid reports whether the offset is valid. +func (f offset) IsValid() bool { return f.index >= 0 } + +// invalidOffset is an invalid field offset. +var invalidOffset = offset{index: -1} + +// zeroOffset is a noop when calling pointer.Apply. +var zeroOffset = offset{index: 0} + +// pointer is an abstract representation of a pointer to a struct or field. +type pointer struct{ v reflect.Value } + +// pointerOf returns p as a pointer. +func pointerOf(p Pointer) pointer { + return pointerOfIface(p) +} + +// pointerOfValue returns v as a pointer. +func pointerOfValue(v reflect.Value) pointer { + return pointer{v: v} +} + +// pointerOfIface returns the pointer portion of an interface. +func pointerOfIface(v interface{}) pointer { + return pointer{v: reflect.ValueOf(v)} +} + +// IsNil reports whether the pointer is nil. +func (p pointer) IsNil() bool { + return p.v.IsNil() +} + +// Apply adds an offset to the pointer to derive a new pointer +// to a specified field. The current pointer must be pointing at a struct. +func (p pointer) Apply(f offset) pointer { + if f.export != nil { + if v := reflect.ValueOf(f.export(p.v.Interface(), f.index)); v.IsValid() { + return pointer{v: v} + } + } + return pointer{v: p.v.Elem().Field(f.index).Addr()} +} + +// AsValueOf treats p as a pointer to an object of type t and returns the value. +// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t)) +func (p pointer) AsValueOf(t reflect.Type) reflect.Value { + if got := p.v.Type().Elem(); got != t { + panic(fmt.Sprintf("invalid type: got %v, want %v", got, t)) + } + return p.v +} + +// AsIfaceOf treats p as a pointer to an object of type t and returns the value. +// It is equivalent to p.AsValueOf(t).Interface() +func (p pointer) AsIfaceOf(t reflect.Type) interface{} { + return p.AsValueOf(t).Interface() +} + +func (p pointer) Bool() *bool { return p.v.Interface().(*bool) } +func (p pointer) BoolPtr() **bool { return p.v.Interface().(**bool) } +func (p pointer) BoolSlice() *[]bool { return p.v.Interface().(*[]bool) } +func (p pointer) Int32() *int32 { return p.v.Interface().(*int32) } +func (p pointer) Int32Ptr() **int32 { return p.v.Interface().(**int32) } +func (p pointer) Int32Slice() *[]int32 { return p.v.Interface().(*[]int32) } +func (p pointer) Int64() *int64 { return p.v.Interface().(*int64) } +func (p pointer) Int64Ptr() **int64 { return p.v.Interface().(**int64) } +func (p pointer) Int64Slice() *[]int64 { return p.v.Interface().(*[]int64) } +func (p pointer) Uint32() *uint32 { return p.v.Interface().(*uint32) } +func (p pointer) Uint32Ptr() **uint32 { return p.v.Interface().(**uint32) } +func (p pointer) Uint32Slice() *[]uint32 { return p.v.Interface().(*[]uint32) } +func (p pointer) Uint64() *uint64 { return p.v.Interface().(*uint64) } +func (p pointer) Uint64Ptr() **uint64 { return p.v.Interface().(**uint64) } +func (p pointer) Uint64Slice() *[]uint64 { return p.v.Interface().(*[]uint64) } +func (p pointer) Float32() *float32 { return p.v.Interface().(*float32) } +func (p pointer) Float32Ptr() **float32 { return p.v.Interface().(**float32) } +func (p pointer) Float32Slice() *[]float32 { return p.v.Interface().(*[]float32) } +func (p pointer) Float64() *float64 { return p.v.Interface().(*float64) } +func (p pointer) Float64Ptr() **float64 { return p.v.Interface().(**float64) } +func (p pointer) Float64Slice() *[]float64 { return p.v.Interface().(*[]float64) } +func (p pointer) String() *string { return p.v.Interface().(*string) } +func (p pointer) StringPtr() **string { return p.v.Interface().(**string) } +func (p pointer) StringSlice() *[]string { return p.v.Interface().(*[]string) } +func (p pointer) Bytes() *[]byte { return p.v.Interface().(*[]byte) } +func (p pointer) BytesSlice() *[][]byte { return p.v.Interface().(*[][]byte) } +func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.v.Interface().(*WeakFields)) } +func (p pointer) Extensions() *map[int32]ExtensionField { + return p.v.Interface().(*map[int32]ExtensionField) +} + +func (p pointer) Elem() pointer { + return pointer{v: p.v.Elem()} +} + +// PointerSlice copies []*T from p as a new []pointer. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) PointerSlice() []pointer { + // TODO: reconsider this + if p.v.IsNil() { + return nil + } + n := p.v.Elem().Len() + s := make([]pointer, n) + for i := 0; i < n; i++ { + s[i] = pointer{v: p.v.Elem().Index(i)} + } + return s +} + +// AppendPointerSlice appends v to p, which must be a []*T. +func (p pointer) AppendPointerSlice(v pointer) { + sp := p.v.Elem() + sp.Set(reflect.Append(sp, v.v)) +} + +// SetPointer sets *p to v. +func (p pointer) SetPointer(v pointer) { + p.v.Elem().Set(v.v) +} + +func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") } +func (ms *messageState) pointer() pointer { panic("not supported") } +func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") } +func (ms *messageState) LoadMessageInfo() *MessageInfo { panic("not supported") } +func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { panic("not supported") } + +type atomicNilMessage struct { + once sync.Once + m messageReflectWrapper +} + +func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper { + m.once.Do(func() { + m.m.p = pointerOfIface(reflect.Zero(mi.GoReflectType).Interface()) + m.m.mi = mi + }) + return &m.m +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go new file mode 100644 index 00000000..27416433 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go @@ -0,0 +1,169 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !purego,!appengine + +package impl + +import ( + "reflect" + "sync/atomic" + "unsafe" +) + +const UnsafeEnabled = true + +// Pointer is an opaque pointer type. +type Pointer unsafe.Pointer + +// offset represents the offset to a struct field, accessible from a pointer. +// The offset is the byte offset to the field from the start of the struct. +type offset uintptr + +// offsetOf returns a field offset for the struct field. +func offsetOf(f reflect.StructField, x exporter) offset { + return offset(f.Offset) +} + +// IsValid reports whether the offset is valid. +func (f offset) IsValid() bool { return f != invalidOffset } + +// invalidOffset is an invalid field offset. +var invalidOffset = ^offset(0) + +// zeroOffset is a noop when calling pointer.Apply. +var zeroOffset = offset(0) + +// pointer is a pointer to a message struct or field. +type pointer struct{ p unsafe.Pointer } + +// pointerOf returns p as a pointer. +func pointerOf(p Pointer) pointer { + return pointer{p: unsafe.Pointer(p)} +} + +// pointerOfValue returns v as a pointer. +func pointerOfValue(v reflect.Value) pointer { + return pointer{p: unsafe.Pointer(v.Pointer())} +} + +// pointerOfIface returns the pointer portion of an interface. +func pointerOfIface(v interface{}) pointer { + type ifaceHeader struct { + Type unsafe.Pointer + Data unsafe.Pointer + } + return pointer{p: (*ifaceHeader)(unsafe.Pointer(&v)).Data} +} + +// IsNil reports whether the pointer is nil. +func (p pointer) IsNil() bool { + return p.p == nil +} + +// Apply adds an offset to the pointer to derive a new pointer +// to a specified field. The pointer must be valid and pointing at a struct. +func (p pointer) Apply(f offset) pointer { + if p.IsNil() { + panic("invalid nil pointer") + } + return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} +} + +// AsValueOf treats p as a pointer to an object of type t and returns the value. +// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t)) +func (p pointer) AsValueOf(t reflect.Type) reflect.Value { + return reflect.NewAt(t, p.p) +} + +// AsIfaceOf treats p as a pointer to an object of type t and returns the value. +// It is equivalent to p.AsValueOf(t).Interface() +func (p pointer) AsIfaceOf(t reflect.Type) interface{} { + // TODO: Use tricky unsafe magic to directly create ifaceHeader. + return p.AsValueOf(t).Interface() +} + +func (p pointer) Bool() *bool { return (*bool)(p.p) } +func (p pointer) BoolPtr() **bool { return (**bool)(p.p) } +func (p pointer) BoolSlice() *[]bool { return (*[]bool)(p.p) } +func (p pointer) Int32() *int32 { return (*int32)(p.p) } +func (p pointer) Int32Ptr() **int32 { return (**int32)(p.p) } +func (p pointer) Int32Slice() *[]int32 { return (*[]int32)(p.p) } +func (p pointer) Int64() *int64 { return (*int64)(p.p) } +func (p pointer) Int64Ptr() **int64 { return (**int64)(p.p) } +func (p pointer) Int64Slice() *[]int64 { return (*[]int64)(p.p) } +func (p pointer) Uint32() *uint32 { return (*uint32)(p.p) } +func (p pointer) Uint32Ptr() **uint32 { return (**uint32)(p.p) } +func (p pointer) Uint32Slice() *[]uint32 { return (*[]uint32)(p.p) } +func (p pointer) Uint64() *uint64 { return (*uint64)(p.p) } +func (p pointer) Uint64Ptr() **uint64 { return (**uint64)(p.p) } +func (p pointer) Uint64Slice() *[]uint64 { return (*[]uint64)(p.p) } +func (p pointer) Float32() *float32 { return (*float32)(p.p) } +func (p pointer) Float32Ptr() **float32 { return (**float32)(p.p) } +func (p pointer) Float32Slice() *[]float32 { return (*[]float32)(p.p) } +func (p pointer) Float64() *float64 { return (*float64)(p.p) } +func (p pointer) Float64Ptr() **float64 { return (**float64)(p.p) } +func (p pointer) Float64Slice() *[]float64 { return (*[]float64)(p.p) } +func (p pointer) String() *string { return (*string)(p.p) } +func (p pointer) StringPtr() **string { return (**string)(p.p) } +func (p pointer) StringSlice() *[]string { return (*[]string)(p.p) } +func (p pointer) Bytes() *[]byte { return (*[]byte)(p.p) } +func (p pointer) BytesSlice() *[][]byte { return (*[][]byte)(p.p) } +func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.p) } +func (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) } + +func (p pointer) Elem() pointer { + return pointer{p: *(*unsafe.Pointer)(p.p)} +} + +// PointerSlice loads []*T from p as a []pointer. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) PointerSlice() []pointer { + // Super-tricky - p should point to a []*T where T is a + // message type. We load it as []pointer. + return *(*[]pointer)(p.p) +} + +// AppendPointerSlice appends v to p, which must be a []*T. +func (p pointer) AppendPointerSlice(v pointer) { + *(*[]pointer)(p.p) = append(*(*[]pointer)(p.p), v) +} + +// SetPointer sets *p to v. +func (p pointer) SetPointer(v pointer) { + *(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p) +} + +// Static check that MessageState does not exceed the size of a pointer. +const _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{})) + +func (Export) MessageStateOf(p Pointer) *messageState { + // Super-tricky - see documentation on MessageState. + return (*messageState)(unsafe.Pointer(p)) +} +func (ms *messageState) pointer() pointer { + // Super-tricky - see documentation on MessageState. + return pointer{p: unsafe.Pointer(ms)} +} +func (ms *messageState) messageInfo() *MessageInfo { + return ms.LoadMessageInfo() +} +func (ms *messageState) LoadMessageInfo() *MessageInfo { + return (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)))) +} +func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)), unsafe.Pointer(mi)) +} + +type atomicNilMessage struct{ p unsafe.Pointer } // p is a *messageReflectWrapper + +func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper { + if p := atomic.LoadPointer(&m.p); p != nil { + return (*messageReflectWrapper)(p) + } + w := &messageReflectWrapper{mi: mi} + atomic.CompareAndSwapPointer(&m.p, nil, (unsafe.Pointer)(w)) + return (*messageReflectWrapper)(atomic.LoadPointer(&m.p)) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/validate.go b/vendor/google.golang.org/protobuf/internal/impl/validate.go new file mode 100644 index 00000000..39d62fd0 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/validate.go @@ -0,0 +1,575 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math" + "math/bits" + "reflect" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/strs" + pref "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// ValidationStatus is the result of validating the wire-format encoding of a message. +type ValidationStatus int + +const ( + // ValidationUnknown indicates that unmarshaling the message might succeed or fail. + // The validator was unable to render a judgement. + // + // The only causes of this status are an aberrant message type appearing somewhere + // in the message or a failure in the extension resolver. + ValidationUnknown ValidationStatus = iota + 1 + + // ValidationInvalid indicates that unmarshaling the message will fail. + ValidationInvalid + + // ValidationValid indicates that unmarshaling the message will succeed. + ValidationValid +) + +func (v ValidationStatus) String() string { + switch v { + case ValidationUnknown: + return "ValidationUnknown" + case ValidationInvalid: + return "ValidationInvalid" + case ValidationValid: + return "ValidationValid" + default: + return fmt.Sprintf("ValidationStatus(%d)", int(v)) + } +} + +// Validate determines whether the contents of the buffer are a valid wire encoding +// of the message type. +// +// This function is exposed for testing. +func Validate(mt pref.MessageType, in piface.UnmarshalInput) (out piface.UnmarshalOutput, _ ValidationStatus) { + mi, ok := mt.(*MessageInfo) + if !ok { + return out, ValidationUnknown + } + if in.Resolver == nil { + in.Resolver = preg.GlobalTypes + } + o, st := mi.validate(in.Buf, 0, unmarshalOptions{ + flags: in.Flags, + resolver: in.Resolver, + }) + if o.initialized { + out.Flags |= piface.UnmarshalInitialized + } + return out, st +} + +type validationInfo struct { + mi *MessageInfo + typ validationType + keyType, valType validationType + + // For non-required fields, requiredBit is 0. + // + // For required fields, requiredBit's nth bit is set, where n is a + // unique index in the range [0, MessageInfo.numRequiredFields). + // + // If there are more than 64 required fields, requiredBit is 0. + requiredBit uint64 +} + +type validationType uint8 + +const ( + validationTypeOther validationType = iota + validationTypeMessage + validationTypeGroup + validationTypeMap + validationTypeRepeatedVarint + validationTypeRepeatedFixed32 + validationTypeRepeatedFixed64 + validationTypeVarint + validationTypeFixed32 + validationTypeFixed64 + validationTypeBytes + validationTypeUTF8String + validationTypeMessageSetItem +) + +func newFieldValidationInfo(mi *MessageInfo, si structInfo, fd pref.FieldDescriptor, ft reflect.Type) validationInfo { + var vi validationInfo + switch { + case fd.ContainingOneof() != nil: + switch fd.Kind() { + case pref.MessageKind: + vi.typ = validationTypeMessage + if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok { + vi.mi = getMessageInfo(ot.Field(0).Type) + } + case pref.GroupKind: + vi.typ = validationTypeGroup + if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok { + vi.mi = getMessageInfo(ot.Field(0).Type) + } + case pref.StringKind: + if strs.EnforceUTF8(fd) { + vi.typ = validationTypeUTF8String + } + } + default: + vi = newValidationInfo(fd, ft) + } + if fd.Cardinality() == pref.Required { + // Avoid overflow. The required field check is done with a 64-bit mask, with + // any message containing more than 64 required fields always reported as + // potentially uninitialized, so it is not important to get a precise count + // of the required fields past 64. + if mi.numRequiredFields < math.MaxUint8 { + mi.numRequiredFields++ + vi.requiredBit = 1 << (mi.numRequiredFields - 1) + } + } + return vi +} + +func newValidationInfo(fd pref.FieldDescriptor, ft reflect.Type) validationInfo { + var vi validationInfo + switch { + case fd.IsList(): + switch fd.Kind() { + case pref.MessageKind: + vi.typ = validationTypeMessage + if ft.Kind() == reflect.Slice { + vi.mi = getMessageInfo(ft.Elem()) + } + case pref.GroupKind: + vi.typ = validationTypeGroup + if ft.Kind() == reflect.Slice { + vi.mi = getMessageInfo(ft.Elem()) + } + case pref.StringKind: + vi.typ = validationTypeBytes + if strs.EnforceUTF8(fd) { + vi.typ = validationTypeUTF8String + } + default: + switch wireTypes[fd.Kind()] { + case protowire.VarintType: + vi.typ = validationTypeRepeatedVarint + case protowire.Fixed32Type: + vi.typ = validationTypeRepeatedFixed32 + case protowire.Fixed64Type: + vi.typ = validationTypeRepeatedFixed64 + } + } + case fd.IsMap(): + vi.typ = validationTypeMap + switch fd.MapKey().Kind() { + case pref.StringKind: + if strs.EnforceUTF8(fd) { + vi.keyType = validationTypeUTF8String + } + } + switch fd.MapValue().Kind() { + case pref.MessageKind: + vi.valType = validationTypeMessage + if ft.Kind() == reflect.Map { + vi.mi = getMessageInfo(ft.Elem()) + } + case pref.StringKind: + if strs.EnforceUTF8(fd) { + vi.valType = validationTypeUTF8String + } + } + default: + switch fd.Kind() { + case pref.MessageKind: + vi.typ = validationTypeMessage + if !fd.IsWeak() { + vi.mi = getMessageInfo(ft) + } + case pref.GroupKind: + vi.typ = validationTypeGroup + vi.mi = getMessageInfo(ft) + case pref.StringKind: + vi.typ = validationTypeBytes + if strs.EnforceUTF8(fd) { + vi.typ = validationTypeUTF8String + } + default: + switch wireTypes[fd.Kind()] { + case protowire.VarintType: + vi.typ = validationTypeVarint + case protowire.Fixed32Type: + vi.typ = validationTypeFixed32 + case protowire.Fixed64Type: + vi.typ = validationTypeFixed64 + case protowire.BytesType: + vi.typ = validationTypeBytes + } + } + } + return vi +} + +func (mi *MessageInfo) validate(b []byte, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, result ValidationStatus) { + mi.init() + type validationState struct { + typ validationType + keyType, valType validationType + endGroup protowire.Number + mi *MessageInfo + tail []byte + requiredMask uint64 + } + + // Pre-allocate some slots to avoid repeated slice reallocation. + states := make([]validationState, 0, 16) + states = append(states, validationState{ + typ: validationTypeMessage, + mi: mi, + }) + if groupTag > 0 { + states[0].typ = validationTypeGroup + states[0].endGroup = groupTag + } + initialized := true + start := len(b) +State: + for len(states) > 0 { + st := &states[len(states)-1] + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, ValidationInvalid + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return out, ValidationInvalid + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + + if wtyp == protowire.EndGroupType { + if st.endGroup == num { + goto PopState + } + return out, ValidationInvalid + } + var vi validationInfo + switch { + case st.typ == validationTypeMap: + switch num { + case 1: + vi.typ = st.keyType + case 2: + vi.typ = st.valType + vi.mi = st.mi + vi.requiredBit = 1 + } + case flags.ProtoLegacy && st.mi.isMessageSet: + switch num { + case messageset.FieldItem: + vi.typ = validationTypeMessageSetItem + } + default: + var f *coderFieldInfo + if int(num) < len(st.mi.denseCoderFields) { + f = st.mi.denseCoderFields[num] + } else { + f = st.mi.coderFields[num] + } + if f != nil { + vi = f.validation + if vi.typ == validationTypeMessage && vi.mi == nil { + // Probable weak field. + // + // TODO: Consider storing the results of this lookup somewhere + // rather than recomputing it on every validation. + fd := st.mi.Desc.Fields().ByNumber(num) + if fd == nil || !fd.IsWeak() { + break + } + messageName := fd.Message().FullName() + messageType, err := preg.GlobalTypes.FindMessageByName(messageName) + switch err { + case nil: + vi.mi, _ = messageType.(*MessageInfo) + case preg.NotFound: + vi.typ = validationTypeBytes + default: + return out, ValidationUnknown + } + } + break + } + // Possible extension field. + // + // TODO: We should return ValidationUnknown when: + // 1. The resolver is not frozen. (More extensions may be added to it.) + // 2. The resolver returns preg.NotFound. + // In this case, a type added to the resolver in the future could cause + // unmarshaling to begin failing. Supporting this requires some way to + // determine if the resolver is frozen. + xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), num) + if err != nil && err != preg.NotFound { + return out, ValidationUnknown + } + if err == nil { + vi = getExtensionFieldInfo(xt).validation + } + } + if vi.requiredBit != 0 { + // Check that the field has a compatible wire type. + // We only need to consider non-repeated field types, + // since repeated fields (and maps) can never be required. + ok := false + switch vi.typ { + case validationTypeVarint: + ok = wtyp == protowire.VarintType + case validationTypeFixed32: + ok = wtyp == protowire.Fixed32Type + case validationTypeFixed64: + ok = wtyp == protowire.Fixed64Type + case validationTypeBytes, validationTypeUTF8String, validationTypeMessage: + ok = wtyp == protowire.BytesType + case validationTypeGroup: + ok = wtyp == protowire.StartGroupType + } + if ok { + st.requiredMask |= vi.requiredBit + } + } + + switch wtyp { + case protowire.VarintType: + if len(b) >= 10 { + switch { + case b[0] < 0x80: + b = b[1:] + case b[1] < 0x80: + b = b[2:] + case b[2] < 0x80: + b = b[3:] + case b[3] < 0x80: + b = b[4:] + case b[4] < 0x80: + b = b[5:] + case b[5] < 0x80: + b = b[6:] + case b[6] < 0x80: + b = b[7:] + case b[7] < 0x80: + b = b[8:] + case b[8] < 0x80: + b = b[9:] + case b[9] < 0x80 && b[9] < 2: + b = b[10:] + default: + return out, ValidationInvalid + } + } else { + switch { + case len(b) > 0 && b[0] < 0x80: + b = b[1:] + case len(b) > 1 && b[1] < 0x80: + b = b[2:] + case len(b) > 2 && b[2] < 0x80: + b = b[3:] + case len(b) > 3 && b[3] < 0x80: + b = b[4:] + case len(b) > 4 && b[4] < 0x80: + b = b[5:] + case len(b) > 5 && b[5] < 0x80: + b = b[6:] + case len(b) > 6 && b[6] < 0x80: + b = b[7:] + case len(b) > 7 && b[7] < 0x80: + b = b[8:] + case len(b) > 8 && b[8] < 0x80: + b = b[9:] + case len(b) > 9 && b[9] < 2: + b = b[10:] + default: + return out, ValidationInvalid + } + } + continue State + case protowire.BytesType: + var size uint64 + if len(b) >= 1 && b[0] < 0x80 { + size = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + size = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + size, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, ValidationInvalid + } + b = b[n:] + } + if size > uint64(len(b)) { + return out, ValidationInvalid + } + v := b[:size] + b = b[size:] + switch vi.typ { + case validationTypeMessage: + if vi.mi == nil { + return out, ValidationUnknown + } + vi.mi.init() + fallthrough + case validationTypeMap: + if vi.mi != nil { + vi.mi.init() + } + states = append(states, validationState{ + typ: vi.typ, + keyType: vi.keyType, + valType: vi.valType, + mi: vi.mi, + tail: b, + }) + b = v + continue State + case validationTypeRepeatedVarint: + // Packed field. + for len(v) > 0 { + _, n := protowire.ConsumeVarint(v) + if n < 0 { + return out, ValidationInvalid + } + v = v[n:] + } + case validationTypeRepeatedFixed32: + // Packed field. + if len(v)%4 != 0 { + return out, ValidationInvalid + } + case validationTypeRepeatedFixed64: + // Packed field. + if len(v)%8 != 0 { + return out, ValidationInvalid + } + case validationTypeUTF8String: + if !utf8.Valid(v) { + return out, ValidationInvalid + } + } + case protowire.Fixed32Type: + if len(b) < 4 { + return out, ValidationInvalid + } + b = b[4:] + case protowire.Fixed64Type: + if len(b) < 8 { + return out, ValidationInvalid + } + b = b[8:] + case protowire.StartGroupType: + switch { + case vi.typ == validationTypeGroup: + if vi.mi == nil { + return out, ValidationUnknown + } + vi.mi.init() + states = append(states, validationState{ + typ: validationTypeGroup, + mi: vi.mi, + endGroup: num, + }) + continue State + case flags.ProtoLegacy && vi.typ == validationTypeMessageSetItem: + typeid, v, n, err := messageset.ConsumeFieldValue(b, false) + if err != nil { + return out, ValidationInvalid + } + xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), typeid) + switch { + case err == preg.NotFound: + b = b[n:] + case err != nil: + return out, ValidationUnknown + default: + xvi := getExtensionFieldInfo(xt).validation + if xvi.mi != nil { + xvi.mi.init() + } + states = append(states, validationState{ + typ: xvi.typ, + mi: xvi.mi, + tail: b[n:], + }) + b = v + continue State + } + default: + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, ValidationInvalid + } + b = b[n:] + } + default: + return out, ValidationInvalid + } + } + if st.endGroup != 0 { + return out, ValidationInvalid + } + if len(b) != 0 { + return out, ValidationInvalid + } + b = st.tail + PopState: + numRequiredFields := 0 + switch st.typ { + case validationTypeMessage, validationTypeGroup: + numRequiredFields = int(st.mi.numRequiredFields) + case validationTypeMap: + // If this is a map field with a message value that contains + // required fields, require that the value be present. + if st.mi != nil && st.mi.numRequiredFields > 0 { + numRequiredFields = 1 + } + } + // If there are more than 64 required fields, this check will + // always fail and we will report that the message is potentially + // uninitialized. + if numRequiredFields > 0 && bits.OnesCount64(st.requiredMask) != numRequiredFields { + initialized = false + } + states = states[:len(states)-1] + } + out.n = start - len(b) + if initialized { + out.initialized = true + } + return out, ValidationValid +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/weak.go b/vendor/google.golang.org/protobuf/internal/impl/weak.go new file mode 100644 index 00000000..575c988c --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/weak.go @@ -0,0 +1,46 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// weakFields adds methods to the exported WeakFields type for internal use. +// +// The exported type is an alias to an unnamed type, so methods can't be +// defined directly on it. +type weakFields WeakFields + +func (w *weakFields) get(num pref.FieldNumber) (_ pref.ProtoMessage, ok bool) { + if *w == nil { + return nil, false + } + m, ok := (*w)[int32(num)] + if !ok { + return nil, false + } + // As a legacy quirk, consider a typed nil to be unset. + // + // TODO: Consider fixing the generated set methods to clear the field + // when provided with a typed nil. + if v := reflect.ValueOf(m); v.Kind() == reflect.Ptr && v.IsNil() { + return nil, false + } + return Export{}.ProtoMessageV2Of(m), true +} + +func (w *weakFields) set(num pref.FieldNumber, m pref.ProtoMessage) { + if *w == nil { + *w = make(weakFields) + } + (*w)[int32(num)] = Export{}.ProtoMessageV1Of(m) +} + +func (w *weakFields) clear(num pref.FieldNumber) { + delete(*w, int32(num)) +} diff --git a/vendor/google.golang.org/protobuf/internal/mapsort/mapsort.go b/vendor/google.golang.org/protobuf/internal/mapsort/mapsort.go new file mode 100644 index 00000000..a3de1cf3 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/mapsort/mapsort.go @@ -0,0 +1,43 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package mapsort provides sorted access to maps. +package mapsort + +import ( + "sort" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Range iterates over every map entry in sorted key order, +// calling f for each key and value encountered. +func Range(mapv protoreflect.Map, keyKind protoreflect.Kind, f func(protoreflect.MapKey, protoreflect.Value) bool) { + var keys []protoreflect.MapKey + mapv.Range(func(key protoreflect.MapKey, _ protoreflect.Value) bool { + keys = append(keys, key) + return true + }) + sort.Slice(keys, func(i, j int) bool { + switch keyKind { + case protoreflect.BoolKind: + return !keys[i].Bool() && keys[j].Bool() + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, + protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + return keys[i].Int() < keys[j].Int() + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, + protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + return keys[i].Uint() < keys[j].Uint() + case protoreflect.StringKind: + return keys[i].String() < keys[j].String() + default: + panic("invalid kind: " + keyKind.String()) + } + }) + for _, key := range keys { + if !f(key, mapv.Get(key)) { + break + } + } +} diff --git a/vendor/google.golang.org/protobuf/internal/pragma/pragma.go b/vendor/google.golang.org/protobuf/internal/pragma/pragma.go new file mode 100644 index 00000000..49dc4fcd --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/pragma/pragma.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package pragma provides types that can be embedded into a struct to +// statically enforce or prevent certain language properties. +package pragma + +import "sync" + +// NoUnkeyedLiterals can be embedded in a struct to prevent unkeyed literals. +type NoUnkeyedLiterals struct{} + +// DoNotImplement can be embedded in an interface to prevent trivial +// implementations of the interface. +// +// This is useful to prevent unauthorized implementations of an interface +// so that it can be extended in the future for any protobuf language changes. +type DoNotImplement interface{ ProtoInternal(DoNotImplement) } + +// DoNotCompare can be embedded in a struct to prevent comparability. +type DoNotCompare [0]func() + +// DoNotCopy can be embedded in a struct to help prevent shallow copies. +// This does not rely on a Go language feature, but rather a special case +// within the vet checker. +// +// See https://golang.org/issues/8005. +type DoNotCopy [0]sync.Mutex diff --git a/vendor/google.golang.org/protobuf/internal/set/ints.go b/vendor/google.golang.org/protobuf/internal/set/ints.go new file mode 100644 index 00000000..d3d7f89a --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/set/ints.go @@ -0,0 +1,58 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package set provides simple set data structures for uint64s. +package set + +import "math/bits" + +// int64s represents a set of integers within the range of 0..63. +type int64s uint64 + +func (bs *int64s) Len() int { + return bits.OnesCount64(uint64(*bs)) +} +func (bs *int64s) Has(n uint64) bool { + return uint64(*bs)&(uint64(1)< 0 +} +func (bs *int64s) Set(n uint64) { + *(*uint64)(bs) |= uint64(1) << n +} +func (bs *int64s) Clear(n uint64) { + *(*uint64)(bs) &^= uint64(1) << n +} + +// Ints represents a set of integers within the range of 0..math.MaxUint64. +type Ints struct { + lo int64s + hi map[uint64]struct{} +} + +func (bs *Ints) Len() int { + return bs.lo.Len() + len(bs.hi) +} +func (bs *Ints) Has(n uint64) bool { + if n < 64 { + return bs.lo.Has(n) + } + _, ok := bs.hi[n] + return ok +} +func (bs *Ints) Set(n uint64) { + if n < 64 { + bs.lo.Set(n) + return + } + if bs.hi == nil { + bs.hi = make(map[uint64]struct{}) + } + bs.hi[n] = struct{}{} +} +func (bs *Ints) Clear(n uint64) { + if n < 64 { + bs.lo.Clear(n) + return + } + delete(bs.hi, n) +} diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings.go b/vendor/google.golang.org/protobuf/internal/strs/strings.go new file mode 100644 index 00000000..0b74e765 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/strs/strings.go @@ -0,0 +1,196 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package strs provides string manipulation functionality specific to protobuf. +package strs + +import ( + "go/token" + "strings" + "unicode" + "unicode/utf8" + + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// EnforceUTF8 reports whether to enforce strict UTF-8 validation. +func EnforceUTF8(fd protoreflect.FieldDescriptor) bool { + if flags.ProtoLegacy { + if fd, ok := fd.(interface{ EnforceUTF8() bool }); ok { + return fd.EnforceUTF8() + } + } + return fd.Syntax() == protoreflect.Proto3 +} + +// GoCamelCase camel-cases a protobuf name for use as a Go identifier. +// +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +func GoCamelCase(s string) string { + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + var b []byte + for i := 0; i < len(s); i++ { + c := s[i] + switch { + case c == '.' && i+1 < len(s) && isASCIILower(s[i+1]): + // Skip over '.' in ".{{lowercase}}". + case c == '.': + b = append(b, '_') // convert '.' to '_' + case c == '_' && (i == 0 || s[i-1] == '.'): + // Convert initial '_' to ensure we start with a capital letter. + // Do the same for '_' after '.' to match historic behavior. + b = append(b, 'X') // convert '_' to 'X' + case c == '_' && i+1 < len(s) && isASCIILower(s[i+1]): + // Skip over '_' in "_{{lowercase}}". + case isASCIIDigit(c): + b = append(b, c) + default: + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c -= 'a' - 'A' // convert lowercase to uppercase + } + b = append(b, c) + + // Accept lower case sequence that follows. + for ; i+1 < len(s) && isASCIILower(s[i+1]); i++ { + b = append(b, s[i+1]) + } + } + } + return string(b) +} + +// GoSanitized converts a string to a valid Go identifier. +func GoSanitized(s string) string { + // Sanitize the input to the set of valid characters, + // which must be '_' or be in the Unicode L or N categories. + s = strings.Map(func(r rune) rune { + if unicode.IsLetter(r) || unicode.IsDigit(r) { + return r + } + return '_' + }, s) + + // Prepend '_' in the event of a Go keyword conflict or if + // the identifier is invalid (does not start in the Unicode L category). + r, _ := utf8.DecodeRuneInString(s) + if token.Lookup(s).IsKeyword() || !unicode.IsLetter(r) { + return "_" + s + } + return s +} + +// JSONCamelCase converts a snake_case identifier to a camelCase identifier, +// according to the protobuf JSON specification. +func JSONCamelCase(s string) string { + var b []byte + var wasUnderscore bool + for i := 0; i < len(s); i++ { // proto identifiers are always ASCII + c := s[i] + if c != '_' { + if wasUnderscore && isASCIILower(c) { + c -= 'a' - 'A' // convert to uppercase + } + b = append(b, c) + } + wasUnderscore = c == '_' + } + return string(b) +} + +// JSONSnakeCase converts a camelCase identifier to a snake_case identifier, +// according to the protobuf JSON specification. +func JSONSnakeCase(s string) string { + var b []byte + for i := 0; i < len(s); i++ { // proto identifiers are always ASCII + c := s[i] + if isASCIIUpper(c) { + b = append(b, '_') + c += 'a' - 'A' // convert to lowercase + } + b = append(b, c) + } + return string(b) +} + +// MapEntryName derives the name of the map entry message given the field name. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:254-276,6057 +func MapEntryName(s string) string { + var b []byte + upperNext := true + for _, c := range s { + switch { + case c == '_': + upperNext = true + case upperNext: + b = append(b, byte(unicode.ToUpper(c))) + upperNext = false + default: + b = append(b, byte(c)) + } + } + b = append(b, "Entry"...) + return string(b) +} + +// EnumValueName derives the camel-cased enum value name. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:297-313 +func EnumValueName(s string) string { + var b []byte + upperNext := true + for _, c := range s { + switch { + case c == '_': + upperNext = true + case upperNext: + b = append(b, byte(unicode.ToUpper(c))) + upperNext = false + default: + b = append(b, byte(unicode.ToLower(c))) + upperNext = false + } + } + return string(b) +} + +// TrimEnumPrefix trims the enum name prefix from an enum value name, +// where the prefix is all lowercase without underscores. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:330-375 +func TrimEnumPrefix(s, prefix string) string { + s0 := s // original input + for len(s) > 0 && len(prefix) > 0 { + if s[0] == '_' { + s = s[1:] + continue + } + if unicode.ToLower(rune(s[0])) != rune(prefix[0]) { + return s0 // no prefix match + } + s, prefix = s[1:], prefix[1:] + } + if len(prefix) > 0 { + return s0 // no prefix match + } + s = strings.TrimLeft(s, "_") + if len(s) == 0 { + return s0 // avoid returning empty string + } + return s +} + +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} +func isASCIIUpper(c byte) bool { + return 'A' <= c && c <= 'Z' +} +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go new file mode 100644 index 00000000..85e074c9 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go @@ -0,0 +1,27 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build purego appengine + +package strs + +import pref "google.golang.org/protobuf/reflect/protoreflect" + +func UnsafeString(b []byte) string { + return string(b) +} + +func UnsafeBytes(s string) []byte { + return []byte(s) +} + +type Builder struct{} + +func (*Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName { + return prefix.Append(name) +} + +func (*Builder) MakeString(b []byte) string { + return string(b) +} diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go new file mode 100644 index 00000000..2160c701 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go @@ -0,0 +1,94 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !purego,!appengine + +package strs + +import ( + "unsafe" + + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +type ( + stringHeader struct { + Data unsafe.Pointer + Len int + } + sliceHeader struct { + Data unsafe.Pointer + Len int + Cap int + } +) + +// UnsafeString returns an unsafe string reference of b. +// The caller must treat the input slice as immutable. +// +// WARNING: Use carefully. The returned result must not leak to the end user +// unless the input slice is provably immutable. +func UnsafeString(b []byte) (s string) { + src := (*sliceHeader)(unsafe.Pointer(&b)) + dst := (*stringHeader)(unsafe.Pointer(&s)) + dst.Data = src.Data + dst.Len = src.Len + return s +} + +// UnsafeBytes returns an unsafe bytes slice reference of s. +// The caller must treat returned slice as immutable. +// +// WARNING: Use carefully. The returned result must not leak to the end user. +func UnsafeBytes(s string) (b []byte) { + src := (*stringHeader)(unsafe.Pointer(&s)) + dst := (*sliceHeader)(unsafe.Pointer(&b)) + dst.Data = src.Data + dst.Len = src.Len + dst.Cap = src.Len + return b +} + +// Builder builds a set of strings with shared lifetime. +// This differs from strings.Builder, which is for building a single string. +type Builder struct { + buf []byte +} + +// AppendFullName is equivalent to protoreflect.FullName.Append, +// but optimized for large batches where each name has a shared lifetime. +func (sb *Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName { + n := len(prefix) + len(".") + len(name) + if len(prefix) == 0 { + n -= len(".") + } + sb.grow(n) + sb.buf = append(sb.buf, prefix...) + sb.buf = append(sb.buf, '.') + sb.buf = append(sb.buf, name...) + return pref.FullName(sb.last(n)) +} + +// MakeString is equivalent to string(b), but optimized for large batches +// with a shared lifetime. +func (sb *Builder) MakeString(b []byte) string { + sb.grow(len(b)) + sb.buf = append(sb.buf, b...) + return sb.last(len(b)) +} + +func (sb *Builder) grow(n int) { + if cap(sb.buf)-len(sb.buf) >= n { + return + } + + // Unlike strings.Builder, we do not need to copy over the contents + // of the old buffer since our builder provides no API for + // retrieving previously created strings. + sb.buf = make([]byte, 2*(cap(sb.buf)+n)) +} + +func (sb *Builder) last(n int) string { + return UnsafeString(sb.buf[len(sb.buf)-n:]) +} diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go new file mode 100644 index 00000000..cd84284c --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -0,0 +1,79 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package version records versioning information about this module. +package version + +import ( + "fmt" + "strings" +) + +// These constants determine the current version of this module. +// +// +// For our release process, we enforce the following rules: +// * Tagged releases use a tag that is identical to String. +// * Tagged releases never reference a commit where the String +// contains "devel". +// * The set of all commits in this repository where String +// does not contain "devel" must have a unique String. +// +// +// Steps for tagging a new release: +// 1. Create a new CL. +// +// 2. Update Minor, Patch, and/or PreRelease as necessary. +// PreRelease must not contain the string "devel". +// +// 3. Since the last released minor version, have there been any changes to +// generator that relies on new functionality in the runtime? +// If yes, then increment RequiredGenerated. +// +// 4. Since the last released minor version, have there been any changes to +// the runtime that removes support for old .pb.go source code? +// If yes, then increment SupportMinimum. +// +// 5. Send out the CL for review and submit it. +// Note that the next CL in step 8 must be submitted after this CL +// without any other CLs in-between. +// +// 6. Tag a new version, where the tag is is the current String. +// +// 7. Write release notes for all notable changes +// between this release and the last release. +// +// 8. Create a new CL. +// +// 9. Update PreRelease to include the string "devel". +// For example: "" -> "devel" or "rc.1" -> "rc.1.devel" +// +// 10. Send out the CL for review and submit it. +const ( + Major = 1 + Minor = 21 + Patch = 0 + PreRelease = "" +) + +// String formats the version string for this module in semver format. +// +// Examples: +// v1.20.1 +// v1.21.0-rc.1 +func String() string { + v := fmt.Sprintf("v%d.%d.%d", Major, Minor, Patch) + if PreRelease != "" { + v += "-" + PreRelease + + // TODO: Add metadata about the commit or build hash. + // See https://golang.org/issue/29814 + // See https://golang.org/issue/33533 + var metadata string + if strings.Contains(PreRelease, "devel") && metadata != "" { + v += "+" + metadata + } + } + return v +} diff --git a/vendor/google.golang.org/protobuf/proto/checkinit.go b/vendor/google.golang.org/protobuf/proto/checkinit.go new file mode 100644 index 00000000..d7c99235 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/checkinit.go @@ -0,0 +1,65 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// CheckInitialized returns an error if any required fields in m are not set. +func CheckInitialized(m Message) error { + return checkInitialized(m.ProtoReflect()) +} + +// CheckInitialized returns an error if any required fields in m are not set. +func checkInitialized(m protoreflect.Message) error { + if methods := protoMethods(m); methods != nil && methods.CheckInitialized != nil { + _, err := methods.CheckInitialized(protoiface.CheckInitializedInput{ + Message: m, + }) + return err + } + return checkInitializedSlow(m) +} + +func checkInitializedSlow(m protoreflect.Message) error { + md := m.Descriptor() + fds := md.Fields() + for i, nums := 0, md.RequiredNumbers(); i < nums.Len(); i++ { + fd := fds.ByNumber(nums.Get(i)) + if !m.Has(fd) { + return errors.RequiredNotSet(string(fd.FullName())) + } + } + var err error + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + case fd.IsList(): + if fd.Message() == nil { + return true + } + for i, list := 0, v.List(); i < list.Len() && err == nil; i++ { + err = checkInitialized(list.Get(i).Message()) + } + case fd.IsMap(): + if fd.MapValue().Message() == nil { + return true + } + v.Map().Range(func(key protoreflect.MapKey, v protoreflect.Value) bool { + err = checkInitialized(v.Message()) + return err == nil + }) + default: + if fd.Message() == nil { + return true + } + err = checkInitialized(v.Message()) + } + return err == nil + }) + return err +} diff --git a/vendor/google.golang.org/protobuf/proto/decode.go b/vendor/google.golang.org/protobuf/proto/decode.go new file mode 100644 index 00000000..12821476 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/decode.go @@ -0,0 +1,270 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" +) + +// UnmarshalOptions configures the unmarshaler. +// +// Example usage: +// err := UnmarshalOptions{DiscardUnknown: true}.Unmarshal(b, m) +type UnmarshalOptions struct { + pragma.NoUnkeyedLiterals + + // Merge merges the input into the destination message. + // The default behavior is to always reset the message before unmarshaling, + // unless Merge is specified. + Merge bool + + // AllowPartial accepts input for messages that will result in missing + // required fields. If AllowPartial is false (the default), Unmarshal will + // return an error if there are any missing required fields. + AllowPartial bool + + // If DiscardUnknown is set, unknown fields are ignored. + DiscardUnknown bool + + // Resolver is used for looking up types when unmarshaling extension fields. + // If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) + } +} + +// Unmarshal parses the wire-format message in b and places the result in m. +func Unmarshal(b []byte, m Message) error { + _, err := UnmarshalOptions{}.unmarshal(b, m.ProtoReflect()) + return err +} + +// Unmarshal parses the wire-format message in b and places the result in m. +func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error { + _, err := o.unmarshal(b, m.ProtoReflect()) + return err +} + +// UnmarshalState parses a wire-format message and places the result in m. +// +// This method permits fine-grained control over the unmarshaler. +// Most users should use Unmarshal instead. +func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + return o.unmarshal(in.Buf, in.Message) +} + +func (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out protoiface.UnmarshalOutput, err error) { + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + if !o.Merge { + Reset(m.Interface()) // TODO + } + allowPartial := o.AllowPartial + o.Merge = true + o.AllowPartial = true + methods := protoMethods(m) + if methods != nil && methods.Unmarshal != nil && + !(o.DiscardUnknown && methods.Flags&protoiface.SupportUnmarshalDiscardUnknown == 0) { + in := protoiface.UnmarshalInput{ + Message: m, + Buf: b, + Resolver: o.Resolver, + } + if o.DiscardUnknown { + in.Flags |= protoiface.UnmarshalDiscardUnknown + } + out, err = methods.Unmarshal(in) + } else { + err = o.unmarshalMessageSlow(b, m) + } + if err != nil { + return out, err + } + if allowPartial || (out.Flags&protoiface.UnmarshalInitialized != 0) { + return out, nil + } + return out, checkInitialized(m) +} + +func (o UnmarshalOptions) unmarshalMessage(b []byte, m protoreflect.Message) error { + _, err := o.unmarshal(b, m) + return err +} + +func (o UnmarshalOptions) unmarshalMessageSlow(b []byte, m protoreflect.Message) error { + md := m.Descriptor() + if messageset.IsMessageSet(md) { + return unmarshalMessageSet(b, m, o) + } + fields := md.Fields() + for len(b) > 0 { + // Parse the tag (field number and wire type). + num, wtyp, tagLen := protowire.ConsumeTag(b) + if tagLen < 0 { + return protowire.ParseError(tagLen) + } + if num > protowire.MaxValidNumber { + return errors.New("invalid field number") + } + + // Find the field descriptor for this field number. + fd := fields.ByNumber(num) + if fd == nil && md.ExtensionRanges().Has(num) { + extType, err := o.Resolver.FindExtensionByNumber(md.FullName(), num) + if err != nil && err != protoregistry.NotFound { + return errors.New("%v: unable to resolve extension %v: %v", md.FullName(), num, err) + } + if extType != nil { + fd = extType.TypeDescriptor() + } + } + var err error + if fd == nil { + err = errUnknown + } else if flags.ProtoLegacy { + if fd.IsWeak() && fd.Message().IsPlaceholder() { + err = errUnknown // weak referent is not linked in + } + } + + // Parse the field value. + var valLen int + switch { + case err != nil: + case fd.IsList(): + valLen, err = o.unmarshalList(b[tagLen:], wtyp, m.Mutable(fd).List(), fd) + case fd.IsMap(): + valLen, err = o.unmarshalMap(b[tagLen:], wtyp, m.Mutable(fd).Map(), fd) + default: + valLen, err = o.unmarshalSingular(b[tagLen:], wtyp, m, fd) + } + if err != nil { + if err != errUnknown { + return err + } + valLen = protowire.ConsumeFieldValue(num, wtyp, b[tagLen:]) + if valLen < 0 { + return protowire.ParseError(valLen) + } + if !o.DiscardUnknown { + m.SetUnknown(append(m.GetUnknown(), b[:tagLen+valLen]...)) + } + } + b = b[tagLen+valLen:] + } + return nil +} + +func (o UnmarshalOptions) unmarshalSingular(b []byte, wtyp protowire.Type, m protoreflect.Message, fd protoreflect.FieldDescriptor) (n int, err error) { + v, n, err := o.unmarshalScalar(b, wtyp, fd) + if err != nil { + return 0, err + } + switch fd.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + m2 := m.Mutable(fd).Message() + if err := o.unmarshalMessage(v.Bytes(), m2); err != nil { + return n, err + } + default: + // Non-message scalars replace the previous value. + m.Set(fd, v) + } + return n, nil +} + +func (o UnmarshalOptions) unmarshalMap(b []byte, wtyp protowire.Type, mapv protoreflect.Map, fd protoreflect.FieldDescriptor) (n int, err error) { + if wtyp != protowire.BytesType { + return 0, errUnknown + } + b, n = protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + var ( + keyField = fd.MapKey() + valField = fd.MapValue() + key protoreflect.Value + val protoreflect.Value + haveKey bool + haveVal bool + ) + switch valField.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + val = mapv.NewValue() + } + // Map entries are represented as a two-element message with fields + // containing the key and value. + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + if num > protowire.MaxValidNumber { + return 0, errors.New("invalid field number") + } + b = b[n:] + err = errUnknown + switch num { + case 1: + key, n, err = o.unmarshalScalar(b, wtyp, keyField) + if err != nil { + break + } + haveKey = true + case 2: + var v protoreflect.Value + v, n, err = o.unmarshalScalar(b, wtyp, valField) + if err != nil { + break + } + switch valField.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + if err := o.unmarshalMessage(v.Bytes(), val.Message()); err != nil { + return 0, err + } + default: + val = v + } + haveVal = true + } + if err == errUnknown { + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return 0, protowire.ParseError(n) + } + } else if err != nil { + return 0, err + } + b = b[n:] + } + // Every map entry should have entries for key and value, but this is not strictly required. + if !haveKey { + key = keyField.Default() + } + if !haveVal { + switch valField.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + default: + val = valField.Default() + } + } + mapv.Set(key.MapKey(), val) + return n, nil +} + +// errUnknown is used internally to indicate fields which should be added +// to the unknown field set of a message. It is never returned from an exported +// function. +var errUnknown = errors.New("BUG: internal error (unknown)") diff --git a/vendor/google.golang.org/protobuf/proto/decode_gen.go b/vendor/google.golang.org/protobuf/proto/decode_gen.go new file mode 100644 index 00000000..d6dc904d --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/decode_gen.go @@ -0,0 +1,603 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package proto + +import ( + "math" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// unmarshalScalar decodes a value of the given kind. +// +// Message values are decoded into a []byte which aliases the input data. +func (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp protowire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) { + switch fd.Kind() { + case protoreflect.BoolKind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfBool(protowire.DecodeBool(v)), n, nil + case protoreflect.EnumKind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), n, nil + case protoreflect.Int32Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfInt32(int32(v)), n, nil + case protoreflect.Sint32Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), n, nil + case protoreflect.Uint32Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfUint32(uint32(v)), n, nil + case protoreflect.Int64Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfInt64(int64(v)), n, nil + case protoreflect.Sint64Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), n, nil + case protoreflect.Uint64Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfUint64(v), n, nil + case protoreflect.Sfixed32Kind: + if wtyp != protowire.Fixed32Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfInt32(int32(v)), n, nil + case protoreflect.Fixed32Kind: + if wtyp != protowire.Fixed32Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfUint32(uint32(v)), n, nil + case protoreflect.FloatKind: + if wtyp != protowire.Fixed32Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), n, nil + case protoreflect.Sfixed64Kind: + if wtyp != protowire.Fixed64Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfInt64(int64(v)), n, nil + case protoreflect.Fixed64Kind: + if wtyp != protowire.Fixed64Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfUint64(v), n, nil + case protoreflect.DoubleKind: + if wtyp != protowire.Fixed64Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfFloat64(math.Float64frombits(v)), n, nil + case protoreflect.StringKind: + if wtyp != protowire.BytesType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + if strs.EnforceUTF8(fd) && !utf8.Valid(v) { + return protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName())) + } + return protoreflect.ValueOfString(string(v)), n, nil + case protoreflect.BytesKind: + if wtyp != protowire.BytesType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), n, nil + case protoreflect.MessageKind: + if wtyp != protowire.BytesType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfBytes(v), n, nil + case protoreflect.GroupKind: + if wtyp != protowire.StartGroupType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeGroup(fd.Number(), b) + if n < 0 { + return val, 0, protowire.ParseError(n) + } + return protoreflect.ValueOfBytes(v), n, nil + default: + return val, 0, errUnknown + } +} + +func (o UnmarshalOptions) unmarshalList(b []byte, wtyp protowire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) { + switch fd.Kind() { + case protoreflect.BoolKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + return n, nil + case protoreflect.EnumKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + return n, nil + case protoreflect.Int32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt32(int32(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + return n, nil + case protoreflect.Sint32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + return n, nil + case protoreflect.Uint32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint32(uint32(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + return n, nil + case protoreflect.Int64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt64(int64(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + return n, nil + case protoreflect.Sint64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + return n, nil + case protoreflect.Uint64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint64(v)) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint64(v)) + return n, nil + case protoreflect.Sfixed32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed32(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt32(int32(v))) + } + return n, nil + } + if wtyp != protowire.Fixed32Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + return n, nil + case protoreflect.Fixed32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed32(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint32(uint32(v))) + } + return n, nil + } + if wtyp != protowire.Fixed32Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + return n, nil + case protoreflect.FloatKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed32(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + } + return n, nil + } + if wtyp != protowire.Fixed32Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + return n, nil + case protoreflect.Sfixed64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed64(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt64(int64(v))) + } + return n, nil + } + if wtyp != protowire.Fixed64Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + return n, nil + case protoreflect.Fixed64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed64(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint64(v)) + } + return n, nil + } + if wtyp != protowire.Fixed64Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfUint64(v)) + return n, nil + case protoreflect.DoubleKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed64(buf) + if n < 0 { + return 0, protowire.ParseError(n) + } + buf = buf[n:] + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + } + return n, nil + } + if wtyp != protowire.Fixed64Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + return n, nil + case protoreflect.StringKind: + if wtyp != protowire.BytesType { + return 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + if strs.EnforceUTF8(fd) && !utf8.Valid(v) { + return 0, errors.InvalidUTF8(string(fd.FullName())) + } + list.Append(protoreflect.ValueOfString(string(v))) + return n, nil + case protoreflect.BytesKind: + if wtyp != protowire.BytesType { + return 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...))) + return n, nil + case protoreflect.MessageKind: + if wtyp != protowire.BytesType { + return 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, protowire.ParseError(n) + } + m := list.NewElement() + if err := o.unmarshalMessage(v, m.Message()); err != nil { + return 0, err + } + list.Append(m) + return n, nil + case protoreflect.GroupKind: + if wtyp != protowire.StartGroupType { + return 0, errUnknown + } + v, n := protowire.ConsumeGroup(fd.Number(), b) + if n < 0 { + return 0, protowire.ParseError(n) + } + m := list.NewElement() + if err := o.unmarshalMessage(v, m.Message()); err != nil { + return 0, err + } + list.Append(m) + return n, nil + default: + return 0, errUnknown + } +} + +// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices. +var emptyBuf [0]byte diff --git a/vendor/google.golang.org/protobuf/proto/doc.go b/vendor/google.golang.org/protobuf/proto/doc.go new file mode 100644 index 00000000..c52d8c4a --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/doc.go @@ -0,0 +1,94 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package proto provides functions operating on protocol buffer messages. +// +// For documentation on protocol buffers in general, see: +// +// https://developers.google.com/protocol-buffers +// +// For a tutorial on using protocol buffers with Go, see: +// +// https://developers.google.com/protocol-buffers/docs/gotutorial +// +// For a guide to generated Go protocol buffer code, see: +// +// https://developers.google.com/protocol-buffers/docs/reference/go-generated +// +// +// Binary serialization +// +// This package contains functions to convert to and from the wire format, +// an efficient binary serialization of protocol buffers. +// +// • Size reports the size of a message in the wire format. +// +// • Marshal converts a message to the wire format. +// The MarshalOptions type provides more control over wire marshaling. +// +// • Unmarshal converts a message from the wire format. +// The UnmarshalOptions type provides more control over wire unmarshaling. +// +// +// Basic message operations +// +// • Clone makes a deep copy of a message. +// +// • Merge merges the content of a message into another. +// +// • Equal compares two messages. For more control over comparisons +// and detailed reporting of differences, see package +// "google.golang.org/protobuf/testing/protocmp". +// +// • Reset clears the content of a message. +// +// • CheckInitialized reports whether all required fields in a message are set. +// +// +// Optional scalar constructors +// +// The API for some generated messages represents optional scalar fields +// as pointers to a value. For example, an optional string field has the +// Go type *string. +// +// • Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, and String +// take a value and return a pointer to a new instance of it, +// to simplify construction of optional field values. +// +// Generated enum types usually have an Enum method which performs the +// same operation. +// +// Optional scalar fields are only supported in proto2. +// +// +// Extension accessors +// +// • HasExtension, GetExtension, SetExtension, and ClearExtension +// access extension field values in a protocol buffer message. +// +// Extension fields are only supported in proto2. +// +// +// Related packages +// +// • Package "google.golang.org/protobuf/encoding/protojson" converts messages to +// and from JSON. +// +// • Package "google.golang.org/protobuf/encoding/prototext" converts messages to +// and from the text format. +// +// • Package "google.golang.org/protobuf/reflect/protoreflect" provides a +// reflection interface for protocol buffer data types. +// +// • Package "google.golang.org/protobuf/testing/protocmp" provides features +// to compare protocol buffer messages with the "github.com/google/go-cmp/cmp" +// package. +// +// • Package "google.golang.org/protobuf/types/dynamicpb" provides a dynamic +// message type, suitable for working with messages where the protocol buffer +// type is only known at runtime. +// +// This module contains additional packages for more specialized use cases. +// Consult the individual package documentation for details. +package proto diff --git a/vendor/google.golang.org/protobuf/proto/encode.go b/vendor/google.golang.org/protobuf/proto/encode.go new file mode 100644 index 00000000..fa738a15 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/encode.go @@ -0,0 +1,308 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/fieldsort" + "google.golang.org/protobuf/internal/mapsort" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// MarshalOptions configures the marshaler. +// +// Example usage: +// b, err := MarshalOptions{Deterministic: true}.Marshal(m) +type MarshalOptions struct { + pragma.NoUnkeyedLiterals + + // AllowPartial allows messages that have missing required fields to marshal + // without returning an error. If AllowPartial is false (the default), + // Marshal will return an error if there are any missing required fields. + AllowPartial bool + + // Deterministic controls whether the same message will always be + // serialized to the same bytes within the same binary. + // + // Setting this option guarantees that repeated serialization of + // the same message will return the same bytes, and that different + // processes of the same binary (which may be executing on different + // machines) will serialize equal messages to the same bytes. + // It has no effect on the resulting size of the encoded message compared + // to a non-deterministic marshal. + // + // Note that the deterministic serialization is NOT canonical across + // languages. It is not guaranteed to remain stable over time. It is + // unstable across different builds with schema changes due to unknown + // fields. Users who need canonical serialization (e.g., persistent + // storage in a canonical form, fingerprinting, etc.) must define + // their own canonicalization specification and implement their own + // serializer rather than relying on this API. + // + // If deterministic serialization is requested, map entries will be + // sorted by keys in lexographical order. This is an implementation + // detail and subject to change. + Deterministic bool + + // UseCachedSize indicates that the result of a previous Size call + // may be reused. + // + // Setting this option asserts that: + // + // 1. Size has previously been called on this message with identical + // options (except for UseCachedSize itself). + // + // 2. The message and all its submessages have not changed in any + // way since the Size call. + // + // If either of these invariants is violated, + // the results are undefined and may include panics or corrupted output. + // + // Implementations MAY take this option into account to provide + // better performance, but there is no guarantee that they will do so. + // There is absolutely no guarantee that Size followed by Marshal with + // UseCachedSize set will perform equivalently to Marshal alone. + UseCachedSize bool +} + +// Marshal returns the wire-format encoding of m. +func Marshal(m Message) ([]byte, error) { + out, err := MarshalOptions{}.marshal(nil, m.ProtoReflect()) + return out.Buf, err +} + +// Marshal returns the wire-format encoding of m. +func (o MarshalOptions) Marshal(m Message) ([]byte, error) { + out, err := o.marshal(nil, m.ProtoReflect()) + return out.Buf, err +} + +// MarshalAppend appends the wire-format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m Message) ([]byte, error) { + out, err := o.marshal(b, m.ProtoReflect()) + return out.Buf, err +} + +// MarshalState returns the wire-format encoding of a message. +// +// This method permits fine-grained control over the marshaler. +// Most users should use Marshal instead. +func (o MarshalOptions) MarshalState(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + return o.marshal(in.Buf, in.Message) +} + +func (o MarshalOptions) marshal(b []byte, m protoreflect.Message) (out protoiface.MarshalOutput, err error) { + allowPartial := o.AllowPartial + o.AllowPartial = true + if methods := protoMethods(m); methods != nil && methods.Marshal != nil && + !(o.Deterministic && methods.Flags&protoiface.SupportMarshalDeterministic == 0) { + in := protoiface.MarshalInput{ + Message: m, + Buf: b, + } + if o.Deterministic { + in.Flags |= protoiface.MarshalDeterministic + } + if o.UseCachedSize { + in.Flags |= protoiface.MarshalUseCachedSize + } + if methods.Size != nil { + sout := methods.Size(protoiface.SizeInput{ + Message: m, + Flags: in.Flags, + }) + if cap(b) < len(b)+sout.Size { + in.Buf = make([]byte, len(b), growcap(cap(b), len(b)+sout.Size)) + copy(in.Buf, b) + } + in.Flags |= protoiface.MarshalUseCachedSize + } + out, err = methods.Marshal(in) + } else { + out.Buf, err = o.marshalMessageSlow(b, m) + } + if err != nil { + return out, err + } + if allowPartial { + return out, nil + } + return out, checkInitialized(m) +} + +func (o MarshalOptions) marshalMessage(b []byte, m protoreflect.Message) ([]byte, error) { + out, err := o.marshal(b, m) + return out.Buf, err +} + +// growcap scales up the capacity of a slice. +// +// Given a slice with a current capacity of oldcap and a desired +// capacity of wantcap, growcap returns a new capacity >= wantcap. +// +// The algorithm is mostly identical to the one used by append as of Go 1.14. +func growcap(oldcap, wantcap int) (newcap int) { + if wantcap > oldcap*2 { + newcap = wantcap + } else if oldcap < 1024 { + // The Go 1.14 runtime takes this case when len(s) < 1024, + // not when cap(s) < 1024. The difference doesn't seem + // significant here. + newcap = oldcap * 2 + } else { + newcap = oldcap + for 0 < newcap && newcap < wantcap { + newcap += newcap / 4 + } + if newcap <= 0 { + newcap = wantcap + } + } + return newcap +} + +func (o MarshalOptions) marshalMessageSlow(b []byte, m protoreflect.Message) ([]byte, error) { + if messageset.IsMessageSet(m.Descriptor()) { + return marshalMessageSet(b, m, o) + } + // There are many choices for what order we visit fields in. The default one here + // is chosen for reasonable efficiency and simplicity given the protoreflect API. + // It is not deterministic, since Message.Range does not return fields in any + // defined order. + // + // When using deterministic serialization, we sort the known fields. + var err error + o.rangeFields(m, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + b, err = o.marshalField(b, fd, v) + return err == nil + }) + if err != nil { + return b, err + } + b = append(b, m.GetUnknown()...) + return b, nil +} + +// rangeFields visits fields in a defined order when deterministic serialization is enabled. +func (o MarshalOptions) rangeFields(m protoreflect.Message, f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if !o.Deterministic { + m.Range(f) + return + } + var fds []protoreflect.FieldDescriptor + m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { + fds = append(fds, fd) + return true + }) + sort.Slice(fds, func(a, b int) bool { + return fieldsort.Less(fds[a], fds[b]) + }) + for _, fd := range fds { + if !f(fd, m.Get(fd)) { + break + } + } +} + +func (o MarshalOptions) marshalField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) { + switch { + case fd.IsList(): + return o.marshalList(b, fd, value.List()) + case fd.IsMap(): + return o.marshalMap(b, fd, value.Map()) + default: + b = protowire.AppendTag(b, fd.Number(), wireTypes[fd.Kind()]) + return o.marshalSingular(b, fd, value) + } +} + +func (o MarshalOptions) marshalList(b []byte, fd protoreflect.FieldDescriptor, list protoreflect.List) ([]byte, error) { + if fd.IsPacked() && list.Len() > 0 { + b = protowire.AppendTag(b, fd.Number(), protowire.BytesType) + b, pos := appendSpeculativeLength(b) + for i, llen := 0, list.Len(); i < llen; i++ { + var err error + b, err = o.marshalSingular(b, fd, list.Get(i)) + if err != nil { + return b, err + } + } + b = finishSpeculativeLength(b, pos) + return b, nil + } + + kind := fd.Kind() + for i, llen := 0, list.Len(); i < llen; i++ { + var err error + b = protowire.AppendTag(b, fd.Number(), wireTypes[kind]) + b, err = o.marshalSingular(b, fd, list.Get(i)) + if err != nil { + return b, err + } + } + return b, nil +} + +func (o MarshalOptions) marshalMap(b []byte, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) ([]byte, error) { + keyf := fd.MapKey() + valf := fd.MapValue() + var err error + o.rangeMap(mapv, keyf.Kind(), func(key protoreflect.MapKey, value protoreflect.Value) bool { + b = protowire.AppendTag(b, fd.Number(), protowire.BytesType) + var pos int + b, pos = appendSpeculativeLength(b) + + b, err = o.marshalField(b, keyf, key.Value()) + if err != nil { + return false + } + b, err = o.marshalField(b, valf, value) + if err != nil { + return false + } + b = finishSpeculativeLength(b, pos) + return true + }) + return b, err +} + +func (o MarshalOptions) rangeMap(mapv protoreflect.Map, kind protoreflect.Kind, f func(protoreflect.MapKey, protoreflect.Value) bool) { + if !o.Deterministic { + mapv.Range(f) + return + } + mapsort.Range(mapv, kind, f) +} + +// When encoding length-prefixed fields, we speculatively set aside some number of bytes +// for the length, encode the data, and then encode the length (shifting the data if necessary +// to make room). +const speculativeLength = 1 + +func appendSpeculativeLength(b []byte) ([]byte, int) { + pos := len(b) + b = append(b, "\x00\x00\x00\x00"[:speculativeLength]...) + return b, pos +} + +func finishSpeculativeLength(b []byte, pos int) []byte { + mlen := len(b) - pos - speculativeLength + msiz := protowire.SizeVarint(uint64(mlen)) + if msiz != speculativeLength { + for i := 0; i < msiz-speculativeLength; i++ { + b = append(b, 0) + } + copy(b[pos+msiz:], b[pos+speculativeLength:]) + b = b[:pos+msiz+mlen] + } + protowire.AppendVarint(b[:pos], uint64(mlen)) + return b +} diff --git a/vendor/google.golang.org/protobuf/proto/encode_gen.go b/vendor/google.golang.org/protobuf/proto/encode_gen.go new file mode 100644 index 00000000..185dacfb --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/encode_gen.go @@ -0,0 +1,97 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package proto + +import ( + "math" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var wireTypes = map[protoreflect.Kind]protowire.Type{ + protoreflect.BoolKind: protowire.VarintType, + protoreflect.EnumKind: protowire.VarintType, + protoreflect.Int32Kind: protowire.VarintType, + protoreflect.Sint32Kind: protowire.VarintType, + protoreflect.Uint32Kind: protowire.VarintType, + protoreflect.Int64Kind: protowire.VarintType, + protoreflect.Sint64Kind: protowire.VarintType, + protoreflect.Uint64Kind: protowire.VarintType, + protoreflect.Sfixed32Kind: protowire.Fixed32Type, + protoreflect.Fixed32Kind: protowire.Fixed32Type, + protoreflect.FloatKind: protowire.Fixed32Type, + protoreflect.Sfixed64Kind: protowire.Fixed64Type, + protoreflect.Fixed64Kind: protowire.Fixed64Type, + protoreflect.DoubleKind: protowire.Fixed64Type, + protoreflect.StringKind: protowire.BytesType, + protoreflect.BytesKind: protowire.BytesType, + protoreflect.MessageKind: protowire.BytesType, + protoreflect.GroupKind: protowire.StartGroupType, +} + +func (o MarshalOptions) marshalSingular(b []byte, fd protoreflect.FieldDescriptor, v protoreflect.Value) ([]byte, error) { + switch fd.Kind() { + case protoreflect.BoolKind: + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + case protoreflect.EnumKind: + b = protowire.AppendVarint(b, uint64(v.Enum())) + case protoreflect.Int32Kind: + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + case protoreflect.Sint32Kind: + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + case protoreflect.Uint32Kind: + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + case protoreflect.Int64Kind: + b = protowire.AppendVarint(b, uint64(v.Int())) + case protoreflect.Sint64Kind: + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + case protoreflect.Uint64Kind: + b = protowire.AppendVarint(b, v.Uint()) + case protoreflect.Sfixed32Kind: + b = protowire.AppendFixed32(b, uint32(v.Int())) + case protoreflect.Fixed32Kind: + b = protowire.AppendFixed32(b, uint32(v.Uint())) + case protoreflect.FloatKind: + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + case protoreflect.Sfixed64Kind: + b = protowire.AppendFixed64(b, uint64(v.Int())) + case protoreflect.Fixed64Kind: + b = protowire.AppendFixed64(b, v.Uint()) + case protoreflect.DoubleKind: + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + case protoreflect.StringKind: + if strs.EnforceUTF8(fd) && !utf8.ValidString(v.String()) { + return b, errors.InvalidUTF8(string(fd.FullName())) + } + b = protowire.AppendString(b, v.String()) + case protoreflect.BytesKind: + b = protowire.AppendBytes(b, v.Bytes()) + case protoreflect.MessageKind: + var pos int + var err error + b, pos = appendSpeculativeLength(b) + b, err = o.marshalMessage(b, v.Message()) + if err != nil { + return b, err + } + b = finishSpeculativeLength(b, pos) + case protoreflect.GroupKind: + var err error + b, err = o.marshalMessage(b, v.Message()) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, protowire.EncodeTag(fd.Number(), protowire.EndGroupType)) + default: + return b, errors.New("invalid kind %v", fd.Kind()) + } + return b, nil +} diff --git a/vendor/google.golang.org/protobuf/proto/equal.go b/vendor/google.golang.org/protobuf/proto/equal.go new file mode 100644 index 00000000..10902bd8 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/equal.go @@ -0,0 +1,154 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "bytes" + "math" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" + pref "google.golang.org/protobuf/reflect/protoreflect" +) + +// Equal reports whether two messages are equal. +// If two messages marshal to the same bytes under deterministic serialization, +// then Equal is guaranteed to report true. +// +// Two messages are equal if they belong to the same message descriptor, +// have the same set of populated known and extension field values, +// and the same set of unknown fields values. If either of the top-level +// messages are invalid, then Equal reports true only if both are invalid. +// +// Scalar values are compared with the equivalent of the == operator in Go, +// except bytes values which are compared using bytes.Equal and +// floating point values which specially treat NaNs as equal. +// Message values are compared by recursively calling Equal. +// Lists are equal if each element value is also equal. +// Maps are equal if they have the same set of keys, where the pair of values +// for each key is also equal. +func Equal(x, y Message) bool { + if x == nil || y == nil { + return x == nil && y == nil + } + mx := x.ProtoReflect() + my := y.ProtoReflect() + if mx.IsValid() != my.IsValid() { + return false + } + return equalMessage(mx, my) +} + +// equalMessage compares two messages. +func equalMessage(mx, my pref.Message) bool { + if mx.Descriptor() != my.Descriptor() { + return false + } + + nx := 0 + equal := true + mx.Range(func(fd pref.FieldDescriptor, vx pref.Value) bool { + nx++ + vy := my.Get(fd) + equal = my.Has(fd) && equalField(fd, vx, vy) + return equal + }) + if !equal { + return false + } + ny := 0 + my.Range(func(fd pref.FieldDescriptor, vx pref.Value) bool { + ny++ + return true + }) + if nx != ny { + return false + } + + return equalUnknown(mx.GetUnknown(), my.GetUnknown()) +} + +// equalField compares two fields. +func equalField(fd pref.FieldDescriptor, x, y pref.Value) bool { + switch { + case fd.IsList(): + return equalList(fd, x.List(), y.List()) + case fd.IsMap(): + return equalMap(fd, x.Map(), y.Map()) + default: + return equalValue(fd, x, y) + } +} + +// equalMap compares two maps. +func equalMap(fd pref.FieldDescriptor, x, y pref.Map) bool { + if x.Len() != y.Len() { + return false + } + equal := true + x.Range(func(k pref.MapKey, vx pref.Value) bool { + vy := y.Get(k) + equal = y.Has(k) && equalValue(fd.MapValue(), vx, vy) + return equal + }) + return equal +} + +// equalList compares two lists. +func equalList(fd pref.FieldDescriptor, x, y pref.List) bool { + if x.Len() != y.Len() { + return false + } + for i := x.Len() - 1; i >= 0; i-- { + if !equalValue(fd, x.Get(i), y.Get(i)) { + return false + } + } + return true +} + +// equalValue compares two singular values. +func equalValue(fd pref.FieldDescriptor, x, y pref.Value) bool { + switch { + case fd.Message() != nil: + return equalMessage(x.Message(), y.Message()) + case fd.Kind() == pref.BytesKind: + return bytes.Equal(x.Bytes(), y.Bytes()) + case fd.Kind() == pref.FloatKind, fd.Kind() == pref.DoubleKind: + fx := x.Float() + fy := y.Float() + if math.IsNaN(fx) || math.IsNaN(fy) { + return math.IsNaN(fx) && math.IsNaN(fy) + } + return fx == fy + default: + return x.Interface() == y.Interface() + } +} + +// equalUnknown compares unknown fields by direct comparison on the raw bytes +// of each individual field number. +func equalUnknown(x, y pref.RawFields) bool { + if len(x) != len(y) { + return false + } + if bytes.Equal([]byte(x), []byte(y)) { + return true + } + + mx := make(map[pref.FieldNumber]pref.RawFields) + my := make(map[pref.FieldNumber]pref.RawFields) + for len(x) > 0 { + fnum, _, n := protowire.ConsumeField(x) + mx[fnum] = append(mx[fnum], x[:n]...) + x = x[n:] + } + for len(y) > 0 { + fnum, _, n := protowire.ConsumeField(y) + my[fnum] = append(my[fnum], y[:n]...) + y = y[n:] + } + return reflect.DeepEqual(mx, my) +} diff --git a/vendor/google.golang.org/protobuf/proto/extension.go b/vendor/google.golang.org/protobuf/proto/extension.go new file mode 100644 index 00000000..73f2431f --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/extension.go @@ -0,0 +1,36 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" +) + +// HasExtension reports whether an extension field is populated. +// It panics if ext does not extend m. +func HasExtension(m Message, ext protoreflect.ExtensionType) bool { + return m.ProtoReflect().Has(ext.TypeDescriptor()) +} + +// ClearExtension clears an extension field such that subsequent +// HasExtension calls return false. +// It panics if ext does not extend m. +func ClearExtension(m Message, ext protoreflect.ExtensionType) { + m.ProtoReflect().Clear(ext.TypeDescriptor()) +} + +// GetExtension retrieves the value for an extension field. +// If the field is unpopulated, it returns the default value for +// scalars and an immutable, empty value for lists, maps, or messages. +// It panics if ext does not extend m. +func GetExtension(m Message, ext protoreflect.ExtensionType) interface{} { + return ext.InterfaceOf(m.ProtoReflect().Get(ext.TypeDescriptor())) +} + +// SetExtension stores the value of an extension field. +// It panics if ext does not extend m or if value type is invalid for the field. +func SetExtension(m Message, ext protoreflect.ExtensionType, value interface{}) { + m.ProtoReflect().Set(ext.TypeDescriptor(), ext.ValueOf(value)) +} diff --git a/vendor/google.golang.org/protobuf/proto/merge.go b/vendor/google.golang.org/protobuf/proto/merge.go new file mode 100644 index 00000000..df72f989 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/merge.go @@ -0,0 +1,131 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Merge merges src into dst, which must be a message with the same descriptor. +// +// Populated scalar fields in src are copied to dst, while populated +// singular messages in src are merged into dst by recursively calling Merge. +// The elements of every list field in src is appended to the corresponded +// list fields in dst. The entries of every map field in src is copied into +// the corresponding map field in dst, possibly replacing existing entries. +// The unknown fields of src are appended to the unknown fields of dst. +// +// It is semantically equivalent to unmarshaling the encoded form of src +// into dst with the UnmarshalOptions.Merge option specified. +func Merge(dst, src Message) { + dstMsg, srcMsg := dst.ProtoReflect(), src.ProtoReflect() + if dstMsg.Descriptor() != srcMsg.Descriptor() { + panic("descriptor mismatch") + } + mergeOptions{}.mergeMessage(dstMsg, srcMsg) +} + +// Clone returns a deep copy of m. +// If the top-level message is invalid, it returns an invalid message as well. +func Clone(m Message) Message { + // NOTE: Most usages of Clone assume the following properties: + // t := reflect.TypeOf(m) + // t == reflect.TypeOf(m.ProtoReflect().New().Interface()) + // t == reflect.TypeOf(m.ProtoReflect().Type().Zero().Interface()) + // + // Embedding protobuf messages breaks this since the parent type will have + // a forwarded ProtoReflect method, but the Interface method will return + // the underlying embedded message type. + if m == nil { + return nil + } + src := m.ProtoReflect() + if !src.IsValid() { + return src.Type().Zero().Interface() + } + dst := src.New() + mergeOptions{}.mergeMessage(dst, src) + return dst.Interface() +} + +// mergeOptions provides a namespace for merge functions, and can be +// exported in the future if we add user-visible merge options. +type mergeOptions struct{} + +func (o mergeOptions) mergeMessage(dst, src protoreflect.Message) { + methods := protoMethods(dst) + if methods != nil && methods.Merge != nil { + in := protoiface.MergeInput{ + Destination: dst, + Source: src, + } + out := methods.Merge(in) + if out.Flags&protoiface.MergeComplete != 0 { + return + } + } + + if !dst.IsValid() { + panic("cannot merge into invalid destination message") + } + + src.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + case fd.IsList(): + o.mergeList(dst.Mutable(fd).List(), v.List(), fd) + case fd.IsMap(): + o.mergeMap(dst.Mutable(fd).Map(), v.Map(), fd.MapValue()) + case fd.Message() != nil: + o.mergeMessage(dst.Mutable(fd).Message(), v.Message()) + case fd.Kind() == protoreflect.BytesKind: + dst.Set(fd, o.cloneBytes(v)) + default: + dst.Set(fd, v) + } + return true + }) + + if len(src.GetUnknown()) > 0 { + dst.SetUnknown(append(dst.GetUnknown(), src.GetUnknown()...)) + } +} + +func (o mergeOptions) mergeList(dst, src protoreflect.List, fd protoreflect.FieldDescriptor) { + // Merge semantics appends to the end of the existing list. + for i, n := 0, src.Len(); i < n; i++ { + switch v := src.Get(i); { + case fd.Message() != nil: + dstv := dst.NewElement() + o.mergeMessage(dstv.Message(), v.Message()) + dst.Append(dstv) + case fd.Kind() == protoreflect.BytesKind: + dst.Append(o.cloneBytes(v)) + default: + dst.Append(v) + } + } +} + +func (o mergeOptions) mergeMap(dst, src protoreflect.Map, fd protoreflect.FieldDescriptor) { + // Merge semantics replaces, rather than merges into existing entries. + src.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool { + switch { + case fd.Message() != nil: + dstv := dst.NewValue() + o.mergeMessage(dstv.Message(), v.Message()) + dst.Set(k, dstv) + case fd.Kind() == protoreflect.BytesKind: + dst.Set(k, o.cloneBytes(v)) + default: + dst.Set(k, v) + } + return true + }) +} + +func (o mergeOptions) cloneBytes(v protoreflect.Value) protoreflect.Value { + return protoreflect.ValueOfBytes(append([]byte{}, v.Bytes()...)) +} diff --git a/vendor/google.golang.org/protobuf/proto/messageset.go b/vendor/google.golang.org/protobuf/proto/messageset.go new file mode 100644 index 00000000..b6b3de59 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/messageset.go @@ -0,0 +1,88 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +func sizeMessageSet(m protoreflect.Message) (size int) { + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + size += messageset.SizeField(fd.Number()) + size += protowire.SizeTag(messageset.FieldMessage) + size += protowire.SizeBytes(sizeMessage(v.Message())) + return true + }) + size += messageset.SizeUnknown(m.GetUnknown()) + return size +} + +func marshalMessageSet(b []byte, m protoreflect.Message, o MarshalOptions) ([]byte, error) { + if !flags.ProtoLegacy { + return b, errors.New("no support for message_set_wire_format") + } + var err error + o.rangeFields(m, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + b, err = marshalMessageSetField(b, fd, v, o) + return err == nil + }) + if err != nil { + return b, err + } + return messageset.AppendUnknown(b, m.GetUnknown()) +} + +func marshalMessageSetField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value, o MarshalOptions) ([]byte, error) { + b = messageset.AppendFieldStart(b, fd.Number()) + b = protowire.AppendTag(b, messageset.FieldMessage, protowire.BytesType) + b = protowire.AppendVarint(b, uint64(o.Size(value.Message().Interface()))) + b, err := o.marshalMessage(b, value.Message()) + if err != nil { + return b, err + } + b = messageset.AppendFieldEnd(b) + return b, nil +} + +func unmarshalMessageSet(b []byte, m protoreflect.Message, o UnmarshalOptions) error { + if !flags.ProtoLegacy { + return errors.New("no support for message_set_wire_format") + } + return messageset.Unmarshal(b, false, func(num protowire.Number, v []byte) error { + err := unmarshalMessageSetField(m, num, v, o) + if err == errUnknown { + unknown := m.GetUnknown() + unknown = protowire.AppendTag(unknown, num, protowire.BytesType) + unknown = protowire.AppendBytes(unknown, v) + m.SetUnknown(unknown) + return nil + } + return err + }) +} + +func unmarshalMessageSetField(m protoreflect.Message, num protowire.Number, v []byte, o UnmarshalOptions) error { + md := m.Descriptor() + if !md.ExtensionRanges().Has(num) { + return errUnknown + } + xt, err := o.Resolver.FindExtensionByNumber(md.FullName(), num) + if err == protoregistry.NotFound { + return errUnknown + } + if err != nil { + return errors.New("%v: unable to resolve extension %v: %v", md.FullName(), num, err) + } + xd := xt.TypeDescriptor() + if err := o.unmarshalMessage(v, m.Mutable(xd).Message()); err != nil { + return err + } + return nil +} diff --git a/vendor/google.golang.org/protobuf/proto/proto.go b/vendor/google.golang.org/protobuf/proto/proto.go new file mode 100644 index 00000000..ca14b09c --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/proto.go @@ -0,0 +1,34 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Message is the top-level interface that all messages must implement. +// It provides access to a reflective view of a message. +// Any implementation of this interface may be used with all functions in the +// protobuf module that accept a Message, except where otherwise specified. +// +// This is the v2 interface definition for protobuf messages. +// The v1 interface definition is "github.com/golang/protobuf/proto".Message. +// +// To convert a v1 message to a v2 message, +// use "github.com/golang/protobuf/proto".MessageV2. +// To convert a v2 message to a v1 message, +// use "github.com/golang/protobuf/proto".MessageV1. +type Message = protoreflect.ProtoMessage + +// Error matches all errors produced by packages in the protobuf module. +// +// That is, errors.Is(err, Error) reports whether an error is produced +// by this module. +var Error error + +func init() { + Error = errors.Error +} diff --git a/vendor/google.golang.org/protobuf/proto/proto_methods.go b/vendor/google.golang.org/protobuf/proto/proto_methods.go new file mode 100644 index 00000000..d8dd604f --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/proto_methods.go @@ -0,0 +1,19 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The protoreflect build tag disables use of fast-path methods. +// +build !protoreflect + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +const hasProtoMethods = true + +func protoMethods(m protoreflect.Message) *protoiface.Methods { + return m.ProtoMethods() +} diff --git a/vendor/google.golang.org/protobuf/proto/proto_reflect.go b/vendor/google.golang.org/protobuf/proto/proto_reflect.go new file mode 100644 index 00000000..b103d432 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/proto_reflect.go @@ -0,0 +1,19 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The protoreflect build tag disables use of fast-path methods. +// +build protoreflect + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +const hasProtoMethods = false + +func protoMethods(m protoreflect.Message) *protoiface.Methods { + return nil +} diff --git a/vendor/google.golang.org/protobuf/proto/reset.go b/vendor/google.golang.org/protobuf/proto/reset.go new file mode 100644 index 00000000..22048bc1 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/reset.go @@ -0,0 +1,39 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import "google.golang.org/protobuf/reflect/protoreflect" + +// Reset clears every field in the message. +// The resulting message shares no observable memory with its previous state +// other than the memory for the message itself. +func Reset(m Message) { + if mr, ok := m.(interface{ Reset() }); ok && hasProtoMethods { + mr.Reset() + return + } + resetMessage(m.ProtoReflect()) +} + +func resetMessage(m protoreflect.Message) { + if !m.IsValid() { + panic("cannot reset invalid message") + } + + // Clear all known fields. + fds := m.Descriptor().Fields() + for i := 0; i < fds.Len(); i++ { + m.Clear(fds.Get(i)) + } + + // Clear extension fields. + m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { + m.Clear(fd) + return true + }) + + // Clear unknown fields. + m.SetUnknown(nil) +} diff --git a/vendor/google.golang.org/protobuf/proto/size.go b/vendor/google.golang.org/protobuf/proto/size.go new file mode 100644 index 00000000..a4e72bd9 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/size.go @@ -0,0 +1,89 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Size returns the size in bytes of the wire-format encoding of m. +func Size(m Message) int { + return MarshalOptions{}.Size(m) +} + +// Size returns the size in bytes of the wire-format encoding of m. +func (o MarshalOptions) Size(m Message) int { + return sizeMessage(m.ProtoReflect()) +} + +func sizeMessage(m protoreflect.Message) (size int) { + methods := protoMethods(m) + if methods != nil && methods.Size != nil { + out := methods.Size(protoiface.SizeInput{ + Message: m, + }) + return out.Size + } + if methods != nil && methods.Marshal != nil { + // This is not efficient, but we don't have any choice. + // This case is mainly used for legacy types with a Marshal method. + out, _ := methods.Marshal(protoiface.MarshalInput{ + Message: m, + }) + return len(out.Buf) + } + return sizeMessageSlow(m) +} + +func sizeMessageSlow(m protoreflect.Message) (size int) { + if messageset.IsMessageSet(m.Descriptor()) { + return sizeMessageSet(m) + } + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + size += sizeField(fd, v) + return true + }) + size += len(m.GetUnknown()) + return size +} + +func sizeField(fd protoreflect.FieldDescriptor, value protoreflect.Value) (size int) { + num := fd.Number() + switch { + case fd.IsList(): + return sizeList(num, fd, value.List()) + case fd.IsMap(): + return sizeMap(num, fd, value.Map()) + default: + return protowire.SizeTag(num) + sizeSingular(num, fd.Kind(), value) + } +} + +func sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) { + if fd.IsPacked() && list.Len() > 0 { + content := 0 + for i, llen := 0, list.Len(); i < llen; i++ { + content += sizeSingular(num, fd.Kind(), list.Get(i)) + } + return protowire.SizeTag(num) + protowire.SizeBytes(content) + } + + for i, llen := 0, list.Len(); i < llen; i++ { + size += protowire.SizeTag(num) + sizeSingular(num, fd.Kind(), list.Get(i)) + } + return size +} + +func sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) { + mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool { + size += protowire.SizeTag(num) + size += protowire.SizeBytes(sizeField(fd.MapKey(), key.Value()) + sizeField(fd.MapValue(), value)) + return true + }) + return size +} diff --git a/vendor/google.golang.org/protobuf/proto/size_gen.go b/vendor/google.golang.org/protobuf/proto/size_gen.go new file mode 100644 index 00000000..1118460f --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/size_gen.go @@ -0,0 +1,55 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func sizeSingular(num protowire.Number, kind protoreflect.Kind, v protoreflect.Value) int { + switch kind { + case protoreflect.BoolKind: + return protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + case protoreflect.EnumKind: + return protowire.SizeVarint(uint64(v.Enum())) + case protoreflect.Int32Kind: + return protowire.SizeVarint(uint64(int32(v.Int()))) + case protoreflect.Sint32Kind: + return protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + case protoreflect.Uint32Kind: + return protowire.SizeVarint(uint64(uint32(v.Uint()))) + case protoreflect.Int64Kind: + return protowire.SizeVarint(uint64(v.Int())) + case protoreflect.Sint64Kind: + return protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + case protoreflect.Uint64Kind: + return protowire.SizeVarint(v.Uint()) + case protoreflect.Sfixed32Kind: + return protowire.SizeFixed32() + case protoreflect.Fixed32Kind: + return protowire.SizeFixed32() + case protoreflect.FloatKind: + return protowire.SizeFixed32() + case protoreflect.Sfixed64Kind: + return protowire.SizeFixed64() + case protoreflect.Fixed64Kind: + return protowire.SizeFixed64() + case protoreflect.DoubleKind: + return protowire.SizeFixed64() + case protoreflect.StringKind: + return protowire.SizeBytes(len(v.String())) + case protoreflect.BytesKind: + return protowire.SizeBytes(len(v.Bytes())) + case protoreflect.MessageKind: + return protowire.SizeBytes(sizeMessage(v.Message())) + case protoreflect.GroupKind: + return protowire.SizeGroup(num, sizeMessage(v.Message())) + default: + return 0 + } +} diff --git a/vendor/google.golang.org/protobuf/proto/wrappers.go b/vendor/google.golang.org/protobuf/proto/wrappers.go new file mode 100644 index 00000000..653b12c3 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/wrappers.go @@ -0,0 +1,29 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +// Bool stores v in a new bool value and returns a pointer to it. +func Bool(v bool) *bool { return &v } + +// Int32 stores v in a new int32 value and returns a pointer to it. +func Int32(v int32) *int32 { return &v } + +// Int64 stores v in a new int64 value and returns a pointer to it. +func Int64(v int64) *int64 { return &v } + +// Float32 stores v in a new float32 value and returns a pointer to it. +func Float32(v float32) *float32 { return &v } + +// Float64 stores v in a new float64 value and returns a pointer to it. +func Float64(v float64) *float64 { return &v } + +// Uint32 stores v in a new uint32 value and returns a pointer to it. +func Uint32(v uint32) *uint32 { return &v } + +// Uint64 stores v in a new uint64 value and returns a pointer to it. +func Uint64(v uint64) *uint64 { return &v } + +// String stores v in a new string value and returns a pointer to it. +func String(v string) *string { return &v } diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go new file mode 100644 index 00000000..6be5d16e --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go @@ -0,0 +1,77 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "google.golang.org/protobuf/internal/pragma" +) + +// The following types are used by the fast-path Message.ProtoMethods method. +// +// To avoid polluting the public protoreflect API with types used only by +// low-level implementations, the canonical definitions of these types are +// in the runtime/protoiface package. The definitions here and in protoiface +// must be kept in sync. +type ( + methods = struct { + pragma.NoUnkeyedLiterals + Flags supportFlags + Size func(sizeInput) sizeOutput + Marshal func(marshalInput) (marshalOutput, error) + Unmarshal func(unmarshalInput) (unmarshalOutput, error) + Merge func(mergeInput) mergeOutput + CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error) + } + supportFlags = uint64 + sizeInput = struct { + pragma.NoUnkeyedLiterals + Message Message + Flags uint8 + } + sizeOutput = struct { + pragma.NoUnkeyedLiterals + Size int + } + marshalInput = struct { + pragma.NoUnkeyedLiterals + Message Message + Buf []byte + Flags uint8 + } + marshalOutput = struct { + pragma.NoUnkeyedLiterals + Buf []byte + } + unmarshalInput = struct { + pragma.NoUnkeyedLiterals + Message Message + Buf []byte + Flags uint8 + Resolver interface { + FindExtensionByName(field FullName) (ExtensionType, error) + FindExtensionByNumber(message FullName, field FieldNumber) (ExtensionType, error) + } + } + unmarshalOutput = struct { + pragma.NoUnkeyedLiterals + Flags uint8 + } + mergeInput = struct { + pragma.NoUnkeyedLiterals + Source Message + Destination Message + } + mergeOutput = struct { + pragma.NoUnkeyedLiterals + Flags uint8 + } + checkInitializedInput = struct { + pragma.NoUnkeyedLiterals + Message Message + } + checkInitializedOutput = struct { + pragma.NoUnkeyedLiterals + } +) diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go new file mode 100644 index 00000000..1b89beda --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go @@ -0,0 +1,477 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoreflect provides interfaces to dynamically manipulate messages. +// +// This package includes type descriptors which describe the structure of types +// defined in proto source files and value interfaces which provide the +// ability to examine and manipulate the contents of messages. +// +// +// Protocol Buffer Descriptors +// +// Protobuf descriptors (e.g., EnumDescriptor or MessageDescriptor) +// are immutable objects that represent protobuf type information. +// They are wrappers around the messages declared in descriptor.proto. +// Protobuf descriptors alone lack any information regarding Go types. +// +// Enums and messages generated by this module implement Enum and ProtoMessage, +// where the Descriptor and ProtoReflect.Descriptor accessors respectively +// return the protobuf descriptor for the values. +// +// The protobuf descriptor interfaces are not meant to be implemented by +// user code since they might need to be extended in the future to support +// additions to the protobuf language. Protobuf descriptors can be constructed +// using the "google.golang.org/protobuf/reflect/protodesc" package. +// +// +// Go Type Descriptors +// +// A type descriptor (e.g., EnumType or MessageType) is a constructor for +// a concrete Go type that represents the associated protobuf descriptor. +// There is commonly a one-to-one relationship between protobuf descriptors and +// Go type descriptors, but it can potentially be a one-to-many relationship. +// +// Enums and messages generated by this module implement Enum and ProtoMessage, +// where the Type and ProtoReflect.Type accessors respectively +// return the protobuf descriptor for the values. +// +// The "google.golang.org/protobuf/types/dynamicpb" package can be used to +// create Go type descriptors from protobuf descriptors. +// +// +// Value Interfaces +// +// The Enum and Message interfaces provide a reflective view over an +// enum or message instance. For enums, it provides the ability to retrieve +// the enum value number for any concrete enum type. For messages, it provides +// the ability to access or manipulate fields of the message. +// +// To convert a proto.Message to a protoreflect.Message, use the +// former's ProtoReflect method. Since the ProtoReflect method is new to the +// v2 message interface, it may not be present on older message implementations. +// The "github.com/golang/protobuf/proto".MessageReflect function can be used +// to obtain a reflective view on older messages. +// +// +// Relationships +// +// The following diagrams demonstrate the relationships between +// various types declared in this package. +// +// +// ┌───────────────────────────────────┐ +// V │ +// ┌────────────── New(n) ─────────────┐ │ +// │ │ │ +// │ ┌──── Descriptor() ──┐ │ ┌── Number() ──┐ │ +// │ │ V V │ V │ +// ╔════════════╗ ╔════════════════╗ ╔════════╗ ╔════════════╗ +// ║ EnumType ║ ║ EnumDescriptor ║ ║ Enum ║ ║ EnumNumber ║ +// ╚════════════╝ ╚════════════════╝ ╚════════╝ ╚════════════╝ +// Λ Λ │ │ +// │ └─── Descriptor() ──┘ │ +// │ │ +// └────────────────── Type() ───────┘ +// +// • An EnumType describes a concrete Go enum type. +// It has an EnumDescriptor and can construct an Enum instance. +// +// • An EnumDescriptor describes an abstract protobuf enum type. +// +// • An Enum is a concrete enum instance. Generated enums implement Enum. +// +// +// ┌──────────────── New() ─────────────────┐ +// │ │ +// │ ┌─── Descriptor() ─────┐ │ ┌── Interface() ───┐ +// │ │ V V │ V +// ╔═════════════╗ ╔═══════════════════╗ ╔═════════╗ ╔══════════════╗ +// ║ MessageType ║ ║ MessageDescriptor ║ ║ Message ║ ║ ProtoMessage ║ +// ╚═════════════╝ ╚═══════════════════╝ ╚═════════╝ ╚══════════════╝ +// Λ Λ │ │ Λ │ +// │ └──── Descriptor() ────┘ │ └─ ProtoReflect() ─┘ +// │ │ +// └─────────────────── Type() ─────────┘ +// +// • A MessageType describes a concrete Go message type. +// It has a MessageDescriptor and can construct a Message instance. +// +// • A MessageDescriptor describes an abstract protobuf message type. +// +// • A Message is a concrete message instance. Generated messages implement +// ProtoMessage, which can convert to/from a Message. +// +// +// ┌── TypeDescriptor() ──┐ ┌───── Descriptor() ─────┐ +// │ V │ V +// ╔═══════════════╗ ╔═════════════════════════╗ ╔═════════════════════╗ +// ║ ExtensionType ║ ║ ExtensionTypeDescriptor ║ ║ ExtensionDescriptor ║ +// ╚═══════════════╝ ╚═════════════════════════╝ ╚═════════════════════╝ +// Λ │ │ Λ │ Λ +// └─────── Type() ───────┘ │ └─── may implement ────┘ │ +// │ │ +// └────── implements ────────┘ +// +// • An ExtensionType describes a concrete Go implementation of an extension. +// It has an ExtensionTypeDescriptor and can convert to/from +// abstract Values and Go values. +// +// • An ExtensionTypeDescriptor is an ExtensionDescriptor +// which also has an ExtensionType. +// +// • An ExtensionDescriptor describes an abstract protobuf extension field and +// may not always be an ExtensionTypeDescriptor. +package protoreflect + +import ( + "fmt" + "regexp" + "strings" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/pragma" +) + +type doNotImplement pragma.DoNotImplement + +// ProtoMessage is the top-level interface that all proto messages implement. +// This is declared in the protoreflect package to avoid a cyclic dependency; +// use the proto.Message type instead, which aliases this type. +type ProtoMessage interface{ ProtoReflect() Message } + +// Syntax is the language version of the proto file. +type Syntax syntax + +type syntax int8 // keep exact type opaque as the int type may change + +const ( + Proto2 Syntax = 2 + Proto3 Syntax = 3 +) + +// IsValid reports whether the syntax is valid. +func (s Syntax) IsValid() bool { + switch s { + case Proto2, Proto3: + return true + default: + return false + } +} + +// String returns s as a proto source identifier (e.g., "proto2"). +func (s Syntax) String() string { + switch s { + case Proto2: + return "proto2" + case Proto3: + return "proto3" + default: + return fmt.Sprintf("", s) + } +} + +// GoString returns s as a Go source identifier (e.g., "Proto2"). +func (s Syntax) GoString() string { + switch s { + case Proto2: + return "Proto2" + case Proto3: + return "Proto3" + default: + return fmt.Sprintf("Syntax(%d)", s) + } +} + +// Cardinality determines whether a field is optional, required, or repeated. +type Cardinality cardinality + +type cardinality int8 // keep exact type opaque as the int type may change + +// Constants as defined by the google.protobuf.Cardinality enumeration. +const ( + Optional Cardinality = 1 // appears zero or one times + Required Cardinality = 2 // appears exactly one time; invalid with Proto3 + Repeated Cardinality = 3 // appears zero or more times +) + +// IsValid reports whether the cardinality is valid. +func (c Cardinality) IsValid() bool { + switch c { + case Optional, Required, Repeated: + return true + default: + return false + } +} + +// String returns c as a proto source identifier (e.g., "optional"). +func (c Cardinality) String() string { + switch c { + case Optional: + return "optional" + case Required: + return "required" + case Repeated: + return "repeated" + default: + return fmt.Sprintf("", c) + } +} + +// GoString returns c as a Go source identifier (e.g., "Optional"). +func (c Cardinality) GoString() string { + switch c { + case Optional: + return "Optional" + case Required: + return "Required" + case Repeated: + return "Repeated" + default: + return fmt.Sprintf("Cardinality(%d)", c) + } +} + +// Kind indicates the basic proto kind of a field. +type Kind kind + +type kind int8 // keep exact type opaque as the int type may change + +// Constants as defined by the google.protobuf.Field.Kind enumeration. +const ( + BoolKind Kind = 8 + EnumKind Kind = 14 + Int32Kind Kind = 5 + Sint32Kind Kind = 17 + Uint32Kind Kind = 13 + Int64Kind Kind = 3 + Sint64Kind Kind = 18 + Uint64Kind Kind = 4 + Sfixed32Kind Kind = 15 + Fixed32Kind Kind = 7 + FloatKind Kind = 2 + Sfixed64Kind Kind = 16 + Fixed64Kind Kind = 6 + DoubleKind Kind = 1 + StringKind Kind = 9 + BytesKind Kind = 12 + MessageKind Kind = 11 + GroupKind Kind = 10 +) + +// IsValid reports whether the kind is valid. +func (k Kind) IsValid() bool { + switch k { + case BoolKind, EnumKind, + Int32Kind, Sint32Kind, Uint32Kind, + Int64Kind, Sint64Kind, Uint64Kind, + Sfixed32Kind, Fixed32Kind, FloatKind, + Sfixed64Kind, Fixed64Kind, DoubleKind, + StringKind, BytesKind, MessageKind, GroupKind: + return true + default: + return false + } +} + +// String returns k as a proto source identifier (e.g., "bool"). +func (k Kind) String() string { + switch k { + case BoolKind: + return "bool" + case EnumKind: + return "enum" + case Int32Kind: + return "int32" + case Sint32Kind: + return "sint32" + case Uint32Kind: + return "uint32" + case Int64Kind: + return "int64" + case Sint64Kind: + return "sint64" + case Uint64Kind: + return "uint64" + case Sfixed32Kind: + return "sfixed32" + case Fixed32Kind: + return "fixed32" + case FloatKind: + return "float" + case Sfixed64Kind: + return "sfixed64" + case Fixed64Kind: + return "fixed64" + case DoubleKind: + return "double" + case StringKind: + return "string" + case BytesKind: + return "bytes" + case MessageKind: + return "message" + case GroupKind: + return "group" + default: + return fmt.Sprintf("", k) + } +} + +// GoString returns k as a Go source identifier (e.g., "BoolKind"). +func (k Kind) GoString() string { + switch k { + case BoolKind: + return "BoolKind" + case EnumKind: + return "EnumKind" + case Int32Kind: + return "Int32Kind" + case Sint32Kind: + return "Sint32Kind" + case Uint32Kind: + return "Uint32Kind" + case Int64Kind: + return "Int64Kind" + case Sint64Kind: + return "Sint64Kind" + case Uint64Kind: + return "Uint64Kind" + case Sfixed32Kind: + return "Sfixed32Kind" + case Fixed32Kind: + return "Fixed32Kind" + case FloatKind: + return "FloatKind" + case Sfixed64Kind: + return "Sfixed64Kind" + case Fixed64Kind: + return "Fixed64Kind" + case DoubleKind: + return "DoubleKind" + case StringKind: + return "StringKind" + case BytesKind: + return "BytesKind" + case MessageKind: + return "MessageKind" + case GroupKind: + return "GroupKind" + default: + return fmt.Sprintf("Kind(%d)", k) + } +} + +// FieldNumber is the field number in a message. +type FieldNumber = protowire.Number + +// FieldNumbers represent a list of field numbers. +type FieldNumbers interface { + // Len reports the number of fields in the list. + Len() int + // Get returns the ith field number. It panics if out of bounds. + Get(i int) FieldNumber + // Has reports whether n is within the list of fields. + Has(n FieldNumber) bool + + doNotImplement +} + +// FieldRanges represent a list of field number ranges. +type FieldRanges interface { + // Len reports the number of ranges in the list. + Len() int + // Get returns the ith range. It panics if out of bounds. + Get(i int) [2]FieldNumber // start inclusive; end exclusive + // Has reports whether n is within any of the ranges. + Has(n FieldNumber) bool + + doNotImplement +} + +// EnumNumber is the numeric value for an enum. +type EnumNumber int32 + +// EnumRanges represent a list of enum number ranges. +type EnumRanges interface { + // Len reports the number of ranges in the list. + Len() int + // Get returns the ith range. It panics if out of bounds. + Get(i int) [2]EnumNumber // start inclusive; end inclusive + // Has reports whether n is within any of the ranges. + Has(n EnumNumber) bool + + doNotImplement +} + +var ( + regexName = regexp.MustCompile(`^[_a-zA-Z][_a-zA-Z0-9]*$`) + regexFullName = regexp.MustCompile(`^[_a-zA-Z][_a-zA-Z0-9]*(\.[_a-zA-Z][_a-zA-Z0-9]*)*$`) +) + +// Name is the short name for a proto declaration. This is not the name +// as used in Go source code, which might not be identical to the proto name. +type Name string // e.g., "Kind" + +// IsValid reports whether n is a syntactically valid name. +// An empty name is invalid. +func (n Name) IsValid() bool { + return regexName.MatchString(string(n)) +} + +// Names represent a list of names. +type Names interface { + // Len reports the number of names in the list. + Len() int + // Get returns the ith name. It panics if out of bounds. + Get(i int) Name + // Has reports whether s matches any names in the list. + Has(s Name) bool + + doNotImplement +} + +// FullName is a qualified name that uniquely identifies a proto declaration. +// A qualified name is the concatenation of the proto package along with the +// fully-declared name (i.e., name of parent preceding the name of the child), +// with a '.' delimiter placed between each Name. +// +// This should not have any leading or trailing dots. +type FullName string // e.g., "google.protobuf.Field.Kind" + +// IsValid reports whether n is a syntactically valid full name. +// An empty full name is invalid. +func (n FullName) IsValid() bool { + return regexFullName.MatchString(string(n)) +} + +// Name returns the short name, which is the last identifier segment. +// A single segment FullName is the Name itself. +func (n FullName) Name() Name { + if i := strings.LastIndexByte(string(n), '.'); i >= 0 { + return Name(n[i+1:]) + } + return Name(n) +} + +// Parent returns the full name with the trailing identifier removed. +// A single segment FullName has no parent. +func (n FullName) Parent() FullName { + if i := strings.LastIndexByte(string(n), '.'); i >= 0 { + return n[:i] + } + return "" +} + +// Append returns the qualified name appended with the provided short name. +// +// Invariant: n == n.Parent().Append(n.Name()) // assuming n is valid +func (n FullName) Append(s Name) FullName { + if n == "" { + return FullName(s) + } + return n + "." + FullName(s) +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go new file mode 100644 index 00000000..32ea3d98 --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go @@ -0,0 +1,52 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +// SourceLocations is a list of source locations. +type SourceLocations interface { + // Len reports the number of source locations in the proto file. + Len() int + // Get returns the ith SourceLocation. It panics if out of bounds. + Get(int) SourceLocation + + doNotImplement + + // TODO: Add ByPath and ByDescriptor helper methods. +} + +// SourceLocation describes a source location and +// corresponds with the google.protobuf.SourceCodeInfo.Location message. +type SourceLocation struct { + // Path is the path to the declaration from the root file descriptor. + // The contents of this slice must not be mutated. + Path SourcePath + + // StartLine and StartColumn are the zero-indexed starting location + // in the source file for the declaration. + StartLine, StartColumn int + // EndLine and EndColumn are the zero-indexed ending location + // in the source file for the declaration. + // In the descriptor.proto, the end line may be omitted if it is identical + // to the start line. Here, it is always populated. + EndLine, EndColumn int + + // LeadingDetachedComments are the leading detached comments + // for the declaration. The contents of this slice must not be mutated. + LeadingDetachedComments []string + // LeadingComments is the leading attached comment for the declaration. + LeadingComments string + // TrailingComments is the trailing attached comment for the declaration. + TrailingComments string +} + +// SourcePath identifies part of a file descriptor for a source location. +// The SourcePath is a sequence of either field numbers or indexes into +// a repeated field that form a path starting from the root file descriptor. +// +// See google.protobuf.SourceCodeInfo.Location.path. +type SourcePath []int32 + +// TODO: Add SourcePath.String method to pretty-print the path. For example: +// ".message_type[6].nested_type[15].field[3]" diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go new file mode 100644 index 00000000..41d560e7 --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go @@ -0,0 +1,618 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +// Descriptor provides a set of accessors that are common to every descriptor. +// Each descriptor type wraps the equivalent google.protobuf.XXXDescriptorProto, +// but provides efficient lookup and immutability. +// +// Each descriptor is comparable. Equality implies that the two types are +// exactly identical. However, it is possible for the same semantically +// identical proto type to be represented by multiple type descriptors. +// +// For example, suppose we have t1 and t2 which are both MessageDescriptors. +// If t1 == t2, then the types are definitely equal and all accessors return +// the same information. However, if t1 != t2, then it is still possible that +// they still represent the same proto type (e.g., t1.FullName == t2.FullName). +// This can occur if a descriptor type is created dynamically, or multiple +// versions of the same proto type are accidentally linked into the Go binary. +type Descriptor interface { + // ParentFile returns the parent file descriptor that this descriptor + // is declared within. The parent file for the file descriptor is itself. + // + // Support for this functionality is optional and may return nil. + ParentFile() FileDescriptor + + // Parent returns the parent containing this descriptor declaration. + // The following shows the mapping from child type to possible parent types: + // + // ╔═════════════════════╤═══════════════════════════════════╗ + // ║ Child type │ Possible parent types ║ + // ╠═════════════════════╪═══════════════════════════════════╣ + // ║ FileDescriptor │ nil ║ + // ║ MessageDescriptor │ FileDescriptor, MessageDescriptor ║ + // ║ FieldDescriptor │ FileDescriptor, MessageDescriptor ║ + // ║ OneofDescriptor │ MessageDescriptor ║ + // ║ EnumDescriptor │ FileDescriptor, MessageDescriptor ║ + // ║ EnumValueDescriptor │ EnumDescriptor ║ + // ║ ServiceDescriptor │ FileDescriptor ║ + // ║ MethodDescriptor │ ServiceDescriptor ║ + // ╚═════════════════════╧═══════════════════════════════════╝ + // + // Support for this functionality is optional and may return nil. + Parent() Descriptor + + // Index returns the index of this descriptor within its parent. + // It returns 0 if the descriptor does not have a parent or if the parent + // is unknown. + Index() int + + // Syntax is the protobuf syntax. + Syntax() Syntax // e.g., Proto2 or Proto3 + + // Name is the short name of the declaration (i.e., FullName.Name). + Name() Name // e.g., "Any" + + // FullName is the fully-qualified name of the declaration. + // + // The FullName is a concatenation of the full name of the type that this + // type is declared within and the declaration name. For example, + // field "foo_field" in message "proto.package.MyMessage" is + // uniquely identified as "proto.package.MyMessage.foo_field". + // Enum values are an exception to the rule (see EnumValueDescriptor). + FullName() FullName // e.g., "google.protobuf.Any" + + // IsPlaceholder reports whether type information is missing since a + // dependency is not resolved, in which case only name information is known. + // + // Placeholder types may only be returned by the following accessors + // as a result of unresolved dependencies or weak imports: + // + // ╔═══════════════════════════════════╤═════════════════════╗ + // ║ Accessor │ Descriptor ║ + // ╠═══════════════════════════════════╪═════════════════════╣ + // ║ FileImports.FileDescriptor │ FileDescriptor ║ + // ║ FieldDescriptor.Enum │ EnumDescriptor ║ + // ║ FieldDescriptor.Message │ MessageDescriptor ║ + // ║ FieldDescriptor.DefaultEnumValue │ EnumValueDescriptor ║ + // ║ FieldDescriptor.ContainingMessage │ MessageDescriptor ║ + // ║ MethodDescriptor.Input │ MessageDescriptor ║ + // ║ MethodDescriptor.Output │ MessageDescriptor ║ + // ╚═══════════════════════════════════╧═════════════════════╝ + // + // If true, only Name and FullName are valid. + // For FileDescriptor, the Path is also valid. + IsPlaceholder() bool + + // Options returns the descriptor options. The caller must not modify + // the returned value. + // + // To avoid a dependency cycle, this function returns a proto.Message value. + // The proto message type returned for each descriptor type is as follows: + // ╔═════════════════════╤══════════════════════════════════════════╗ + // ║ Go type │ Protobuf message type ║ + // ╠═════════════════════╪══════════════════════════════════════════╣ + // ║ FileDescriptor │ google.protobuf.FileOptions ║ + // ║ EnumDescriptor │ google.protobuf.EnumOptions ║ + // ║ EnumValueDescriptor │ google.protobuf.EnumValueOptions ║ + // ║ MessageDescriptor │ google.protobuf.MessageOptions ║ + // ║ FieldDescriptor │ google.protobuf.FieldOptions ║ + // ║ OneofDescriptor │ google.protobuf.OneofOptions ║ + // ║ ServiceDescriptor │ google.protobuf.ServiceOptions ║ + // ║ MethodDescriptor │ google.protobuf.MethodOptions ║ + // ╚═════════════════════╧══════════════════════════════════════════╝ + // + // This method returns a typed nil-pointer if no options are present. + // The caller must import the descriptorpb package to use this. + Options() ProtoMessage + + doNotImplement +} + +// FileDescriptor describes the types in a complete proto file and +// corresponds with the google.protobuf.FileDescriptorProto message. +// +// Top-level declarations: +// EnumDescriptor, MessageDescriptor, FieldDescriptor, and/or ServiceDescriptor. +type FileDescriptor interface { + Descriptor // Descriptor.FullName is identical to Package + + // Path returns the file name, relative to the source tree root. + Path() string // e.g., "path/to/file.proto" + // Package returns the protobuf package namespace. + Package() FullName // e.g., "google.protobuf" + + // Imports is a list of imported proto files. + Imports() FileImports + + // Enums is a list of the top-level enum declarations. + Enums() EnumDescriptors + // Messages is a list of the top-level message declarations. + Messages() MessageDescriptors + // Extensions is a list of the top-level extension declarations. + Extensions() ExtensionDescriptors + // Services is a list of the top-level service declarations. + Services() ServiceDescriptors + + // SourceLocations is a list of source locations. + SourceLocations() SourceLocations + + isFileDescriptor +} +type isFileDescriptor interface{ ProtoType(FileDescriptor) } + +// FileImports is a list of file imports. +type FileImports interface { + // Len reports the number of files imported by this proto file. + Len() int + // Get returns the ith FileImport. It panics if out of bounds. + Get(i int) FileImport + + doNotImplement +} + +// FileImport is the declaration for a proto file import. +type FileImport struct { + // FileDescriptor is the file type for the given import. + // It is a placeholder descriptor if IsWeak is set or if a dependency has + // not been regenerated to implement the new reflection APIs. + FileDescriptor + + // IsPublic reports whether this is a public import, which causes this file + // to alias declarations within the imported file. The intended use cases + // for this feature is the ability to move proto files without breaking + // existing dependencies. + // + // The current file and the imported file must be within proto package. + IsPublic bool + + // IsWeak reports whether this is a weak import, which does not impose + // a direct dependency on the target file. + // + // Weak imports are a legacy proto1 feature. Equivalent behavior is + // achieved using proto2 extension fields or proto3 Any messages. + IsWeak bool +} + +// MessageDescriptor describes a message and +// corresponds with the google.protobuf.DescriptorProto message. +// +// Nested declarations: +// FieldDescriptor, OneofDescriptor, FieldDescriptor, EnumDescriptor, +// and/or MessageDescriptor. +type MessageDescriptor interface { + Descriptor + + // IsMapEntry indicates that this is an auto-generated message type to + // represent the entry type for a map field. + // + // Map entry messages have only two fields: + // • a "key" field with a field number of 1 + // • a "value" field with a field number of 2 + // The key and value types are determined by these two fields. + // + // If IsMapEntry is true, it implies that FieldDescriptor.IsMap is true + // for some field with this message type. + IsMapEntry() bool + + // Fields is a list of nested field declarations. + Fields() FieldDescriptors + // Oneofs is a list of nested oneof declarations. + Oneofs() OneofDescriptors + + // ReservedNames is a list of reserved field names. + ReservedNames() Names + // ReservedRanges is a list of reserved ranges of field numbers. + ReservedRanges() FieldRanges + // RequiredNumbers is a list of required field numbers. + // In Proto3, it is always an empty list. + RequiredNumbers() FieldNumbers + // ExtensionRanges is the field ranges used for extension fields. + // In Proto3, it is always an empty ranges. + ExtensionRanges() FieldRanges + // ExtensionRangeOptions returns the ith extension range options. + // + // To avoid a dependency cycle, this method returns a proto.Message value, + // which always contains a google.protobuf.ExtensionRangeOptions message. + // This method returns a typed nil-pointer if no options are present. + // The caller must import the descriptorpb package to use this. + ExtensionRangeOptions(i int) ProtoMessage + + // Enums is a list of nested enum declarations. + Enums() EnumDescriptors + // Messages is a list of nested message declarations. + Messages() MessageDescriptors + // Extensions is a list of nested extension declarations. + Extensions() ExtensionDescriptors + + isMessageDescriptor +} +type isMessageDescriptor interface{ ProtoType(MessageDescriptor) } + +// MessageType encapsulates a MessageDescriptor with a concrete Go implementation. +type MessageType interface { + // New returns a newly allocated empty message. + New() Message + + // Zero returns an empty, read-only message. + Zero() Message + + // Descriptor returns the message descriptor. + // + // Invariant: t.Descriptor() == t.New().Descriptor() + Descriptor() MessageDescriptor +} + +// MessageDescriptors is a list of message declarations. +type MessageDescriptors interface { + // Len reports the number of messages. + Len() int + // Get returns the ith MessageDescriptor. It panics if out of bounds. + Get(i int) MessageDescriptor + // ByName returns the MessageDescriptor for a message named s. + // It returns nil if not found. + ByName(s Name) MessageDescriptor + + doNotImplement +} + +// FieldDescriptor describes a field within a message and +// corresponds with the google.protobuf.FieldDescriptorProto message. +// +// It is used for both normal fields defined within the parent message +// (e.g., MessageDescriptor.Fields) and fields that extend some remote message +// (e.g., FileDescriptor.Extensions or MessageDescriptor.Extensions). +type FieldDescriptor interface { + Descriptor + + // Number reports the unique number for this field. + Number() FieldNumber + // Cardinality reports the cardinality for this field. + Cardinality() Cardinality + // Kind reports the basic kind for this field. + Kind() Kind + + // HasJSONName reports whether this field has an explicitly set JSON name. + HasJSONName() bool + + // JSONName reports the name used for JSON serialization. + // It is usually the camel-cased form of the field name. + JSONName() string + + // IsExtension reports whether this is an extension field. If false, + // then Parent and ContainingMessage refer to the same message. + // Otherwise, ContainingMessage and Parent likely differ. + IsExtension() bool + + // IsWeak reports whether this is a weak field, which does not impose a + // direct dependency on the target type. + // If true, then Message returns a placeholder type. + IsWeak() bool + + // IsPacked reports whether repeated primitive numeric kinds should be + // serialized using a packed encoding. + // If true, then it implies Cardinality is Repeated. + IsPacked() bool + + // IsList reports whether this field represents a list, + // where the value type for the associated field is a List. + // It is equivalent to checking whether Cardinality is Repeated and + // that IsMap reports false. + IsList() bool + + // IsMap reports whether this field represents a map, + // where the value type for the associated field is a Map. + // It is equivalent to checking whether Cardinality is Repeated, + // that the Kind is MessageKind, and that Message.IsMapEntry reports true. + IsMap() bool + + // MapKey returns the field descriptor for the key in the map entry. + // It returns nil if IsMap reports false. + MapKey() FieldDescriptor + + // MapValue returns the field descriptor for the value in the map entry. + // It returns nil if IsMap reports false. + MapValue() FieldDescriptor + + // HasDefault reports whether this field has a default value. + HasDefault() bool + + // Default returns the default value for scalar fields. + // For proto2, it is the default value as specified in the proto file, + // or the zero value if unspecified. + // For proto3, it is always the zero value of the scalar. + // The Value type is determined by the Kind. + Default() Value + + // DefaultEnumValue returns the enum value descriptor for the default value + // of an enum field, and is nil for any other kind of field. + DefaultEnumValue() EnumValueDescriptor + + // ContainingOneof is the containing oneof that this field belongs to, + // and is nil if this field is not part of a oneof. + ContainingOneof() OneofDescriptor + + // ContainingMessage is the containing message that this field belongs to. + // For extension fields, this may not necessarily be the parent message + // that the field is declared within. + ContainingMessage() MessageDescriptor + + // Enum is the enum descriptor if Kind is EnumKind. + // It returns nil for any other Kind. + Enum() EnumDescriptor + + // Message is the message descriptor if Kind is + // MessageKind or GroupKind. It returns nil for any other Kind. + Message() MessageDescriptor + + isFieldDescriptor +} +type isFieldDescriptor interface{ ProtoType(FieldDescriptor) } + +// FieldDescriptors is a list of field declarations. +type FieldDescriptors interface { + // Len reports the number of fields. + Len() int + // Get returns the ith FieldDescriptor. It panics if out of bounds. + Get(i int) FieldDescriptor + // ByName returns the FieldDescriptor for a field named s. + // It returns nil if not found. + ByName(s Name) FieldDescriptor + // ByJSONName returns the FieldDescriptor for a field with s as the JSON name. + // It returns nil if not found. + ByJSONName(s string) FieldDescriptor + // ByNumber returns the FieldDescriptor for a field numbered n. + // It returns nil if not found. + ByNumber(n FieldNumber) FieldDescriptor + + doNotImplement +} + +// OneofDescriptor describes a oneof field set within a given message and +// corresponds with the google.protobuf.OneofDescriptorProto message. +type OneofDescriptor interface { + Descriptor + + // Fields is a list of fields belonging to this oneof. + Fields() FieldDescriptors + + isOneofDescriptor +} +type isOneofDescriptor interface{ ProtoType(OneofDescriptor) } + +// OneofDescriptors is a list of oneof declarations. +type OneofDescriptors interface { + // Len reports the number of oneof fields. + Len() int + // Get returns the ith OneofDescriptor. It panics if out of bounds. + Get(i int) OneofDescriptor + // ByName returns the OneofDescriptor for a oneof named s. + // It returns nil if not found. + ByName(s Name) OneofDescriptor + + doNotImplement +} + +// ExtensionDescriptor is an alias of FieldDescriptor for documentation. +type ExtensionDescriptor = FieldDescriptor + +// ExtensionTypeDescriptor is an ExtensionDescriptor with an associated ExtensionType. +type ExtensionTypeDescriptor interface { + ExtensionDescriptor + + // Type returns the associated ExtensionType. + Type() ExtensionType + + // Descriptor returns the plain ExtensionDescriptor without the + // associated ExtensionType. + Descriptor() ExtensionDescriptor +} + +// ExtensionDescriptors is a list of field declarations. +type ExtensionDescriptors interface { + // Len reports the number of fields. + Len() int + // Get returns the ith ExtensionDescriptor. It panics if out of bounds. + Get(i int) ExtensionDescriptor + // ByName returns the ExtensionDescriptor for a field named s. + // It returns nil if not found. + ByName(s Name) ExtensionDescriptor + + doNotImplement +} + +// ExtensionType encapsulates an ExtensionDescriptor with a concrete +// Go implementation. The nested field descriptor must be for a extension field. +// +// While a normal field is a member of the parent message that it is declared +// within (see Descriptor.Parent), an extension field is a member of some other +// target message (see ExtensionDescriptor.Extendee) and may have no +// relationship with the parent. However, the full name of an extension field is +// relative to the parent that it is declared within. +// +// For example: +// syntax = "proto2"; +// package example; +// message FooMessage { +// extensions 100 to max; +// } +// message BarMessage { +// extends FooMessage { optional BarMessage bar_field = 100; } +// } +// +// Field "bar_field" is an extension of FooMessage, but its full name is +// "example.BarMessage.bar_field" instead of "example.FooMessage.bar_field". +type ExtensionType interface { + // New returns a new value for the field. + // For scalars, this returns the default value in native Go form. + New() Value + + // Zero returns a new value for the field. + // For scalars, this returns the default value in native Go form. + // For composite types, this returns an empty, read-only message, list, or map. + Zero() Value + + // TypeDescriptor returns the extension type descriptor. + TypeDescriptor() ExtensionTypeDescriptor + + // ValueOf wraps the input and returns it as a Value. + // ValueOf panics if the input value is invalid or not the appropriate type. + // + // ValueOf is more extensive than protoreflect.ValueOf for a given field's + // value as it has more type information available. + ValueOf(interface{}) Value + + // InterfaceOf completely unwraps the Value to the underlying Go type. + // InterfaceOf panics if the input is nil or does not represent the + // appropriate underlying Go type. For composite types, it panics if the + // value is not mutable. + // + // InterfaceOf is able to unwrap the Value further than Value.Interface + // as it has more type information available. + InterfaceOf(Value) interface{} + + // IsValidValue reports whether the Value is valid to assign to the field. + IsValidValue(Value) bool + + // IsValidInterface reports whether the input is valid to assign to the field. + IsValidInterface(interface{}) bool +} + +// EnumDescriptor describes an enum and +// corresponds with the google.protobuf.EnumDescriptorProto message. +// +// Nested declarations: +// EnumValueDescriptor. +type EnumDescriptor interface { + Descriptor + + // Values is a list of nested enum value declarations. + Values() EnumValueDescriptors + + // ReservedNames is a list of reserved enum names. + ReservedNames() Names + // ReservedRanges is a list of reserved ranges of enum numbers. + ReservedRanges() EnumRanges + + isEnumDescriptor +} +type isEnumDescriptor interface{ ProtoType(EnumDescriptor) } + +// EnumType encapsulates an EnumDescriptor with a concrete Go implementation. +type EnumType interface { + // New returns an instance of this enum type with its value set to n. + New(n EnumNumber) Enum + + // Descriptor returns the enum descriptor. + // + // Invariant: t.Descriptor() == t.New(0).Descriptor() + Descriptor() EnumDescriptor +} + +// EnumDescriptors is a list of enum declarations. +type EnumDescriptors interface { + // Len reports the number of enum types. + Len() int + // Get returns the ith EnumDescriptor. It panics if out of bounds. + Get(i int) EnumDescriptor + // ByName returns the EnumDescriptor for an enum named s. + // It returns nil if not found. + ByName(s Name) EnumDescriptor + + doNotImplement +} + +// EnumValueDescriptor describes an enum value and +// corresponds with the google.protobuf.EnumValueDescriptorProto message. +// +// All other proto declarations are in the namespace of the parent. +// However, enum values do not follow this rule and are within the namespace +// of the parent's parent (i.e., they are a sibling of the containing enum). +// Thus, a value named "FOO_VALUE" declared within an enum uniquely identified +// as "proto.package.MyEnum" has a full name of "proto.package.FOO_VALUE". +type EnumValueDescriptor interface { + Descriptor + + // Number returns the enum value as an integer. + Number() EnumNumber + + isEnumValueDescriptor +} +type isEnumValueDescriptor interface{ ProtoType(EnumValueDescriptor) } + +// EnumValueDescriptors is a list of enum value declarations. +type EnumValueDescriptors interface { + // Len reports the number of enum values. + Len() int + // Get returns the ith EnumValueDescriptor. It panics if out of bounds. + Get(i int) EnumValueDescriptor + // ByName returns the EnumValueDescriptor for the enum value named s. + // It returns nil if not found. + ByName(s Name) EnumValueDescriptor + // ByNumber returns the EnumValueDescriptor for the enum value numbered n. + // If multiple have the same number, the first one defined is returned + // It returns nil if not found. + ByNumber(n EnumNumber) EnumValueDescriptor + + doNotImplement +} + +// ServiceDescriptor describes a service and +// corresponds with the google.protobuf.ServiceDescriptorProto message. +// +// Nested declarations: MethodDescriptor. +type ServiceDescriptor interface { + Descriptor + + // Methods is a list of nested message declarations. + Methods() MethodDescriptors + + isServiceDescriptor +} +type isServiceDescriptor interface{ ProtoType(ServiceDescriptor) } + +// ServiceDescriptors is a list of service declarations. +type ServiceDescriptors interface { + // Len reports the number of services. + Len() int + // Get returns the ith ServiceDescriptor. It panics if out of bounds. + Get(i int) ServiceDescriptor + // ByName returns the ServiceDescriptor for a service named s. + // It returns nil if not found. + ByName(s Name) ServiceDescriptor + + doNotImplement +} + +// MethodDescriptor describes a method and +// corresponds with the google.protobuf.MethodDescriptorProto message. +type MethodDescriptor interface { + Descriptor + + // Input is the input message descriptor. + Input() MessageDescriptor + // Output is the output message descriptor. + Output() MessageDescriptor + // IsStreamingClient reports whether the client streams multiple messages. + IsStreamingClient() bool + // IsStreamingServer reports whether the server streams multiple messages. + IsStreamingServer() bool + + isMethodDescriptor +} +type isMethodDescriptor interface{ ProtoType(MethodDescriptor) } + +// MethodDescriptors is a list of method declarations. +type MethodDescriptors interface { + // Len reports the number of methods. + Len() int + // Get returns the ith MethodDescriptor. It panics if out of bounds. + Get(i int) MethodDescriptor + // ByName returns the MethodDescriptor for a service method named s. + // It returns nil if not found. + ByName(s Name) MethodDescriptor + + doNotImplement +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go new file mode 100644 index 00000000..a352ed9e --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go @@ -0,0 +1,285 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import "google.golang.org/protobuf/encoding/protowire" + +// Enum is a reflection interface for a concrete enum value, +// which provides type information and a getter for the enum number. +// Enum does not provide a mutable API since enums are commonly backed by +// Go constants, which are not addressable. +type Enum interface { + // Descriptor returns enum descriptor, which contains only the protobuf + // type information for the enum. + Descriptor() EnumDescriptor + + // Type returns the enum type, which encapsulates both Go and protobuf + // type information. If the Go type information is not needed, + // it is recommended that the enum descriptor be used instead. + Type() EnumType + + // Number returns the enum value as an integer. + Number() EnumNumber +} + +// Message is a reflective interface for a concrete message value, +// encapsulating both type and value information for the message. +// +// Accessor/mutators for individual fields are keyed by FieldDescriptor. +// For non-extension fields, the descriptor must exactly match the +// field known by the parent message. +// For extension fields, the descriptor must implement ExtensionTypeDescriptor, +// extend the parent message (i.e., have the same message FullName), and +// be within the parent's extension range. +// +// Each field Value can be a scalar or a composite type (Message, List, or Map). +// See Value for the Go types associated with a FieldDescriptor. +// Providing a Value that is invalid or of an incorrect type panics. +type Message interface { + // Descriptor returns message descriptor, which contains only the protobuf + // type information for the message. + Descriptor() MessageDescriptor + + // Type returns the message type, which encapsulates both Go and protobuf + // type information. If the Go type information is not needed, + // it is recommended that the message descriptor be used instead. + Type() MessageType + + // New returns a newly allocated and mutable empty message. + New() Message + + // Interface unwraps the message reflection interface and + // returns the underlying ProtoMessage interface. + Interface() ProtoMessage + + // Range iterates over every populated field in an undefined order, + // calling f for each field descriptor and value encountered. + // Range returns immediately if f returns false. + // While iterating, mutating operations may only be performed + // on the current field descriptor. + Range(f func(FieldDescriptor, Value) bool) + + // Has reports whether a field is populated. + // + // Some fields have the property of nullability where it is possible to + // distinguish between the default value of a field and whether the field + // was explicitly populated with the default value. Singular message fields, + // member fields of a oneof, and proto2 scalar fields are nullable. Such + // fields are populated only if explicitly set. + // + // In other cases (aside from the nullable cases above), + // a proto3 scalar field is populated if it contains a non-zero value, and + // a repeated field is populated if it is non-empty. + Has(FieldDescriptor) bool + + // Clear clears the field such that a subsequent Has call reports false. + // + // Clearing an extension field clears both the extension type and value + // associated with the given field number. + // + // Clear is a mutating operation and unsafe for concurrent use. + Clear(FieldDescriptor) + + // Get retrieves the value for a field. + // + // For unpopulated scalars, it returns the default value, where + // the default value of a bytes scalar is guaranteed to be a copy. + // For unpopulated composite types, it returns an empty, read-only view + // of the value; to obtain a mutable reference, use Mutable. + Get(FieldDescriptor) Value + + // Set stores the value for a field. + // + // For a field belonging to a oneof, it implicitly clears any other field + // that may be currently set within the same oneof. + // For extension fields, it implicitly stores the provided ExtensionType. + // When setting a composite type, it is unspecified whether the stored value + // aliases the source's memory in any way. If the composite value is an + // empty, read-only value, then it panics. + // + // Set is a mutating operation and unsafe for concurrent use. + Set(FieldDescriptor, Value) + + // Mutable returns a mutable reference to a composite type. + // + // If the field is unpopulated, it may allocate a composite value. + // For a field belonging to a oneof, it implicitly clears any other field + // that may be currently set within the same oneof. + // For extension fields, it implicitly stores the provided ExtensionType + // if not already stored. + // It panics if the field does not contain a composite type. + // + // Mutable is a mutating operation and unsafe for concurrent use. + Mutable(FieldDescriptor) Value + + // NewField returns a new value for assignable to the field of a given descriptor. + // For scalars, this returns the default value. + // For lists, maps, and messages, this returns a new, empty, mutable value. + NewField(FieldDescriptor) Value + + // WhichOneof reports which field within the oneof is populated, + // returning nil if none are populated. + // It panics if the oneof descriptor does not belong to this message. + WhichOneof(OneofDescriptor) FieldDescriptor + + // GetUnknown retrieves the entire list of unknown fields. + // The caller may only mutate the contents of the RawFields + // if the mutated bytes are stored back into the message with SetUnknown. + GetUnknown() RawFields + + // SetUnknown stores an entire list of unknown fields. + // The raw fields must be syntactically valid according to the wire format. + // An implementation may panic if this is not the case. + // Once stored, the caller must not mutate the content of the RawFields. + // An empty RawFields may be passed to clear the fields. + // + // SetUnknown is a mutating operation and unsafe for concurrent use. + SetUnknown(RawFields) + + // IsValid reports whether the message is valid. + // + // An invalid message is an empty, read-only value. + // + // An invalid message often corresponds to a nil pointer of the concrete + // message type, but the details are implementation dependent. + // Validity is not part of the protobuf data model, and may not + // be preserved in marshaling or other operations. + IsValid() bool + + // ProtoMethods returns optional fast-path implementions of various operations. + // This method may return nil. + // + // The returned methods type is identical to + // "google.golang.org/protobuf/runtime/protoiface".Methods. + // Consult the protoiface package documentation for details. + ProtoMethods() *methods +} + +// RawFields is the raw bytes for an ordered sequence of fields. +// Each field contains both the tag (representing field number and wire type), +// and also the wire data itself. +type RawFields []byte + +// IsValid reports whether b is syntactically correct wire format. +func (b RawFields) IsValid() bool { + for len(b) > 0 { + _, _, n := protowire.ConsumeField(b) + if n < 0 { + return false + } + b = b[n:] + } + return true +} + +// List is a zero-indexed, ordered list. +// The element Value type is determined by FieldDescriptor.Kind. +// Providing a Value that is invalid or of an incorrect type panics. +type List interface { + // Len reports the number of entries in the List. + // Get, Set, and Truncate panic with out of bound indexes. + Len() int + + // Get retrieves the value at the given index. + // It never returns an invalid value. + Get(int) Value + + // Set stores a value for the given index. + // When setting a composite type, it is unspecified whether the set + // value aliases the source's memory in any way. + // + // Set is a mutating operation and unsafe for concurrent use. + Set(int, Value) + + // Append appends the provided value to the end of the list. + // When appending a composite type, it is unspecified whether the appended + // value aliases the source's memory in any way. + // + // Append is a mutating operation and unsafe for concurrent use. + Append(Value) + + // AppendMutable appends a new, empty, mutable message value to the end + // of the list and returns it. + // It panics if the list does not contain a message type. + AppendMutable() Value + + // Truncate truncates the list to a smaller length. + // + // Truncate is a mutating operation and unsafe for concurrent use. + Truncate(int) + + // NewElement returns a new value for a list element. + // For enums, this returns the first enum value. + // For other scalars, this returns the zero value. + // For messages, this returns a new, empty, mutable value. + NewElement() Value + + // IsValid reports whether the list is valid. + // + // An invalid list is an empty, read-only value. + // + // Validity is not part of the protobuf data model, and may not + // be preserved in marshaling or other operations. + IsValid() bool +} + +// Map is an unordered, associative map. +// The entry MapKey type is determined by FieldDescriptor.MapKey.Kind. +// The entry Value type is determined by FieldDescriptor.MapValue.Kind. +// Providing a MapKey or Value that is invalid or of an incorrect type panics. +type Map interface { + // Len reports the number of elements in the map. + Len() int + + // Range iterates over every map entry in an undefined order, + // calling f for each key and value encountered. + // Range calls f Len times unless f returns false, which stops iteration. + // While iterating, mutating operations may only be performed + // on the current map key. + Range(f func(MapKey, Value) bool) + + // Has reports whether an entry with the given key is in the map. + Has(MapKey) bool + + // Clear clears the entry associated with they given key. + // The operation does nothing if there is no entry associated with the key. + // + // Clear is a mutating operation and unsafe for concurrent use. + Clear(MapKey) + + // Get retrieves the value for an entry with the given key. + // It returns an invalid value for non-existent entries. + Get(MapKey) Value + + // Set stores the value for an entry with the given key. + // It panics when given a key or value that is invalid or the wrong type. + // When setting a composite type, it is unspecified whether the set + // value aliases the source's memory in any way. + // + // Set is a mutating operation and unsafe for concurrent use. + Set(MapKey, Value) + + // Mutable retrieves a mutable reference to the entry for the given key. + // If no entry exists for the key, it creates a new, empty, mutable value + // and stores it as the entry for the key. + // It panics if the map value is not a message. + Mutable(MapKey) Value + + // NewValue returns a new value assignable as a map value. + // For enums, this returns the first enum value. + // For other scalars, this returns the zero value. + // For messages, this returns a new, empty, mutable value. + NewValue() Value + + // IsValid reports whether the map is valid. + // + // An invalid map is an empty, read-only value. + // + // An invalid message often corresponds to a nil Go map value, + // but the details are implementation dependent. + // Validity is not part of the protobuf data model, and may not + // be preserved in marshaling or other operations. + IsValid() bool +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go new file mode 100644 index 00000000..918e685e --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go @@ -0,0 +1,59 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build purego appengine + +package protoreflect + +import "google.golang.org/protobuf/internal/pragma" + +type valueType int + +const ( + nilType valueType = iota + boolType + int32Type + int64Type + uint32Type + uint64Type + float32Type + float64Type + stringType + bytesType + enumType + ifaceType +) + +// value is a union where only one type can be represented at a time. +// This uses a distinct field for each type. This is type safe in Go, but +// occupies more memory than necessary (72B). +type value struct { + pragma.DoNotCompare // 0B + + typ valueType // 8B + num uint64 // 8B + str string // 16B + bin []byte // 24B + iface interface{} // 16B +} + +func valueOfString(v string) Value { + return Value{typ: stringType, str: v} +} +func valueOfBytes(v []byte) Value { + return Value{typ: bytesType, bin: v} +} +func valueOfIface(v interface{}) Value { + return Value{typ: ifaceType, iface: v} +} + +func (v Value) getString() string { + return v.str +} +func (v Value) getBytes() []byte { + return v.bin +} +func (v Value) getIface() interface{} { + return v.iface +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go new file mode 100644 index 00000000..d695a4d6 --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go @@ -0,0 +1,367 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "fmt" + "math" + "reflect" +) + +// Value is a union where only one Go type may be set at a time. +// The Value is used to represent all possible values a field may take. +// The following shows which Go type is used to represent each proto Kind: +// +// ╔════════════╤═════════════════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠════════════╪═════════════════════════════════════╣ +// ║ bool │ BoolKind ║ +// ║ int32 │ Int32Kind, Sint32Kind, Sfixed32Kind ║ +// ║ int64 │ Int64Kind, Sint64Kind, Sfixed64Kind ║ +// ║ uint32 │ Uint32Kind, Fixed32Kind ║ +// ║ uint64 │ Uint64Kind, Fixed64Kind ║ +// ║ float32 │ FloatKind ║ +// ║ float64 │ DoubleKind ║ +// ║ string │ StringKind ║ +// ║ []byte │ BytesKind ║ +// ║ EnumNumber │ EnumKind ║ +// ║ Message │ MessageKind, GroupKind ║ +// ╚════════════╧═════════════════════════════════════╝ +// +// Multiple protobuf Kinds may be represented by a single Go type if the type +// can losslessly represent the information for the proto kind. For example, +// Int64Kind, Sint64Kind, and Sfixed64Kind are all represented by int64, +// but use different integer encoding methods. +// +// The List or Map types are used if the field cardinality is repeated. +// A field is a List if FieldDescriptor.IsList reports true. +// A field is a Map if FieldDescriptor.IsMap reports true. +// +// Converting to/from a Value and a concrete Go value panics on type mismatch. +// For example, ValueOf("hello").Int() panics because this attempts to +// retrieve an int64 from a string. +type Value value + +// The protoreflect API uses a custom Value union type instead of interface{} +// to keep the future open for performance optimizations. Using an interface{} +// always incurs an allocation for primitives (e.g., int64) since it needs to +// be boxed on the heap (as interfaces can only contain pointers natively). +// Instead, we represent the Value union as a flat struct that internally keeps +// track of which type is set. Using unsafe, the Value union can be reduced +// down to 24B, which is identical in size to a slice. +// +// The latest compiler (Go1.11) currently suffers from some limitations: +// • With inlining, the compiler should be able to statically prove that +// only one of these switch cases are taken and inline one specific case. +// See https://golang.org/issue/22310. + +// ValueOf returns a Value initialized with the concrete value stored in v. +// This panics if the type does not match one of the allowed types in the +// Value union. +func ValueOf(v interface{}) Value { + switch v := v.(type) { + case nil: + return Value{} + case bool: + return ValueOfBool(v) + case int32: + return ValueOfInt32(v) + case int64: + return ValueOfInt64(v) + case uint32: + return ValueOfUint32(v) + case uint64: + return ValueOfUint64(v) + case float32: + return ValueOfFloat32(v) + case float64: + return ValueOfFloat64(v) + case string: + return ValueOfString(v) + case []byte: + return ValueOfBytes(v) + case EnumNumber: + return ValueOfEnum(v) + case Message, List, Map: + return valueOfIface(v) + default: + panic(fmt.Sprintf("invalid type: %v", reflect.TypeOf(v))) + } +} + +// ValueOfBool returns a new boolean value. +func ValueOfBool(v bool) Value { + if v { + return Value{typ: boolType, num: 1} + } else { + return Value{typ: boolType, num: 0} + } +} + +// ValueOfInt32 returns a new int32 value. +func ValueOfInt32(v int32) Value { + return Value{typ: int32Type, num: uint64(v)} +} + +// ValueOfInt64 returns a new int64 value. +func ValueOfInt64(v int64) Value { + return Value{typ: int64Type, num: uint64(v)} +} + +// ValueOfUint32 returns a new uint32 value. +func ValueOfUint32(v uint32) Value { + return Value{typ: uint32Type, num: uint64(v)} +} + +// ValueOfUint64 returns a new uint64 value. +func ValueOfUint64(v uint64) Value { + return Value{typ: uint64Type, num: v} +} + +// ValueOfFloat32 returns a new float32 value. +func ValueOfFloat32(v float32) Value { + return Value{typ: float32Type, num: uint64(math.Float64bits(float64(v)))} +} + +// ValueOfFloat64 returns a new float64 value. +func ValueOfFloat64(v float64) Value { + return Value{typ: float64Type, num: uint64(math.Float64bits(float64(v)))} +} + +// ValueOfString returns a new string value. +func ValueOfString(v string) Value { + return valueOfString(v) +} + +// ValueOfBytes returns a new bytes value. +func ValueOfBytes(v []byte) Value { + return valueOfBytes(v[:len(v):len(v)]) +} + +// ValueOfEnum returns a new enum value. +func ValueOfEnum(v EnumNumber) Value { + return Value{typ: enumType, num: uint64(v)} +} + +// ValueOfMessage returns a new Message value. +func ValueOfMessage(v Message) Value { + return valueOfIface(v) +} + +// ValueOfList returns a new List value. +func ValueOfList(v List) Value { + return valueOfIface(v) +} + +// ValueOfMap returns a new Map value. +func ValueOfMap(v Map) Value { + return valueOfIface(v) +} + +// IsValid reports whether v is populated with a value. +func (v Value) IsValid() bool { + return v.typ != nilType +} + +// Interface returns v as an interface{}. +// +// Invariant: v == ValueOf(v).Interface() +func (v Value) Interface() interface{} { + switch v.typ { + case nilType: + return nil + case boolType: + return v.Bool() + case int32Type: + return int32(v.Int()) + case int64Type: + return int64(v.Int()) + case uint32Type: + return uint32(v.Uint()) + case uint64Type: + return uint64(v.Uint()) + case float32Type: + return float32(v.Float()) + case float64Type: + return float64(v.Float()) + case stringType: + return v.String() + case bytesType: + return v.Bytes() + case enumType: + return v.Enum() + default: + return v.getIface() + } +} + +// Bool returns v as a bool and panics if the type is not a bool. +func (v Value) Bool() bool { + switch v.typ { + case boolType: + return v.num > 0 + default: + panic("proto: value type mismatch") + } +} + +// Int returns v as a int64 and panics if the type is not a int32 or int64. +func (v Value) Int() int64 { + switch v.typ { + case int32Type, int64Type: + return int64(v.num) + default: + panic("proto: value type mismatch") + } +} + +// Uint returns v as a uint64 and panics if the type is not a uint32 or uint64. +func (v Value) Uint() uint64 { + switch v.typ { + case uint32Type, uint64Type: + return uint64(v.num) + default: + panic("proto: value type mismatch") + } +} + +// Float returns v as a float64 and panics if the type is not a float32 or float64. +func (v Value) Float() float64 { + switch v.typ { + case float32Type, float64Type: + return math.Float64frombits(uint64(v.num)) + default: + panic("proto: value type mismatch") + } +} + +// String returns v as a string. Since this method implements fmt.Stringer, +// this returns the formatted string value for any non-string type. +func (v Value) String() string { + switch v.typ { + case stringType: + return v.getString() + default: + return fmt.Sprint(v.Interface()) + } +} + +// Bytes returns v as a []byte and panics if the type is not a []byte. +func (v Value) Bytes() []byte { + switch v.typ { + case bytesType: + return v.getBytes() + default: + panic("proto: value type mismatch") + } +} + +// Enum returns v as a EnumNumber and panics if the type is not a EnumNumber. +func (v Value) Enum() EnumNumber { + switch v.typ { + case enumType: + return EnumNumber(v.num) + default: + panic("proto: value type mismatch") + } +} + +// Message returns v as a Message and panics if the type is not a Message. +func (v Value) Message() Message { + switch v := v.getIface().(type) { + case Message: + return v + default: + panic("proto: value type mismatch") + } +} + +// List returns v as a List and panics if the type is not a List. +func (v Value) List() List { + switch v := v.getIface().(type) { + case List: + return v + default: + panic("proto: value type mismatch") + } +} + +// Map returns v as a Map and panics if the type is not a Map. +func (v Value) Map() Map { + switch v := v.getIface().(type) { + case Map: + return v + default: + panic("proto: value type mismatch") + } +} + +// MapKey returns v as a MapKey and panics for invalid MapKey types. +func (v Value) MapKey() MapKey { + switch v.typ { + case boolType, int32Type, int64Type, uint32Type, uint64Type, stringType: + return MapKey(v) + } + panic("proto: invalid map key type") +} + +// MapKey is used to index maps, where the Go type of the MapKey must match +// the specified key Kind (see MessageDescriptor.IsMapEntry). +// The following shows what Go type is used to represent each proto Kind: +// +// ╔═════════╤═════════════════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠═════════╪═════════════════════════════════════╣ +// ║ bool │ BoolKind ║ +// ║ int32 │ Int32Kind, Sint32Kind, Sfixed32Kind ║ +// ║ int64 │ Int64Kind, Sint64Kind, Sfixed64Kind ║ +// ║ uint32 │ Uint32Kind, Fixed32Kind ║ +// ║ uint64 │ Uint64Kind, Fixed64Kind ║ +// ║ string │ StringKind ║ +// ╚═════════╧═════════════════════════════════════╝ +// +// A MapKey is constructed and accessed through a Value: +// k := ValueOf("hash").MapKey() // convert string to MapKey +// s := k.String() // convert MapKey to string +// +// The MapKey is a strict subset of valid types used in Value; +// converting a Value to a MapKey with an invalid type panics. +type MapKey value + +// IsValid reports whether k is populated with a value. +func (k MapKey) IsValid() bool { + return Value(k).IsValid() +} + +// Interface returns k as an interface{}. +func (k MapKey) Interface() interface{} { + return Value(k).Interface() +} + +// Bool returns k as a bool and panics if the type is not a bool. +func (k MapKey) Bool() bool { + return Value(k).Bool() +} + +// Int returns k as a int64 and panics if the type is not a int32 or int64. +func (k MapKey) Int() int64 { + return Value(k).Int() +} + +// Uint returns k as a uint64 and panics if the type is not a uint32 or uint64. +func (k MapKey) Uint() uint64 { + return Value(k).Uint() +} + +// String returns k as a string. Since this method implements fmt.Stringer, +// this returns the formatted string value for any non-string type. +func (k MapKey) String() string { + return Value(k).String() +} + +// Value returns k as a Value. +func (k MapKey) Value() Value { + return Value(k) +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go new file mode 100644 index 00000000..c45debdc --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go @@ -0,0 +1,98 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !purego,!appengine + +package protoreflect + +import ( + "unsafe" + + "google.golang.org/protobuf/internal/pragma" +) + +type ( + stringHeader struct { + Data unsafe.Pointer + Len int + } + sliceHeader struct { + Data unsafe.Pointer + Len int + Cap int + } + ifaceHeader struct { + Type unsafe.Pointer + Data unsafe.Pointer + } +) + +var ( + nilType = typeOf(nil) + boolType = typeOf(*new(bool)) + int32Type = typeOf(*new(int32)) + int64Type = typeOf(*new(int64)) + uint32Type = typeOf(*new(uint32)) + uint64Type = typeOf(*new(uint64)) + float32Type = typeOf(*new(float32)) + float64Type = typeOf(*new(float64)) + stringType = typeOf(*new(string)) + bytesType = typeOf(*new([]byte)) + enumType = typeOf(*new(EnumNumber)) +) + +// typeOf returns a pointer to the Go type information. +// The pointer is comparable and equal if and only if the types are identical. +func typeOf(t interface{}) unsafe.Pointer { + return (*ifaceHeader)(unsafe.Pointer(&t)).Type +} + +// value is a union where only one type can be represented at a time. +// The struct is 24B large on 64-bit systems and requires the minimum storage +// necessary to represent each possible type. +// +// The Go GC needs to be able to scan variables containing pointers. +// As such, pointers and non-pointers cannot be intermixed. +type value struct { + pragma.DoNotCompare // 0B + + // typ stores the type of the value as a pointer to the Go type. + typ unsafe.Pointer // 8B + + // ptr stores the data pointer for a String, Bytes, or interface value. + ptr unsafe.Pointer // 8B + + // num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or + // Enum value as a raw uint64. + // + // It is also used to store the length of a String or Bytes value; + // the capacity is ignored. + num uint64 // 8B +} + +func valueOfString(v string) Value { + p := (*stringHeader)(unsafe.Pointer(&v)) + return Value{typ: stringType, ptr: p.Data, num: uint64(len(v))} +} +func valueOfBytes(v []byte) Value { + p := (*sliceHeader)(unsafe.Pointer(&v)) + return Value{typ: bytesType, ptr: p.Data, num: uint64(len(v))} +} +func valueOfIface(v interface{}) Value { + p := (*ifaceHeader)(unsafe.Pointer(&v)) + return Value{typ: p.Type, ptr: p.Data} +} + +func (v Value) getString() (x string) { + *(*stringHeader)(unsafe.Pointer(&x)) = stringHeader{Data: v.ptr, Len: int(v.num)} + return x +} +func (v Value) getBytes() (x []byte) { + *(*sliceHeader)(unsafe.Pointer(&x)) = sliceHeader{Data: v.ptr, Len: int(v.num), Cap: int(v.num)} + return x +} +func (v Value) getIface() (x interface{}) { + *(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr} + return x +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go new file mode 100644 index 00000000..43f16c61 --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go @@ -0,0 +1,768 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoregistry provides data structures to register and lookup +// protobuf descriptor types. +// +// The Files registry contains file descriptors and provides the ability +// to iterate over the files or lookup a specific descriptor within the files. +// Files only contains protobuf descriptors and has no understanding of Go +// type information that may be associated with each descriptor. +// +// The Types registry contains descriptor types for which there is a known +// Go type associated with that descriptor. It provides the ability to iterate +// over the registered types or lookup a type by name. +package protoregistry + +import ( + "fmt" + "log" + "strings" + "sync" + + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// ignoreConflict reports whether to ignore a registration conflict +// given the descriptor being registered and the error. +// It is a variable so that the behavior is easily overridden in another file. +var ignoreConflict = func(d protoreflect.Descriptor, err error) bool { + log.Printf(""+ + "WARNING: %v\n"+ + "A future release will panic on registration conflicts. See:\n"+ + "https://developers.google.com/protocol-buffers/docs/reference/go/faq#namespace-conflict\n"+ + "\n", err) + return true +} + +var globalMutex sync.RWMutex + +// GlobalFiles is a global registry of file descriptors. +var GlobalFiles *Files = new(Files) + +// GlobalTypes is the registry used by default for type lookups +// unless a local registry is provided by the user. +var GlobalTypes *Types = new(Types) + +// NotFound is a sentinel error value to indicate that the type was not found. +// +// Since registry lookup can happen in the critical performance path, resolvers +// must return this exact error value, not an error wrapping it. +var NotFound = errors.New("not found") + +// Files is a registry for looking up or iterating over files and the +// descriptors contained within them. +// The Find and Range methods are safe for concurrent use. +type Files struct { + // The map of descsByName contains: + // EnumDescriptor + // EnumValueDescriptor + // MessageDescriptor + // ExtensionDescriptor + // ServiceDescriptor + // *packageDescriptor + // + // Note that files are stored as a slice, since a package may contain + // multiple files. Only top-level declarations are registered. + // Note that enum values are in the top-level since that are in the same + // scope as the parent enum. + descsByName map[protoreflect.FullName]interface{} + filesByPath map[string]protoreflect.FileDescriptor +} + +type packageDescriptor struct { + files []protoreflect.FileDescriptor +} + +// RegisterFile registers the provided file descriptor. +// +// If any descriptor within the file conflicts with the descriptor of any +// previously registered file (e.g., two enums with the same full name), +// then the file is not registered and an error is returned. +// +// It is permitted for multiple files to have the same file path. +func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error { + if r == GlobalFiles { + globalMutex.Lock() + defer globalMutex.Unlock() + } + if r.descsByName == nil { + r.descsByName = map[protoreflect.FullName]interface{}{ + "": &packageDescriptor{}, + } + r.filesByPath = make(map[string]protoreflect.FileDescriptor) + } + path := file.Path() + if prev := r.filesByPath[path]; prev != nil { + err := errors.New("file %q is already registered", file.Path()) + err = amendErrorWithCaller(err, prev, file) + if r == GlobalFiles && ignoreConflict(file, err) { + err = nil + } + return err + } + + for name := file.Package(); name != ""; name = name.Parent() { + switch prev := r.descsByName[name]; prev.(type) { + case nil, *packageDescriptor: + default: + err := errors.New("file %q has a package name conflict over %v", file.Path(), name) + err = amendErrorWithCaller(err, prev, file) + if r == GlobalFiles && ignoreConflict(file, err) { + err = nil + } + return err + } + } + var err error + var hasConflict bool + rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) { + if prev := r.descsByName[d.FullName()]; prev != nil { + hasConflict = true + err = errors.New("file %q has a name conflict over %v", file.Path(), d.FullName()) + err = amendErrorWithCaller(err, prev, file) + if r == GlobalFiles && ignoreConflict(d, err) { + err = nil + } + } + }) + if hasConflict { + return err + } + + for name := file.Package(); name != ""; name = name.Parent() { + if r.descsByName[name] == nil { + r.descsByName[name] = &packageDescriptor{} + } + } + p := r.descsByName[file.Package()].(*packageDescriptor) + p.files = append(p.files, file) + rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) { + r.descsByName[d.FullName()] = d + }) + r.filesByPath[path] = file + return nil +} + +// FindDescriptorByName looks up a descriptor by the full name. +// +// This returns (nil, NotFound) if not found. +func (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + prefix := name + suffix := nameSuffix("") + for prefix != "" { + if d, ok := r.descsByName[prefix]; ok { + switch d := d.(type) { + case protoreflect.EnumDescriptor: + if d.FullName() == name { + return d, nil + } + case protoreflect.EnumValueDescriptor: + if d.FullName() == name { + return d, nil + } + case protoreflect.MessageDescriptor: + if d.FullName() == name { + return d, nil + } + if d := findDescriptorInMessage(d, suffix); d != nil && d.FullName() == name { + return d, nil + } + case protoreflect.ExtensionDescriptor: + if d.FullName() == name { + return d, nil + } + case protoreflect.ServiceDescriptor: + if d.FullName() == name { + return d, nil + } + if d := d.Methods().ByName(suffix.Pop()); d != nil && d.FullName() == name { + return d, nil + } + } + return nil, NotFound + } + prefix = prefix.Parent() + suffix = nameSuffix(name[len(prefix)+len("."):]) + } + return nil, NotFound +} + +func findDescriptorInMessage(md protoreflect.MessageDescriptor, suffix nameSuffix) protoreflect.Descriptor { + name := suffix.Pop() + if suffix == "" { + if ed := md.Enums().ByName(name); ed != nil { + return ed + } + for i := md.Enums().Len() - 1; i >= 0; i-- { + if vd := md.Enums().Get(i).Values().ByName(name); vd != nil { + return vd + } + } + if xd := md.Extensions().ByName(name); xd != nil { + return xd + } + if fd := md.Fields().ByName(name); fd != nil { + return fd + } + if od := md.Oneofs().ByName(name); od != nil { + return od + } + } + if md := md.Messages().ByName(name); md != nil { + if suffix == "" { + return md + } + return findDescriptorInMessage(md, suffix) + } + return nil +} + +type nameSuffix string + +func (s *nameSuffix) Pop() (name protoreflect.Name) { + if i := strings.IndexByte(string(*s), '.'); i >= 0 { + name, *s = protoreflect.Name((*s)[:i]), (*s)[i+1:] + } else { + name, *s = protoreflect.Name((*s)), "" + } + return name +} + +// FindFileByPath looks up a file by the path. +// +// This returns (nil, NotFound) if not found. +func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if fd, ok := r.filesByPath[path]; ok { + return fd, nil + } + return nil, NotFound +} + +// NumFiles reports the number of registered files. +func (r *Files) NumFiles() int { + if r == nil { + return 0 + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return len(r.filesByPath) +} + +// RangeFiles iterates over all registered files while f returns true. +// The iteration order is undefined. +func (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool) { + if r == nil { + return + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, file := range r.filesByPath { + if !f(file) { + return + } + } +} + +// NumFilesByPackage reports the number of registered files in a proto package. +func (r *Files) NumFilesByPackage(name protoreflect.FullName) int { + if r == nil { + return 0 + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + p, ok := r.descsByName[name].(*packageDescriptor) + if !ok { + return 0 + } + return len(p.files) +} + +// RangeFilesByPackage iterates over all registered files in a given proto package +// while f returns true. The iteration order is undefined. +func (r *Files) RangeFilesByPackage(name protoreflect.FullName, f func(protoreflect.FileDescriptor) bool) { + if r == nil { + return + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + p, ok := r.descsByName[name].(*packageDescriptor) + if !ok { + return + } + for _, file := range p.files { + if !f(file) { + return + } + } +} + +// rangeTopLevelDescriptors iterates over all top-level descriptors in a file +// which will be directly entered into the registry. +func rangeTopLevelDescriptors(fd protoreflect.FileDescriptor, f func(protoreflect.Descriptor)) { + eds := fd.Enums() + for i := eds.Len() - 1; i >= 0; i-- { + f(eds.Get(i)) + vds := eds.Get(i).Values() + for i := vds.Len() - 1; i >= 0; i-- { + f(vds.Get(i)) + } + } + mds := fd.Messages() + for i := mds.Len() - 1; i >= 0; i-- { + f(mds.Get(i)) + } + xds := fd.Extensions() + for i := xds.Len() - 1; i >= 0; i-- { + f(xds.Get(i)) + } + sds := fd.Services() + for i := sds.Len() - 1; i >= 0; i-- { + f(sds.Get(i)) + } +} + +// MessageTypeResolver is an interface for looking up messages. +// +// A compliant implementation must deterministically return the same type +// if no error is encountered. +// +// The Types type implements this interface. +type MessageTypeResolver interface { + // FindMessageByName looks up a message by its full name. + // E.g., "google.protobuf.Any" + // + // This return (nil, NotFound) if not found. + FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) + + // FindMessageByURL looks up a message by a URL identifier. + // See documentation on google.protobuf.Any.type_url for the URL format. + // + // This returns (nil, NotFound) if not found. + FindMessageByURL(url string) (protoreflect.MessageType, error) +} + +// ExtensionTypeResolver is an interface for looking up extensions. +// +// A compliant implementation must deterministically return the same type +// if no error is encountered. +// +// The Types type implements this interface. +type ExtensionTypeResolver interface { + // FindExtensionByName looks up a extension field by the field's full name. + // Note that this is the full name of the field as determined by + // where the extension is declared and is unrelated to the full name of the + // message being extended. + // + // This returns (nil, NotFound) if not found. + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + + // FindExtensionByNumber looks up a extension field by the field number + // within some parent message, identified by full name. + // + // This returns (nil, NotFound) if not found. + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) +} + +var ( + _ MessageTypeResolver = (*Types)(nil) + _ ExtensionTypeResolver = (*Types)(nil) +) + +// Types is a registry for looking up or iterating over descriptor types. +// The Find and Range methods are safe for concurrent use. +type Types struct { + typesByName typesByName + extensionsByMessage extensionsByMessage + + numEnums int + numMessages int + numExtensions int +} + +type ( + typesByName map[protoreflect.FullName]interface{} + extensionsByMessage map[protoreflect.FullName]extensionsByNumber + extensionsByNumber map[protoreflect.FieldNumber]protoreflect.ExtensionType +) + +// RegisterMessage registers the provided message type. +// +// If a naming conflict occurs, the type is not registered and an error is returned. +func (r *Types) RegisterMessage(mt protoreflect.MessageType) error { + // Under rare circumstances getting the descriptor might recursively + // examine the registry, so fetch it before locking. + md := mt.Descriptor() + + if r == GlobalTypes { + globalMutex.Lock() + defer globalMutex.Unlock() + } + + if err := r.register("message", md, mt); err != nil { + return err + } + r.numMessages++ + return nil +} + +// RegisterEnum registers the provided enum type. +// +// If a naming conflict occurs, the type is not registered and an error is returned. +func (r *Types) RegisterEnum(et protoreflect.EnumType) error { + // Under rare circumstances getting the descriptor might recursively + // examine the registry, so fetch it before locking. + ed := et.Descriptor() + + if r == GlobalTypes { + globalMutex.Lock() + defer globalMutex.Unlock() + } + + if err := r.register("enum", ed, et); err != nil { + return err + } + r.numEnums++ + return nil +} + +// RegisterExtension registers the provided extension type. +// +// If a naming conflict occurs, the type is not registered and an error is returned. +func (r *Types) RegisterExtension(xt protoreflect.ExtensionType) error { + // Under rare circumstances getting the descriptor might recursively + // examine the registry, so fetch it before locking. + // + // A known case where this can happen: Fetching the TypeDescriptor for a + // legacy ExtensionDesc can consult the global registry. + xd := xt.TypeDescriptor() + + if r == GlobalTypes { + globalMutex.Lock() + defer globalMutex.Unlock() + } + + field := xd.Number() + message := xd.ContainingMessage().FullName() + if prev := r.extensionsByMessage[message][field]; prev != nil { + err := errors.New("extension number %d is already registered on message %v", field, message) + err = amendErrorWithCaller(err, prev, xt) + if !(r == GlobalTypes && ignoreConflict(xd, err)) { + return err + } + } + + if err := r.register("extension", xd, xt); err != nil { + return err + } + if r.extensionsByMessage == nil { + r.extensionsByMessage = make(extensionsByMessage) + } + if r.extensionsByMessage[message] == nil { + r.extensionsByMessage[message] = make(extensionsByNumber) + } + r.extensionsByMessage[message][field] = xt + r.numExtensions++ + return nil +} + +func (r *Types) register(kind string, desc protoreflect.Descriptor, typ interface{}) error { + name := desc.FullName() + prev := r.typesByName[name] + if prev != nil { + err := errors.New("%v %v is already registered", kind, name) + err = amendErrorWithCaller(err, prev, typ) + if !(r == GlobalTypes && ignoreConflict(desc, err)) { + return err + } + } + if r.typesByName == nil { + r.typesByName = make(typesByName) + } + r.typesByName[name] = typ + return nil +} + +// FindEnumByName looks up an enum by its full name. +// E.g., "google.protobuf.Field.Kind". +// +// This returns (nil, NotFound) if not found. +func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if v := r.typesByName[enum]; v != nil { + if et, _ := v.(protoreflect.EnumType); et != nil { + return et, nil + } + return nil, errors.New("found wrong type: got %v, want enum", typeName(v)) + } + return nil, NotFound +} + +// FindMessageByName looks up a message by its full name. +// E.g., "google.protobuf.Any" +// +// This return (nil, NotFound) if not found. +func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) { + // The full name by itself is a valid URL. + return r.FindMessageByURL(string(message)) +} + +// FindMessageByURL looks up a message by a URL identifier. +// See documentation on google.protobuf.Any.type_url for the URL format. +// +// This returns (nil, NotFound) if not found. +func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + message := protoreflect.FullName(url) + if i := strings.LastIndexByte(url, '/'); i >= 0 { + message = message[i+len("/"):] + } + + if v := r.typesByName[message]; v != nil { + if mt, _ := v.(protoreflect.MessageType); mt != nil { + return mt, nil + } + return nil, errors.New("found wrong type: got %v, want message", typeName(v)) + } + return nil, NotFound +} + +// FindExtensionByName looks up a extension field by the field's full name. +// Note that this is the full name of the field as determined by +// where the extension is declared and is unrelated to the full name of the +// message being extended. +// +// This returns (nil, NotFound) if not found. +func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if v := r.typesByName[field]; v != nil { + if xt, _ := v.(protoreflect.ExtensionType); xt != nil { + return xt, nil + } + return nil, errors.New("found wrong type: got %v, want extension", typeName(v)) + } + return nil, NotFound +} + +// FindExtensionByNumber looks up a extension field by the field number +// within some parent message, identified by full name. +// +// This returns (nil, NotFound) if not found. +func (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if xt, ok := r.extensionsByMessage[message][field]; ok { + return xt, nil + } + return nil, NotFound +} + +// NumEnums reports the number of registered enums. +func (r *Types) NumEnums() int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numEnums +} + +// RangeEnums iterates over all registered enums while f returns true. +// Iteration order is undefined. +func (r *Types) RangeEnums(f func(protoreflect.EnumType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, typ := range r.typesByName { + if et, ok := typ.(protoreflect.EnumType); ok { + if !f(et) { + return + } + } + } +} + +// NumMessages reports the number of registered messages. +func (r *Types) NumMessages() int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numMessages +} + +// RangeMessages iterates over all registered messages while f returns true. +// Iteration order is undefined. +func (r *Types) RangeMessages(f func(protoreflect.MessageType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, typ := range r.typesByName { + if mt, ok := typ.(protoreflect.MessageType); ok { + if !f(mt) { + return + } + } + } +} + +// NumExtensions reports the number of registered extensions. +func (r *Types) NumExtensions() int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numExtensions +} + +// RangeExtensions iterates over all registered extensions while f returns true. +// Iteration order is undefined. +func (r *Types) RangeExtensions(f func(protoreflect.ExtensionType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, typ := range r.typesByName { + if xt, ok := typ.(protoreflect.ExtensionType); ok { + if !f(xt) { + return + } + } + } +} + +// NumExtensionsByMessage reports the number of registered extensions for +// a given message type. +func (r *Types) NumExtensionsByMessage(message protoreflect.FullName) int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return len(r.extensionsByMessage[message]) +} + +// RangeExtensionsByMessage iterates over all registered extensions filtered +// by a given message type while f returns true. Iteration order is undefined. +func (r *Types) RangeExtensionsByMessage(message protoreflect.FullName, f func(protoreflect.ExtensionType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, xt := range r.extensionsByMessage[message] { + if !f(xt) { + return + } + } +} + +func typeName(t interface{}) string { + switch t.(type) { + case protoreflect.EnumType: + return "enum" + case protoreflect.MessageType: + return "message" + case protoreflect.ExtensionType: + return "extension" + default: + return fmt.Sprintf("%T", t) + } +} + +func amendErrorWithCaller(err error, prev, curr interface{}) error { + prevPkg := goPackage(prev) + currPkg := goPackage(curr) + if prevPkg == "" || currPkg == "" || prevPkg == currPkg { + return err + } + return errors.New("%s\n\tpreviously from: %q\n\tcurrently from: %q", err, prevPkg, currPkg) +} + +func goPackage(v interface{}) string { + switch d := v.(type) { + case protoreflect.EnumType: + v = d.Descriptor() + case protoreflect.MessageType: + v = d.Descriptor() + case protoreflect.ExtensionType: + v = d.TypeDescriptor() + } + if d, ok := v.(protoreflect.Descriptor); ok { + v = d.ParentFile() + } + if d, ok := v.(interface{ GoPackagePath() string }); ok { + return d.GoPackagePath() + } + return "" +} diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go b/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go new file mode 100644 index 00000000..c5872767 --- /dev/null +++ b/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go @@ -0,0 +1,15 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoiface + +type MessageV1 interface { + Reset() + String() string + ProtoMessage() +} + +type ExtensionRangeV1 struct { + Start, End int32 // both inclusive +} diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go new file mode 100644 index 00000000..32c04f67 --- /dev/null +++ b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go @@ -0,0 +1,167 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoiface contains types referenced or implemented by messages. +// +// WARNING: This package should only be imported by message implementations. +// The functionality found in this package should be accessed through +// higher-level abstractions provided by the proto package. +package protoiface + +import ( + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Methods is a set of optional fast-path implementations of various operations. +type Methods = struct { + pragma.NoUnkeyedLiterals + + // Flags indicate support for optional features. + Flags SupportFlags + + // Size returns the size in bytes of the wire-format encoding of a message. + // Marshal must be provided if a custom Size is provided. + Size func(SizeInput) SizeOutput + + // Marshal formats a message in the wire-format encoding to the provided buffer. + // Size should be provided if a custom Marshal is provided. + // It must not return an error for a partial message. + Marshal func(MarshalInput) (MarshalOutput, error) + + // Unmarshal parses the wire-format encoding and merges the result into a message. + // It must not reset the target message or return an error for a partial message. + Unmarshal func(UnmarshalInput) (UnmarshalOutput, error) + + // Merge merges the contents of a source message into a destination message. + Merge func(MergeInput) MergeOutput + + // CheckInitialized returns an error if any required fields in the message are not set. + CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error) +} + +// SupportFlags indicate support for optional features. +type SupportFlags = uint64 + +const ( + // SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported. + SupportMarshalDeterministic SupportFlags = 1 << iota + + // SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported. + SupportUnmarshalDiscardUnknown +) + +// SizeInput is input to the Size method. +type SizeInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message + Flags MarshalInputFlags +} + +// SizeOutput is output from the Size method. +type SizeOutput = struct { + pragma.NoUnkeyedLiterals + + Size int +} + +// MarshalInput is input to the Marshal method. +type MarshalInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message + Buf []byte // output is appended to this buffer + Flags MarshalInputFlags +} + +// MarshalOutput is output from the Marshal method. +type MarshalOutput = struct { + pragma.NoUnkeyedLiterals + + Buf []byte // contains marshaled message +} + +// MarshalInputFlags configure the marshaler. +// Most flags correspond to fields in proto.MarshalOptions. +type MarshalInputFlags = uint8 + +const ( + MarshalDeterministic MarshalInputFlags = 1 << iota + MarshalUseCachedSize +) + +// UnmarshalInput is input to the Unmarshal method. +type UnmarshalInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message + Buf []byte // input buffer + Flags UnmarshalInputFlags + Resolver interface { + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) + } +} + +// UnmarshalOutput is output from the Unmarshal method. +type UnmarshalOutput = struct { + pragma.NoUnkeyedLiterals + + Flags UnmarshalOutputFlags +} + +// UnmarshalInputFlags configure the unmarshaler. +// Most flags correspond to fields in proto.UnmarshalOptions. +type UnmarshalInputFlags = uint8 + +const ( + UnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota +) + +// UnmarshalOutputFlags are output from the Unmarshal method. +type UnmarshalOutputFlags = uint8 + +const ( + // UnmarshalInitialized may be set on return if all required fields are known to be set. + // If unset, then it does not necessarily indicate that the message is uninitialized, + // only that its status could not be confirmed. + UnmarshalInitialized UnmarshalOutputFlags = 1 << iota +) + +// MergeInput is input to the Merge method. +type MergeInput = struct { + pragma.NoUnkeyedLiterals + + Source protoreflect.Message + Destination protoreflect.Message +} + +// MergeOutput is output from the Merge method. +type MergeOutput = struct { + pragma.NoUnkeyedLiterals + + Flags MergeOutputFlags +} + +// MergeOutputFlags are output from the Merge method. +type MergeOutputFlags = uint8 + +const ( + // MergeComplete reports whether the merge was performed. + // If unset, the merger must have made no changes to the destination. + MergeComplete MergeOutputFlags = 1 << iota +) + +// CheckInitializedInput is input to the CheckInitialized method. +type CheckInitializedInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message +} + +// CheckInitializedOutput is output from the CheckInitialized method. +type CheckInitializedOutput = struct { + pragma.NoUnkeyedLiterals +} diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go new file mode 100644 index 00000000..4a1ab7fb --- /dev/null +++ b/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go @@ -0,0 +1,44 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoimpl contains the default implementation for messages +// generated by protoc-gen-go. +// +// WARNING: This package should only ever be imported by generated messages. +// The compatibility agreement covers nothing except for functionality needed +// to keep existing generated messages operational. Breakages that occur due +// to unauthorized usages of this package are not the author's responsibility. +package protoimpl + +import ( + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/filetype" + "google.golang.org/protobuf/internal/impl" +) + +// UnsafeEnabled specifies whether package unsafe can be used. +const UnsafeEnabled = impl.UnsafeEnabled + +type ( + // Types used by generated code in init functions. + DescBuilder = filedesc.Builder + TypeBuilder = filetype.Builder + + // Types used by generated code to implement EnumType, MessageType, and ExtensionType. + EnumInfo = impl.EnumInfo + MessageInfo = impl.MessageInfo + ExtensionInfo = impl.ExtensionInfo + + // Types embedded in generated messages. + MessageState = impl.MessageState + SizeCache = impl.SizeCache + WeakFields = impl.WeakFields + UnknownFields = impl.UnknownFields + ExtensionFields = impl.ExtensionFields + ExtensionFieldV1 = impl.ExtensionField + + Pointer = impl.Pointer +) + +var X impl.Export diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go new file mode 100644 index 00000000..ff094e1b --- /dev/null +++ b/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go @@ -0,0 +1,56 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoimpl + +import ( + "google.golang.org/protobuf/internal/version" +) + +const ( + // MaxVersion is the maximum supported version for generated .pb.go files. + // It is always the current version of the module. + MaxVersion = version.Minor + + // GenVersion is the runtime version required by generated .pb.go files. + // This is incremented when generated code relies on new functionality + // in the runtime. + GenVersion = 20 + + // MinVersion is the minimum supported version for generated .pb.go files. + // This is incremented when the runtime drops support for old code. + MinVersion = 0 +) + +// EnforceVersion is used by code generated by protoc-gen-go +// to statically enforce minimum and maximum versions of this package. +// A compilation failure implies either that: +// * the runtime package is too old and needs to be updated OR +// * the generated code is too old and needs to be regenerated. +// +// The runtime package can be upgraded by running: +// go get google.golang.org/protobuf +// +// The generated code can be regenerated by running: +// protoc --go_out=${PROTOC_GEN_GO_ARGS} ${PROTO_FILES} +// +// Example usage by generated code: +// const ( +// // Verify that this generated code is sufficiently up-to-date. +// _ = protoimpl.EnforceVersion(genVersion - protoimpl.MinVersion) +// // Verify that runtime/protoimpl is sufficiently up-to-date. +// _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - genVersion) +// ) +// +// The genVersion is the current minor version used to generated the code. +// This compile-time check relies on negative integer overflow of a uint +// being a compilation failure (guaranteed by the Go specification). +type EnforceVersion uint + +// This enforces the following invariant: +// MinVersion ≤ GenVersion ≤ MaxVersion +const ( + _ = EnforceVersion(GenVersion - MinVersion) + _ = EnforceVersion(MaxVersion - GenVersion) +) diff --git a/vendor/gopkg.in/asn1-ber.v1/.travis.yml b/vendor/gopkg.in/asn1-ber.v1/.travis.yml index 53063d07..ecf41325 100644 --- a/vendor/gopkg.in/asn1-ber.v1/.travis.yml +++ b/vendor/gopkg.in/asn1-ber.v1/.travis.yml @@ -1,13 +1,31 @@ language: go -go: - - 1.2 - - 1.3 - - 1.4 - - 1.5 - - 1.6 - - 1.7 - - 1.8 - - tip +matrix: + include: + - go: 1.2.x + env: GOOS=linux GOARCH=amd64 + - go: 1.2.x + env: GOOS=linux GOARCH=386 + - go: 1.2.x + env: GOOS=windows GOARCH=amd64 + - go: 1.2.x + env: GOOS=windows GOARCH=386 + - go: 1.3.x + - go: 1.4.x + - go: 1.5.x + - go: 1.6.x + - go: 1.7.x + - go: 1.8.x + - go: 1.9.x + - go: 1.10.x + - go: 1.11.x + env: GOOS=linux GOARCH=amd64 + - go: 1.11.x + env: GOOS=linux GOARCH=386 + - go: 1.11.x + env: GOOS=windows GOARCH=amd64 + - go: 1.11.x + env: GOOS=windows GOARCH=386 + - go: tip go_import_path: gopkg.in/asn-ber.v1 install: - go list -f '{{range .Imports}}{{.}} {{end}}' ./... | xargs go get -v @@ -15,4 +33,4 @@ install: - go get code.google.com/p/go.tools/cmd/cover || go get golang.org/x/tools/cmd/cover - go build -v ./... script: - - go test -v -cover ./... + - go test -v -cover ./... || go test -v ./... diff --git a/vendor/gopkg.in/asn1-ber.v1/ber.go b/vendor/gopkg.in/asn1-ber.v1/ber.go index 25cc921b..6153f460 100644 --- a/vendor/gopkg.in/asn1-ber.v1/ber.go +++ b/vendor/gopkg.in/asn1-ber.v1/ber.go @@ -5,10 +5,15 @@ import ( "errors" "fmt" "io" + "math" "os" "reflect" ) +// MaxPacketLengthBytes specifies the maximum allowed packet size when calling ReadPacket or DecodePacket. Set to 0 for +// no limit. +var MaxPacketLengthBytes int64 = math.MaxInt32 + type Packet struct { Identifier Value interface{} @@ -207,7 +212,7 @@ func DecodeString(data []byte) string { return string(data) } -func parseInt64(bytes []byte) (ret int64, err error) { +func ParseInt64(bytes []byte) (ret int64, err error) { if len(bytes) > 8 { // We'll overflow an int64 in this case. err = fmt.Errorf("integer too large") @@ -330,6 +335,9 @@ func readPacket(reader io.Reader) (*Packet, int, error) { } // Read definite-length content + if MaxPacketLengthBytes > 0 && int64(length) > MaxPacketLengthBytes { + return nil, read, fmt.Errorf("length %d greater than maximum %d", length, MaxPacketLengthBytes) + } content := make([]byte, length, length) if length > 0 { _, err := io.ReadFull(reader, content) @@ -349,11 +357,11 @@ func readPacket(reader io.Reader) (*Packet, int, error) { switch p.Tag { case TagEOC: case TagBoolean: - val, _ := parseInt64(content) + val, _ := ParseInt64(content) p.Value = val != 0 case TagInteger: - p.Value, _ = parseInt64(content) + p.Value, _ = ParseInt64(content) case TagBitString: case TagOctetString: // the actual string encoding is not known here @@ -366,7 +374,7 @@ func readPacket(reader io.Reader) (*Packet, int, error) { case TagExternal: case TagRealFloat: case TagEnumerated: - p.Value, _ = parseInt64(content) + p.Value, _ = ParseInt64(content) case TagEmbeddedPDV: case TagUTF8String: p.Value = DecodeString(content) diff --git a/vendor/gopkg.in/asn1-ber.v1/header.go b/vendor/gopkg.in/asn1-ber.v1/header.go index 123744e9..71615621 100644 --- a/vendor/gopkg.in/asn1-ber.v1/header.go +++ b/vendor/gopkg.in/asn1-ber.v1/header.go @@ -2,6 +2,7 @@ package ber import ( "errors" + "fmt" "io" ) @@ -25,5 +26,10 @@ func readHeader(reader io.Reader) (identifier Identifier, length int, read int, return Identifier{}, 0, read, errors.New("indefinite length used with primitive type") } + if length < LengthIndefinite { + err = fmt.Errorf("length cannot be less than %d", LengthIndefinite) + return + } + return identifier, length, read, nil } diff --git a/vendor/gopkg.in/asn1-ber.v1/identifier.go b/vendor/gopkg.in/asn1-ber.v1/identifier.go index f7672a84..e8c43574 100644 --- a/vendor/gopkg.in/asn1-ber.v1/identifier.go +++ b/vendor/gopkg.in/asn1-ber.v1/identifier.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "io" - "math" ) func readIdentifier(reader io.Reader) (Identifier, int, error) { @@ -80,24 +79,34 @@ func encodeIdentifier(identifier Identifier) []byte { tag := identifier.Tag - highBit := uint(63) - for { - if tag&(1<= 0; i-- { - offset := uint(i) * 7 - mask := Tag(0x7f) << offset - tagByte := (tag & mask) >> offset - if i != 0 { - tagByte |= 0x80 - } - b = append(b, byte(tagByte)) - } + b = append(b, encodeHighTag(tag)...) + } + return b +} + +func encodeHighTag(tag Tag) []byte { + // set cap=4 to hopefully avoid additional allocations + b := make([]byte, 0, 4) + for tag != 0 { + // t := last 7 bits of tag (HighTagValueBitmask = 0x7F) + t := tag & HighTagValueBitmask + + // right shift tag 7 to remove what was just pulled off + tag >>= 7 + + // if b already has entries this entry needs a continuation bit (0x80) + if len(b) != 0 { + t |= HighTagContinueBitmask + } + + b = append(b, byte(t)) + } + // reverse + // since bits were pulled off 'tag' small to high the byte slice is in reverse order. + // example: tag = 0xFF results in {0x7F, 0x01 + 0x80 (continuation bit)} + // this needs to be reversed into 0x81 0x7F + for i, j := 0, len(b)-1; i < len(b)/2; i++ { + b[i], b[j-i] = b[j-i], b[i] } return b } diff --git a/vendor/gopkg.in/ldap.v3/.travis.yml b/vendor/gopkg.in/ldap.v3/.travis.yml index bb899b2a..107aa786 100644 --- a/vendor/gopkg.in/ldap.v3/.travis.yml +++ b/vendor/gopkg.in/ldap.v3/.travis.yml @@ -9,6 +9,7 @@ go: - "1.10.x" - "1.11.x" - "1.12.x" + - "1.13.x" - tip git: diff --git a/vendor/gopkg.in/ldap.v3/add.go b/vendor/gopkg.in/ldap.v3/add.go index 19bce1b7..e2cb9b06 100644 --- a/vendor/gopkg.in/ldap.v3/add.go +++ b/vendor/gopkg.in/ldap.v3/add.go @@ -10,10 +10,9 @@ package ldap import ( - "errors" "log" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // Attribute represents an LDAP attribute @@ -45,20 +44,26 @@ type AddRequest struct { Controls []Control } -func (a AddRequest) encode() *ber.Packet { - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationAddRequest, nil, "Add Request") - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, a.DN, "DN")) +func (req *AddRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationAddRequest, nil, "Add Request") + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.DN, "DN")) attributes := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Attributes") - for _, attribute := range a.Attributes { + for _, attribute := range req.Attributes { attributes.AppendChild(attribute.encode()) } - request.AppendChild(attributes) - return request + pkt.AppendChild(attributes) + + envelope.AppendChild(pkt) + if len(req.Controls) > 0 { + envelope.AppendChild(encodeControls(req.Controls)) + } + + return nil } // Attribute adds an attribute with the given type and values -func (a *AddRequest) Attribute(attrType string, attrVals []string) { - a.Attributes = append(a.Attributes, Attribute{Type: attrType, Vals: attrVals}) +func (req *AddRequest) Attribute(attrType string, attrVals []string) { + req.Attributes = append(req.Attributes, Attribute{Type: attrType, Vals: attrVals}) } // NewAddRequest returns an AddRequest for the given DN, with no attributes @@ -72,39 +77,17 @@ func NewAddRequest(dn string, controls []Control) *AddRequest { // Add performs the given AddRequest func (l *Conn) Add(addRequest *AddRequest) error { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - packet.AppendChild(addRequest.encode()) - if len(addRequest.Controls) > 0 { - packet.AppendChild(encodeControls(addRequest.Controls)) - } - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(addRequest) if err != nil { return err } defer l.finishMessage(msgCtx) - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return err } - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return err - } - ber.PrintPacket(packet) - } - if packet.Children[1].Tag == ApplicationAddResponse { err := GetLDAPError(packet) if err != nil { @@ -113,7 +96,5 @@ func (l *Conn) Add(addRequest *AddRequest) error { } else { log.Printf("Unexpected Response: %d", packet.Children[1].Tag) } - - l.Debug.Printf("%d: returning", msgCtx.id) return nil } diff --git a/vendor/gopkg.in/ldap.v3/bind.go b/vendor/gopkg.in/ldap.v3/bind.go index 59c3f5ef..7b5e657a 100644 --- a/vendor/gopkg.in/ldap.v3/bind.go +++ b/vendor/gopkg.in/ldap.v3/bind.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // SimpleBindRequest represents a username/password bind operation @@ -35,13 +35,18 @@ func NewSimpleBindRequest(username string, password string, controls []Control) } } -func (bindRequest *SimpleBindRequest) encode() *ber.Packet { - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request") - request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, 3, "Version")) - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, bindRequest.Username, "User Name")) - request.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, bindRequest.Password, "Password")) +func (req *SimpleBindRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request") + pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, 3, "Version")) + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.Username, "User Name")) + pkt.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, req.Password, "Password")) - return request + envelope.AppendChild(pkt) + if len(req.Controls) > 0 { + envelope.AppendChild(encodeControls(req.Controls)) + } + + return nil } // SimpleBind performs the simple bind operation defined in the given request @@ -50,41 +55,17 @@ func (l *Conn) SimpleBind(simpleBindRequest *SimpleBindRequest) (*SimpleBindResu return nil, NewError(ErrorEmptyPassword, errors.New("ldap: empty password not allowed by the client")) } - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - encodedBindRequest := simpleBindRequest.encode() - packet.AppendChild(encodedBindRequest) - if len(simpleBindRequest.Controls) > 0 { - packet.AppendChild(encodeControls(simpleBindRequest.Controls)) - } - - if l.Debug { - ber.PrintPacket(packet) - } - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(simpleBindRequest) if err != nil { return nil, err } defer l.finishMessage(msgCtx) - packetResponse, ok := <-msgCtx.responses - if !ok { - return nil, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return nil, err } - if l.Debug { - if err = addLDAPDescriptions(packet); err != nil { - return nil, err - } - ber.PrintPacket(packet) - } - result := &SimpleBindResult{ Controls: make([]Control, 0), } @@ -133,3 +114,39 @@ func (l *Conn) UnauthenticatedBind(username string) error { _, err := l.SimpleBind(req) return err } + +var externalBindRequest = requestFunc(func(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request") + pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, 3, "Version")) + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, "", "User Name")) + + saslAuth := ber.Encode(ber.ClassContext, ber.TypeConstructed, 3, "", "authentication") + saslAuth.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, "EXTERNAL", "SASL Mech")) + saslAuth.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, "", "SASL Cred")) + + pkt.AppendChild(saslAuth) + + envelope.AppendChild(pkt) + + return nil +}) + +// ExternalBind performs SASL/EXTERNAL authentication. +// +// Use ldap.DialURL("ldapi://") to connect to the Unix socket before ExternalBind. +// +// See https://tools.ietf.org/html/rfc4422#appendix-A +func (l *Conn) ExternalBind() error { + msgCtx, err := l.doRequest(externalBindRequest) + if err != nil { + return err + } + defer l.finishMessage(msgCtx) + + packet, err := l.readPacket(msgCtx) + if err != nil { + return err + } + + return GetLDAPError(packet) +} diff --git a/vendor/gopkg.in/ldap.v3/client.go b/vendor/gopkg.in/ldap.v3/client.go index c7f41f6f..619677c7 100644 --- a/vendor/gopkg.in/ldap.v3/client.go +++ b/vendor/gopkg.in/ldap.v3/client.go @@ -8,21 +8,23 @@ import ( // Client knows how to interact with an LDAP server type Client interface { Start() - StartTLS(config *tls.Config) error + StartTLS(*tls.Config) error Close() SetTimeout(time.Duration) Bind(username, password string) error - SimpleBind(simpleBindRequest *SimpleBindRequest) (*SimpleBindResult, error) + UnauthenticatedBind(username string) error + SimpleBind(*SimpleBindRequest) (*SimpleBindResult, error) + ExternalBind() error - Add(addRequest *AddRequest) error - Del(delRequest *DelRequest) error - Modify(modifyRequest *ModifyRequest) error - ModifyDN(modifyDNRequest *ModifyDNRequest) error + Add(*AddRequest) error + Del(*DelRequest) error + Modify(*ModifyRequest) error + ModifyDN(*ModifyDNRequest) error Compare(dn, attribute, value string) (bool, error) - PasswordModify(passwordModifyRequest *PasswordModifyRequest) (*PasswordModifyResult, error) + PasswordModify(*PasswordModifyRequest) (*PasswordModifyResult, error) - Search(searchRequest *SearchRequest) (*SearchResult, error) + Search(*SearchRequest) (*SearchResult, error) SearchWithPaging(searchRequest *SearchRequest, pagingSize uint32) (*SearchResult, error) } diff --git a/vendor/gopkg.in/ldap.v3/compare.go b/vendor/gopkg.in/ldap.v3/compare.go index 5b5013cb..83694d82 100644 --- a/vendor/gopkg.in/ldap.v3/compare.go +++ b/vendor/gopkg.in/ldap.v3/compare.go @@ -20,53 +20,50 @@ package ldap import ( - "errors" "fmt" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) +// CompareRequest represents an LDAP CompareRequest operation. +type CompareRequest struct { + DN string + Attribute string + Value string +} + +func (req *CompareRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationCompareRequest, nil, "Compare Request") + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.DN, "DN")) + + ava := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "AttributeValueAssertion") + ava.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.Attribute, "AttributeDesc")) + ava.AppendChild(ber.Encode(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.Value, "AssertionValue")) + + pkt.AppendChild(ava) + + envelope.AppendChild(pkt) + + return nil +} + // Compare checks to see if the attribute of the dn matches value. Returns true if it does otherwise // false with any error that occurs if any. func (l *Conn) Compare(dn, attribute, value string) (bool, error) { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationCompareRequest, nil, "Compare Request") - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, dn, "DN")) - - ava := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "AttributeValueAssertion") - ava.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, attribute, "AttributeDesc")) - ava.AppendChild(ber.Encode(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, value, "AssertionValue")) - request.AppendChild(ava) - packet.AppendChild(request) - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(&CompareRequest{ + DN: dn, + Attribute: attribute, + Value: value}) if err != nil { return false, err } defer l.finishMessage(msgCtx) - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return false, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return false, err } - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return false, err - } - ber.PrintPacket(packet) - } - if packet.Children[1].Tag == ApplicationCompareResponse { err := GetLDAPError(packet) diff --git a/vendor/gopkg.in/ldap.v3/conn.go b/vendor/gopkg.in/ldap.v3/conn.go index c20471fc..ab9bd4f9 100644 --- a/vendor/gopkg.in/ldap.v3/conn.go +++ b/vendor/gopkg.in/ldap.v3/conn.go @@ -11,7 +11,7 @@ import ( "sync/atomic" "time" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) const ( @@ -140,7 +140,6 @@ func DialTLS(network, addr string, config *tls.Config) (*Conn, error) { // or ldap:// specified as protocol. On success a new Conn for the connection // is returned. func DialURL(addr string) (*Conn, error) { - lurl, err := url.Parse(addr) if err != nil { return nil, NewError(ErrorNetwork, err) @@ -154,6 +153,11 @@ func DialURL(addr string) (*Conn, error) { } switch lurl.Scheme { + case "ldapi": + if lurl.Path == "" || lurl.Path == "/" { + lurl.Path = "/var/run/slapd/ldapi" + } + return Dial("unix", lurl.Path) case "ldap": if port == "" { port = DefaultLdapPort @@ -490,11 +494,13 @@ func (l *Conn) reader() { // A read error is expected here if we are closing the connection... if !l.IsClosing() { l.closeErr.Store(fmt.Errorf("unable to read LDAP response packet: %s", err)) - l.Debug.Printf("reader error: %s", err.Error()) + l.Debug.Printf("reader error: %s", err) } return } - addLDAPDescriptions(packet) + if err := addLDAPDescriptions(packet); err != nil { + l.Debug.Printf("descriptions error: %s", err) + } if len(packet.Children) == 0 { l.Debug.Printf("Received bad ldap packet") continue diff --git a/vendor/gopkg.in/ldap.v3/debug.go b/vendor/gopkg.in/ldap.v3/debug.go index 7279fc25..61628e3a 100644 --- a/vendor/gopkg.in/ldap.v3/debug.go +++ b/vendor/gopkg.in/ldap.v3/debug.go @@ -3,20 +3,26 @@ package ldap import ( "log" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // debugging type // - has a Printf method to write the debug output type debugging bool -// write debug output +// Enable controls debugging mode. +func (debug *debugging) Enable(b bool) { + *debug = debugging(b) +} + +// Printf writes debug output. func (debug debugging) Printf(format string, args ...interface{}) { if debug { log.Printf(format, args...) } } +// PrintPacket dumps a packet. func (debug debugging) PrintPacket(packet *ber.Packet) { if debug { ber.PrintPacket(packet) diff --git a/vendor/gopkg.in/ldap.v3/del.go b/vendor/gopkg.in/ldap.v3/del.go index 6f78beb1..0e7767b2 100644 --- a/vendor/gopkg.in/ldap.v3/del.go +++ b/vendor/gopkg.in/ldap.v3/del.go @@ -6,10 +6,9 @@ package ldap import ( - "errors" "log" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // DelRequest implements an LDAP deletion request @@ -20,15 +19,20 @@ type DelRequest struct { Controls []Control } -func (d DelRequest) encode() *ber.Packet { - request := ber.Encode(ber.ClassApplication, ber.TypePrimitive, ApplicationDelRequest, d.DN, "Del Request") - request.Data.Write([]byte(d.DN)) - return request +func (req *DelRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypePrimitive, ApplicationDelRequest, req.DN, "Del Request") + pkt.Data.Write([]byte(req.DN)) + + envelope.AppendChild(pkt) + if len(req.Controls) > 0 { + envelope.AppendChild(encodeControls(req.Controls)) + } + + return nil } // NewDelRequest creates a delete request for the given DN and controls -func NewDelRequest(DN string, - Controls []Control) *DelRequest { +func NewDelRequest(DN string, Controls []Control) *DelRequest { return &DelRequest{ DN: DN, Controls: Controls, @@ -37,39 +41,17 @@ func NewDelRequest(DN string, // Del executes the given delete request func (l *Conn) Del(delRequest *DelRequest) error { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - packet.AppendChild(delRequest.encode()) - if len(delRequest.Controls) > 0 { - packet.AppendChild(encodeControls(delRequest.Controls)) - } - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(delRequest) if err != nil { return err } defer l.finishMessage(msgCtx) - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return err } - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return err - } - ber.PrintPacket(packet) - } - if packet.Children[1].Tag == ApplicationDelResponse { err := GetLDAPError(packet) if err != nil { @@ -78,7 +60,5 @@ func (l *Conn) Del(delRequest *DelRequest) error { } else { log.Printf("Unexpected Response: %d", packet.Children[1].Tag) } - - l.Debug.Printf("%d: returning", msgCtx.id) return nil } diff --git a/vendor/gopkg.in/ldap.v3/error.go b/vendor/gopkg.in/ldap.v3/error.go index 639ed824..53dedb95 100644 --- a/vendor/gopkg.in/ldap.v3/error.go +++ b/vendor/gopkg.in/ldap.v3/error.go @@ -3,7 +3,7 @@ package ldap import ( "fmt" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // LDAP Result Codes @@ -196,7 +196,9 @@ func (e *Error) Error() string { func GetLDAPError(packet *ber.Packet) error { if packet == nil { return &Error{ResultCode: ErrorUnexpectedResponse, Err: fmt.Errorf("Empty packet")} - } else if len(packet.Children) >= 2 { + } + + if len(packet.Children) >= 2 { response := packet.Children[1] if response == nil { return &Error{ResultCode: ErrorUnexpectedResponse, Err: fmt.Errorf("Empty response in packet")} diff --git a/vendor/gopkg.in/ldap.v3/go.mod b/vendor/gopkg.in/ldap.v3/go.mod new file mode 100644 index 00000000..8b38566b --- /dev/null +++ b/vendor/gopkg.in/ldap.v3/go.mod @@ -0,0 +1,3 @@ +module gopkg.in/ldap.v3 + +require gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d diff --git a/vendor/gopkg.in/ldap.v3/go.sum b/vendor/gopkg.in/ldap.v3/go.sum new file mode 100644 index 00000000..dd2f5e15 --- /dev/null +++ b/vendor/gopkg.in/ldap.v3/go.sum @@ -0,0 +1,2 @@ +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= diff --git a/vendor/gopkg.in/ldap.v3/ldap.go b/vendor/gopkg.in/ldap.v3/ldap.go index d7666676..5b694bf3 100644 --- a/vendor/gopkg.in/ldap.v3/ldap.go +++ b/vendor/gopkg.in/ldap.v3/ldap.go @@ -1,12 +1,11 @@ package ldap import ( - "errors" "fmt" "io/ioutil" "os" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // LDAP Application Codes @@ -87,7 +86,7 @@ var BeheraPasswordPolicyErrorMap = map[int8]string{ func addLDAPDescriptions(packet *ber.Packet) (err error) { defer func() { if r := recover(); r != nil { - err = NewError(ErrorDebugging, errors.New("ldap: cannot process packet to add descriptions")) + err = NewError(ErrorDebugging, fmt.Errorf("ldap: cannot process packet to add descriptions: %s", r)) } }() packet.Description = "LDAP Response" @@ -271,6 +270,9 @@ func addRequestDescriptions(packet *ber.Packet) error { func addDefaultLDAPResponseDescriptions(packet *ber.Packet) error { err := GetLDAPError(packet) + if err == nil { + return nil + } packet.Children[1].Children[0].Description = "Result Code (" + LDAPResultCodeMap[err.(*Error).ResultCode] + ")" packet.Children[1].Children[1].Description = "Matched DN (" + err.(*Error).MatchedDN + ")" packet.Children[1].Children[2].Description = "Error Message" diff --git a/vendor/gopkg.in/ldap.v3/moddn.go b/vendor/gopkg.in/ldap.v3/moddn.go index 803279d2..889a82ac 100644 --- a/vendor/gopkg.in/ldap.v3/moddn.go +++ b/vendor/gopkg.in/ldap.v3/moddn.go @@ -11,10 +11,9 @@ package ldap import ( - "errors" "log" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // ModifyDNRequest holds the request to modify a DN @@ -46,50 +45,34 @@ func NewModifyDNRequest(dn string, rdn string, delOld bool, newSup string) *Modi } } -func (m ModifyDNRequest) encode() *ber.Packet { - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationModifyDNRequest, nil, "Modify DN Request") - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, m.DN, "DN")) - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, m.NewRDN, "New RDN")) - request.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, m.DeleteOldRDN, "Delete old RDN")) - if m.NewSuperior != "" { - request.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, m.NewSuperior, "New Superior")) +func (req *ModifyDNRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationModifyDNRequest, nil, "Modify DN Request") + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.DN, "DN")) + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.NewRDN, "New RDN")) + pkt.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, req.DeleteOldRDN, "Delete old RDN")) + if req.NewSuperior != "" { + pkt.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, req.NewSuperior, "New Superior")) } - return request + + envelope.AppendChild(pkt) + + return nil } // ModifyDN renames the given DN and optionally move to another base (when the "newSup" argument // to NewModifyDNRequest() is not ""). func (l *Conn) ModifyDN(m *ModifyDNRequest) error { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - packet.AppendChild(m.encode()) - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(m) if err != nil { return err } defer l.finishMessage(msgCtx) - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return NewError(ErrorNetwork, errors.New("ldap: channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return err } - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return err - } - ber.PrintPacket(packet) - } - if packet.Children[1].Tag == ApplicationModifyDNResponse { err := GetLDAPError(packet) if err != nil { @@ -98,7 +81,5 @@ func (l *Conn) ModifyDN(m *ModifyDNRequest) error { } else { log.Printf("Unexpected Response: %d", packet.Children[1].Tag) } - - l.Debug.Printf("%d: returning", msgCtx.id) return nil } diff --git a/vendor/gopkg.in/ldap.v3/modify.go b/vendor/gopkg.in/ldap.v3/modify.go index d83e6221..7e09b507 100644 --- a/vendor/gopkg.in/ldap.v3/modify.go +++ b/vendor/gopkg.in/ldap.v3/modify.go @@ -26,10 +26,9 @@ package ldap import ( - "errors" "log" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // Change operation choices @@ -84,40 +83,43 @@ type ModifyRequest struct { } // Add appends the given attribute to the list of changes to be made -func (m *ModifyRequest) Add(attrType string, attrVals []string) { - m.appendChange(AddAttribute, attrType, attrVals) +func (req *ModifyRequest) Add(attrType string, attrVals []string) { + req.appendChange(AddAttribute, attrType, attrVals) } // Delete appends the given attribute to the list of changes to be made -func (m *ModifyRequest) Delete(attrType string, attrVals []string) { - m.appendChange(DeleteAttribute, attrType, attrVals) +func (req *ModifyRequest) Delete(attrType string, attrVals []string) { + req.appendChange(DeleteAttribute, attrType, attrVals) } // Replace appends the given attribute to the list of changes to be made -func (m *ModifyRequest) Replace(attrType string, attrVals []string) { - m.appendChange(ReplaceAttribute, attrType, attrVals) +func (req *ModifyRequest) Replace(attrType string, attrVals []string) { + req.appendChange(ReplaceAttribute, attrType, attrVals) } -func (m *ModifyRequest) appendChange(operation uint, attrType string, attrVals []string) { - m.Changes = append(m.Changes, Change{operation, PartialAttribute{Type: attrType, Vals: attrVals}}) +func (req *ModifyRequest) appendChange(operation uint, attrType string, attrVals []string) { + req.Changes = append(req.Changes, Change{operation, PartialAttribute{Type: attrType, Vals: attrVals}}) } -func (m ModifyRequest) encode() *ber.Packet { - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationModifyRequest, nil, "Modify Request") - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, m.DN, "DN")) +func (req *ModifyRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationModifyRequest, nil, "Modify Request") + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.DN, "DN")) changes := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Changes") - for _, change := range m.Changes { + for _, change := range req.Changes { changes.AppendChild(change.encode()) } - request.AppendChild(changes) - return request + pkt.AppendChild(changes) + + envelope.AppendChild(pkt) + if len(req.Controls) > 0 { + envelope.AppendChild(encodeControls(req.Controls)) + } + + return nil } // NewModifyRequest creates a modify request for the given DN -func NewModifyRequest( - dn string, - controls []Control, -) *ModifyRequest { +func NewModifyRequest(dn string, controls []Control) *ModifyRequest { return &ModifyRequest{ DN: dn, Controls: controls, @@ -126,39 +128,17 @@ func NewModifyRequest( // Modify performs the ModifyRequest func (l *Conn) Modify(modifyRequest *ModifyRequest) error { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - packet.AppendChild(modifyRequest.encode()) - if len(modifyRequest.Controls) > 0 { - packet.AppendChild(encodeControls(modifyRequest.Controls)) - } - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(modifyRequest) if err != nil { return err } defer l.finishMessage(msgCtx) - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return err } - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return err - } - ber.PrintPacket(packet) - } - if packet.Children[1].Tag == ApplicationModifyResponse { err := GetLDAPError(packet) if err != nil { @@ -167,7 +147,5 @@ func (l *Conn) Modify(modifyRequest *ModifyRequest) error { } else { log.Printf("Unexpected Response: %d", packet.Children[1].Tag) } - - l.Debug.Printf("%d: returning", msgCtx.id) return nil } diff --git a/vendor/gopkg.in/ldap.v3/passwdmodify.go b/vendor/gopkg.in/ldap.v3/passwdmodify.go index 06bc21db..bfaceff3 100644 --- a/vendor/gopkg.in/ldap.v3/passwdmodify.go +++ b/vendor/gopkg.in/ldap.v3/passwdmodify.go @@ -6,10 +6,9 @@ package ldap import ( - "errors" "fmt" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) const ( @@ -36,25 +35,28 @@ type PasswordModifyResult struct { Referral string } -func (r *PasswordModifyRequest) encode() (*ber.Packet, error) { - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationExtendedRequest, nil, "Password Modify Extended Operation") - request.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, passwordModifyOID, "Extended Request Name: Password Modify OID")) +func (req *PasswordModifyRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationExtendedRequest, nil, "Password Modify Extended Operation") + pkt.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, passwordModifyOID, "Extended Request Name: Password Modify OID")) + extendedRequestValue := ber.Encode(ber.ClassContext, ber.TypePrimitive, 1, nil, "Extended Request Value: Password Modify Request") passwordModifyRequestValue := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Password Modify Request") - if r.UserIdentity != "" { - passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, r.UserIdentity, "User Identity")) + if req.UserIdentity != "" { + passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, req.UserIdentity, "User Identity")) } - if r.OldPassword != "" { - passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 1, r.OldPassword, "Old Password")) + if req.OldPassword != "" { + passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 1, req.OldPassword, "Old Password")) } - if r.NewPassword != "" { - passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 2, r.NewPassword, "New Password")) + if req.NewPassword != "" { + passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 2, req.NewPassword, "New Password")) } - extendedRequestValue.AppendChild(passwordModifyRequestValue) - request.AppendChild(extendedRequestValue) - return request, nil + pkt.AppendChild(extendedRequestValue) + + envelope.AppendChild(pkt) + + return nil } // NewPasswordModifyRequest creates a new PasswordModifyRequest @@ -84,46 +86,18 @@ func NewPasswordModifyRequest(userIdentity string, oldPassword string, newPasswo // PasswordModify performs the modification request func (l *Conn) PasswordModify(passwordModifyRequest *PasswordModifyRequest) (*PasswordModifyResult, error) { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - - encodedPasswordModifyRequest, err := passwordModifyRequest.encode() - if err != nil { - return nil, err - } - packet.AppendChild(encodedPasswordModifyRequest) - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(passwordModifyRequest) if err != nil { return nil, err } defer l.finishMessage(msgCtx) - result := &PasswordModifyResult{} - - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return nil, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + packet, err := l.readPacket(msgCtx) if err != nil { return nil, err } - if packet == nil { - return nil, NewError(ErrorNetwork, errors.New("ldap: could not retrieve message")) - } - - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return nil, err - } - ber.PrintPacket(packet) - } + result := &PasswordModifyResult{} if packet.Children[1].Tag == ApplicationExtendedResponse { err := GetLDAPError(packet) diff --git a/vendor/gopkg.in/ldap.v3/request.go b/vendor/gopkg.in/ldap.v3/request.go new file mode 100644 index 00000000..814e29fe --- /dev/null +++ b/vendor/gopkg.in/ldap.v3/request.go @@ -0,0 +1,66 @@ +package ldap + +import ( + "errors" + + ber "gopkg.in/asn1-ber.v1" +) + +var ( + errRespChanClosed = errors.New("ldap: response channel closed") + errCouldNotRetMsg = errors.New("ldap: could not retrieve message") +) + +type request interface { + appendTo(*ber.Packet) error +} + +type requestFunc func(*ber.Packet) error + +func (f requestFunc) appendTo(p *ber.Packet) error { + return f(p) +} + +func (l *Conn) doRequest(req request) (*messageContext, error) { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + if err := req.appendTo(packet); err != nil { + return nil, err + } + + if l.Debug { + ber.PrintPacket(packet) + } + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return nil, err + } + l.Debug.Printf("%d: returning", msgCtx.id) + return msgCtx, nil +} + +func (l *Conn) readPacket(msgCtx *messageContext) (*ber.Packet, error) { + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return nil, NewError(ErrorNetwork, errRespChanClosed) + } + packet, err := packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return nil, err + } + + if packet == nil { + return nil, NewError(ErrorNetwork, errCouldNotRetMsg) + } + + if l.Debug { + if err = addLDAPDescriptions(packet); err != nil { + return nil, err + } + ber.PrintPacket(packet) + } + return packet, nil +} diff --git a/vendor/gopkg.in/ldap.v3/search.go b/vendor/gopkg.in/ldap.v3/search.go index 3aa6dac0..51eb7dc6 100644 --- a/vendor/gopkg.in/ldap.v3/search.go +++ b/vendor/gopkg.in/ldap.v3/search.go @@ -61,7 +61,7 @@ import ( "sort" "strings" - "gopkg.in/asn1-ber.v1" + ber "gopkg.in/asn1-ber.v1" ) // scope choices @@ -246,27 +246,33 @@ type SearchRequest struct { Controls []Control } -func (s *SearchRequest) encode() (*ber.Packet, error) { - request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationSearchRequest, nil, "Search Request") - request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, s.BaseDN, "Base DN")) - request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(s.Scope), "Scope")) - request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(s.DerefAliases), "Deref Aliases")) - request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, uint64(s.SizeLimit), "Size Limit")) - request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, uint64(s.TimeLimit), "Time Limit")) - request.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, s.TypesOnly, "Types Only")) +func (req *SearchRequest) appendTo(envelope *ber.Packet) error { + pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationSearchRequest, nil, "Search Request") + pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.BaseDN, "Base DN")) + pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(req.Scope), "Scope")) + pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(req.DerefAliases), "Deref Aliases")) + pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, uint64(req.SizeLimit), "Size Limit")) + pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, uint64(req.TimeLimit), "Time Limit")) + pkt.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, req.TypesOnly, "Types Only")) // compile and encode filter - filterPacket, err := CompileFilter(s.Filter) + filterPacket, err := CompileFilter(req.Filter) if err != nil { - return nil, err + return err } - request.AppendChild(filterPacket) + pkt.AppendChild(filterPacket) // encode attributes attributesPacket := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Attributes") - for _, attribute := range s.Attributes { + for _, attribute := range req.Attributes { attributesPacket.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, attribute, "Attribute")) } - request.AppendChild(attributesPacket) - return request, nil + pkt.AppendChild(attributesPacket) + + envelope.AppendChild(pkt) + if len(req.Controls) > 0 { + envelope.AppendChild(encodeControls(req.Controls)) + } + + return nil } // NewSearchRequest creates a new search request @@ -366,22 +372,7 @@ func (l *Conn) SearchWithPaging(searchRequest *SearchRequest, pagingSize uint32) // Search performs the given search request func (l *Conn) Search(searchRequest *SearchRequest) (*SearchResult, error) { - packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") - packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) - // encode search request - encodedSearchRequest, err := searchRequest.encode() - if err != nil { - return nil, err - } - packet.AppendChild(encodedSearchRequest) - // encode search controls - if len(searchRequest.Controls) > 0 { - packet.AppendChild(encodeControls(searchRequest.Controls)) - } - - l.Debug.PrintPacket(packet) - - msgCtx, err := l.sendMessage(packet) + msgCtx, err := l.doRequest(searchRequest) if err != nil { return nil, err } @@ -392,26 +383,12 @@ func (l *Conn) Search(searchRequest *SearchRequest) (*SearchResult, error) { Referrals: make([]string, 0), Controls: make([]Control, 0)} - foundSearchResultDone := false - for !foundSearchResultDone { - l.Debug.Printf("%d: waiting for response", msgCtx.id) - packetResponse, ok := <-msgCtx.responses - if !ok { - return nil, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) - } - packet, err = packetResponse.ReadPacket() - l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + for { + packet, err := l.readPacket(msgCtx) if err != nil { return nil, err } - if l.Debug { - if err := addLDAPDescriptions(packet); err != nil { - return nil, err - } - ber.PrintPacket(packet) - } - switch packet.Children[1].Tag { case 4: entry := new(Entry) @@ -440,11 +417,9 @@ func (l *Conn) Search(searchRequest *SearchRequest) (*SearchResult, error) { result.Controls = append(result.Controls, decodedChild) } } - foundSearchResultDone = true + return result, nil case 19: result.Referrals = append(result.Referrals, packet.Children[1].Children[0].Value.(string)) } } - l.Debug.Printf("%d: returning", msgCtx.id) - return result, nil } diff --git a/vendor/modules.txt b/vendor/modules.txt index ff6a5d78..99195a3a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,16 +1,15 @@ -# cloud.google.com/go v0.37.4 -cloud.google.com/go/civil # github.com/BurntSushi/toml v0.3.1 github.com/BurntSushi/toml -# github.com/andygrunwald/go-jira v1.10.0 +# github.com/andygrunwald/go-jira v1.12.0 github.com/andygrunwald/go-jira -# github.com/codegangsta/negroni v0.3.0 +# github.com/codegangsta/negroni v1.0.0 github.com/codegangsta/negroni -# github.com/denisenkom/go-mssqldb v0.0.0-20190806190131-db2462fef53b +# github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc github.com/denisenkom/go-mssqldb github.com/denisenkom/go-mssqldb/internal/cp +github.com/denisenkom/go-mssqldb/internal/decimal github.com/denisenkom/go-mssqldb/internal/querytext -# github.com/dgrijalva/jwt-go v3.1.0+incompatible +# github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go # github.com/documize/blackfriday v2.0.0+incompatible github.com/documize/blackfriday @@ -24,26 +23,26 @@ github.com/documize/slug github.com/elazarl/go-bindata-assetfs # github.com/fatih/structs v1.0.0 github.com/fatih/structs -# github.com/go-sql-driver/mysql v1.4.1 +# github.com/go-sql-driver/mysql v1.5.0 github.com/go-sql-driver/mysql +# github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe +github.com/golang-sql/civil # github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/glog -# github.com/golang/protobuf v1.2.0 +# github.com/golang/protobuf v1.4.0 github.com/golang/protobuf/proto # github.com/google/go-github v17.0.0+incompatible github.com/google/go-github/github # github.com/google/go-querystring v1.0.0 github.com/google/go-querystring/query -# github.com/gorilla/context v1.1.1 -github.com/gorilla/context -# github.com/gorilla/handlers v1.4.0 +# github.com/gorilla/handlers v1.4.2 github.com/gorilla/handlers -# github.com/gorilla/mux v1.6.2 +# github.com/gorilla/mux v1.7.4 github.com/gorilla/mux # github.com/jmoiron/sqlx v1.2.0 github.com/jmoiron/sqlx github.com/jmoiron/sqlx/reflectx -# github.com/lib/pq v1.2.0 +# github.com/lib/pq v1.5.2 github.com/lib/pq github.com/lib/pq/oid github.com/lib/pq/scram @@ -53,29 +52,28 @@ github.com/mb0/diff github.com/microcosm-cc/bluemonday # github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d github.com/nu7hatch/gouuid -# github.com/pkg/errors v0.8.0 +# github.com/pkg/errors v0.9.1 github.com/pkg/errors # github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be github.com/rainycape/unidecode -# github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95 +# github.com/shurcooL/sanitized_anchor_name v1.0.0 github.com/shurcooL/sanitized_anchor_name # github.com/trivago/tgo v1.0.1 github.com/trivago/tgo/tcontainer github.com/trivago/tgo/treflect -# golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 +# golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 golang.org/x/crypto/bcrypt golang.org/x/crypto/blowfish golang.org/x/crypto/md4 -# golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 +# golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 golang.org/x/net/context golang.org/x/net/context/ctxhttp golang.org/x/net/html golang.org/x/net/html/atom -# golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 +# golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/oauth2 golang.org/x/oauth2/internal -# google.golang.org/appengine v1.4.0 -google.golang.org/appengine/cloudsql +# google.golang.org/appengine v1.6.6 google.golang.org/appengine/internal google.golang.org/appengine/internal/base google.golang.org/appengine/internal/datastore @@ -83,13 +81,41 @@ google.golang.org/appengine/internal/log google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch +# google.golang.org/protobuf v1.21.0 +google.golang.org/protobuf/encoding/prototext +google.golang.org/protobuf/encoding/protowire +google.golang.org/protobuf/internal/descfmt +google.golang.org/protobuf/internal/descopts +google.golang.org/protobuf/internal/detrand +google.golang.org/protobuf/internal/encoding/defval +google.golang.org/protobuf/internal/encoding/messageset +google.golang.org/protobuf/internal/encoding/tag +google.golang.org/protobuf/internal/encoding/text +google.golang.org/protobuf/internal/errors +google.golang.org/protobuf/internal/fieldnum +google.golang.org/protobuf/internal/fieldsort +google.golang.org/protobuf/internal/filedesc +google.golang.org/protobuf/internal/filetype +google.golang.org/protobuf/internal/flags +google.golang.org/protobuf/internal/genname +google.golang.org/protobuf/internal/impl +google.golang.org/protobuf/internal/mapsort +google.golang.org/protobuf/internal/pragma +google.golang.org/protobuf/internal/set +google.golang.org/protobuf/internal/strs +google.golang.org/protobuf/internal/version +google.golang.org/protobuf/proto +google.golang.org/protobuf/reflect/protoreflect +google.golang.org/protobuf/reflect/protoregistry +google.golang.org/protobuf/runtime/protoiface +google.golang.org/protobuf/runtime/protoimpl # gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc gopkg.in/alexcesaro/quotedprintable.v3 -# gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225 +# gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d gopkg.in/asn1-ber.v1 # gopkg.in/cas.v2 v2.1.0 gopkg.in/cas.v2 -# gopkg.in/ldap.v3 v3.0.3 +# gopkg.in/ldap.v3 v3.1.0 gopkg.in/ldap.v3 # gopkg.in/yaml.v2 v2.2.2 gopkg.in/yaml.v2