60806040523480156200001157600080fd5b506040516200568938038062005689833981810160405281019062000037919062000570565b82826200004b82826200012960201b60201c565b50506000600660006101000a81548160ff021916908315150217905550806007908162000079919062000874565b506200009e6000801b620000926200015160201b60201c565b6200015960201b60201c565b620000df7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620000d36200015160201b60201c565b6200015960201b60201c565b620001207f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a620001146200015160201b60201c565b6200015960201b60201c565b5050506200095b565b81600490816200013a919062000874565b5080600590816200014c919062000874565b505050565b600033905090565b6200016b82826200016f60201b60201c565b5050565b620001818282620001ad60201b60201c565b620001a881600160008581526020019081526020016000206200029e60201b90919060201c565b505050565b620001bf8282620002d660201b60201c565b6200029a57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200023f6200015160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620002ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200034060201b60201c565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000620003548383620003ba60201b60201c565b620003af578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620003b4565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200044682620003fb565b810181811067ffffffffffffffff821117156200046857620004676200040c565b5b80604052505050565b60006200047d620003dd565b90506200048b82826200043b565b919050565b600067ffffffffffffffff821115620004ae57620004ad6200040c565b5b620004b982620003fb565b9050602081019050919050565b60005b83811015620004e6578082015181840152602081019050620004c9565b60008484015250505050565b600062000509620005038462000490565b62000471565b905082815260208101848484011115620005285762000527620003f6565b5b62000535848285620004c6565b509392505050565b600082601f830112620005555762000554620003f1565b5b815162000567848260208601620004f2565b91505092915050565b6000806000606084860312156200058c576200058b620003e7565b5b600084015167ffffffffffffffff811115620005ad57620005ac620003ec565b5b620005bb868287016200053d565b935050602084015167ffffffffffffffff811115620005df57620005de620003ec565b5b620005ed868287016200053d565b925050604084015167ffffffffffffffff811115620006115762000610620003ec565b5b6200061f868287016200053d565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067c57607f821691505b60208210810362000692576200069162000634565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006bd565b620007088683620006bd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007556200074f620007498462000720565b6200072a565b62000720565b9050919050565b6000819050919050565b620007718362000734565b6200078962000780826200075c565b848454620006ca565b825550505050565b600090565b620007a062000791565b620007ad81848462000766565b505050565b5b81811015620007d557620007c960008262000796565b600181019050620007b3565b5050565b601f8211156200082457620007ee8162000698565b620007f984620006ad565b8101602085101562000809578190505b620008216200081885620006ad565b830182620007b2565b50505b505050565b600082821c905092915050565b6000620008496000198460080262000829565b1980831691505092915050565b600062000864838362000836565b9150826002028217905092915050565b6200087f8262000629565b67ffffffffffffffff8111156200089b576200089a6200040c565b5b620008a7825462000663565b620008b4828285620007d9565b600060209050601f831160018114620008ec5760008415620008d7578287015190505b620008e3858262000856565b86555062000953565b601f198416620008fc8662000698565b60005b828110156200092657848901518255600182019150602085019450602081019050620008ff565b8683101562000946578489015162000942601f89168262000836565b8355505b6001600288020188555050505b505050505050565b614d1e806200096b6000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c8063731133e9116100f9578063ca15c87311610097578063e63ab1e911610071578063e63ab1e9146104b7578063e985e9c5146104d5578063f242432a14610505578063f5298aca14610521576101a8565b8063ca15c8731461044d578063d53913931461047d578063d547741f1461049b576101a8565b806391d14854116100d357806391d14854146103c5578063a217fddf146103f5578063a22cb46514610413578063b09f12661461042f576101a8565b8063731133e91461036f5780638456cb591461038b5780639010d07c14610395576101a8565b80632eb2c2d6116101665780633f4ba83a116101405780633f4ba83a146102fb5780634e1273f4146103055780635c975abb146103355780636b20c45414610353576101a8565b80632eb2c2d6146102a75780632f2ff15d146102c357806336568abe146102df576101a8565b8062fdd58e146101ad57806301ffc9a7146101dd5780630e89341c1461020d578063150704011461023d5780631f7fdffa1461025b578063248a9ca314610277575b600080fd5b6101c760048036038101906101c291906130e3565b61053d565b6040516101d49190613132565b60405180910390f35b6101f760048036038101906101f291906131a5565b610606565b60405161020491906131ed565b60405180910390f35b61022760048036038101906102229190613208565b610618565b60405161023491906132c5565b60405180910390f35b6102456106ac565b60405161025291906132c5565b60405180910390f35b610275600480360381019061027091906134e4565b61073e565b005b610291600480360381019061028c91906135d5565b6107c0565b60405161029e9190613611565b60405180910390f35b6102c160048036038101906102bc919061362c565b6107df565b005b6102dd60048036038101906102d891906136fb565b610880565b005b6102f960048036038101906102f491906136fb565b6108a1565b005b610303610924565b005b61031f600480360381019061031a91906137fe565b61099e565b60405161032c9190613934565b60405180910390f35b61033d610ab7565b60405161034a91906131ed565b60405180910390f35b61036d60048036038101906103689190613956565b610ace565b005b610389600480360381019061038491906139e1565b610b6b565b005b610393610bed565b005b6103af60048036038101906103aa9190613a64565b610c67565b6040516103bc9190613ab3565b60405180910390f35b6103df60048036038101906103da91906136fb565b610c96565b6040516103ec91906131ed565b60405180910390f35b6103fd610d00565b60405161040a9190613611565b60405180910390f35b61042d60048036038101906104289190613afa565b610d07565b005b610437610d1d565b60405161044491906132c5565b60405180910390f35b610467600480360381019061046291906135d5565b610dab565b6040516104749190613132565b60405180910390f35b610485610dcf565b6040516104929190613611565b60405180910390f35b6104b560048036038101906104b091906136fb565b610df3565b005b6104bf610e14565b6040516104cc9190613611565b60405180910390f35b6104ef60048036038101906104ea9190613b3a565b610e38565b6040516104fc91906131ed565b60405180910390f35b61051f600480360381019061051a9190613b7a565b610ecc565b005b61053b60048036038101906105369190613c11565b610f6d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490613cd6565b60405180910390fd5b6002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006106118261100a565b9050919050565b60606004805461062790613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461065390613d25565b80156106a05780601f10610675576101008083540402835291602001916106a0565b820191906000526020600020905b81548152906001019060200180831161068357829003601f168201915b50505050509050919050565b6060600780546106bb90613d25565b80601f01602080910402602001604051908101604052809291908181526020018280546106e790613d25565b80156107345780601f1061070957610100808354040283529160200191610734565b820191906000526020600020905b81548152906001019060200180831161071757829003601f168201915b5050505050905090565b61076f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661076a6110ec565b610c96565b6107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590613dc8565b60405180910390fd5b6107ba848484846110f4565b50505050565b6000806000838152602001908152602001600020600101549050919050565b6107e76110ec565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061082d575061082c856108276110ec565b610e38565b5b61086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390613e5a565b60405180910390fd5b6108798585858585611321565b5050505050565b610889826107c0565b61089281611645565b61089c8383611659565b505050565b6108a96110ec565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90613eec565b60405180910390fd5b610920828261168d565b5050565b6109557f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109506110ec565b610c96565b610994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098b90613f7e565b60405180910390fd5b61099c6116c1565b565b606081518351146109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90614010565b60405180910390fd5b6000835167ffffffffffffffff811115610a0157610a006132ec565b5b604051908082528060200260200182016040528015610a2f5781602001602082028036833780820191505090505b50905060005b8451811015610aac57610a7c858281518110610a5457610a53614030565b5b6020026020010151858381518110610a6f57610a6e614030565b5b602002602001015161053d565b828281518110610a8f57610a8e614030565b5b60200260200101818152505080610aa59061408e565b9050610a35565b508091505092915050565b6000600660009054906101000a900460ff16905090565b610ad66110ec565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b1c5750610b1b83610b166110ec565b610e38565b5b610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613e5a565b60405180910390fd5b610b66838383611724565b505050565b610b9c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610b976110ec565b610c96565b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613dc8565b60405180910390fd5b610be7848484846119f4565b50505050565b610c1e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c196110ec565b610c96565b610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614148565b60405180910390fd5b610c65611ba5565b565b6000610c8e8260016000868152602001908152602001600020611c0890919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b610d19610d126110ec565b8383611c22565b5050565b60078054610d2a90613d25565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690613d25565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505081565b6000610dc860016000848152602001908152602001600020611d8e565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610dfc826107c0565b610e0581611645565b610e0f838361168d565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ed46110ec565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f1a5750610f1985610f146110ec565b610e38565b5b610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090613e5a565b60405180910390fd5b610f668585858585611da3565b5050505050565b610f756110ec565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fbb5750610fba83610fb56110ec565b610e38565b5b610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190613e5a565b60405180910390fd5b611005838383612041565b505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110d557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110e557506110e482612289565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a906141da565b60405180910390fd5b81518351146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e9061426c565b60405180910390fd5b60006111b16110ec565b90506111c281600087878787612303565b60005b845181101561127c578381815181106111e1576111e0614030565b5b602002602001015160026000878481518110611200576111ff614030565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611262919061428c565b9250508190555080806112749061408e565b9150506111c5565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f49291906142c0565b60405180910390a461130b81600087878787612319565b61131a81600087878787612321565b5050505050565b8151835114611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061426c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614369565b60405180910390fd5b60006113de6110ec565b90506113ee818787878787612303565b60005b84518110156115a257600085828151811061140f5761140e614030565b5b60200260200101519050600085838151811061142e5761142d614030565b5b6020026020010151905060006002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c7906143fb565b60405180910390fd5b8181036002600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611587919061428c565b925050819055505050508061159b9061408e565b90506113f1565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116199291906142c0565b60405180910390a461162f818787878787612319565b61163d818787878787612321565b505050505050565b611656816116516110ec565b6124f8565b50565b611663828261257d565b611688816001600085815260200190815260200160002061265d90919063ffffffff16565b505050565b611697828261268d565b6116bc816001600085815260200190815260200160002061276e90919063ffffffff16565b505050565b6116c961279e565b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61170d6110ec565b60405161171a9190613ab3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a9061448d565b60405180910390fd5b80518251146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce9061426c565b60405180910390fd5b60006117e16110ec565b905061180181856000868660405180602001604052806000815250612303565b60005b835181101561195057600084828151811061182257611821614030565b5b60200260200101519050600084838151811061184157611840614030565b5b6020026020010151905060006002600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da9061451f565b60405180910390fd5b8181036002600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806119489061408e565b915050611804565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119c89291906142c0565b60405180910390a46119ee81856000868660405180602001604052806000815250612319565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906141da565b60405180910390fd5b6000611a6d6110ec565b90506000611a7a856127e7565b90506000611a87856127e7565b9050611a9883600089858589612303565b846002600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af8919061428c565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611b7692919061453f565b60405180910390a4611b8d83600089858589612319565b611b9c83600089898989612861565b50505050505050565b611bad612a38565b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bf16110ec565b604051611bfe9190613ab3565b60405180910390a1565b6000611c178360000183612a82565b60001c905092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906145da565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d8191906131ed565b60405180910390a3505050565b6000611d9c82600001612aad565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990614369565b60405180910390fd5b6000611e1c6110ec565b90506000611e29856127e7565b90506000611e36856127e7565b9050611e46838989858589612303565b60006002600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906143fb565b60405180910390fd5b8581036002600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856002600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f95919061428c565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161201292919061453f565b60405180910390a4612028848a8a86868a612319565b612036848a8a8a8a8a612861565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a79061448d565b60405180910390fd5b60006120ba6110ec565b905060006120c7846127e7565b905060006120d4846127e7565b90506120f483876000858560405180602001604052806000815250612303565b60006002600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561218c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121839061451f565b60405180910390fd5b8481036002600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161225a92919061453f565b60405180910390a461228084886000868660405180602001604052806000815250612319565b50505050505050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122fc57506122fb82612abe565b5b9050919050565b612311868686868686612b38565b505050505050565b505050505050565b6123408473ffffffffffffffffffffffffffffffffffffffff16612b96565b156124f0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161238695949392919061464f565b6020604051808303816000875af19250505080156123c257506040513d601f19601f820116820180604052508101906123bf91906146cc565b60015b612467576123ce614706565b806308c379a00361242a57506123e2614728565b806123ed575061242c565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242191906132c5565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e9061482a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e5906148bc565b60405180910390fd5b505b505050505050565b6125028282610c96565b6125795761250f81612bb9565b61251d8360001c6020612be6565b60405160200161252e9291906149b0565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257091906132c5565b60405180910390fd5b5050565b6125878282610c96565b61265957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125fe6110ec565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000612685836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e22565b905092915050565b6126978282610c96565b1561276a57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061270f6110ec565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000612796836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e92565b905092915050565b6127a6610ab7565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614a36565b60405180910390fd5b565b60606000600167ffffffffffffffff811115612806576128056132ec565b5b6040519080825280602002602001820160405280156128345781602001602082028036833780820191505090505b509050828160008151811061284c5761284b614030565b5b60200260200101818152505080915050919050565b6128808473ffffffffffffffffffffffffffffffffffffffff16612b96565b15612a30578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128c6959493929190614a56565b6020604051808303816000875af192505050801561290257506040513d601f19601f820116820180604052508101906128ff91906146cc565b60015b6129a75761290e614706565b806308c379a00361296a5750612922614728565b8061292d575061296c565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296191906132c5565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e9061482a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a25906148bc565b60405180910390fd5b505b505050505050565b612a40610ab7565b15612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7790614afc565b60405180910390fd5b565b6000826000018281548110612a9a57612a99614030565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b315750612b3082612fa6565b5b9050919050565b612b46868686868686613010565b612b4e610ab7565b15612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8590614b8e565b60405180910390fd5b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060612bdf8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612be6565b9050919050565b606060006002836002612bf99190614bae565b612c03919061428c565b67ffffffffffffffff811115612c1c57612c1b6132ec565b5b6040519080825280601f01601f191660200182016040528015612c4e5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612c8657612c85614030565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612cea57612ce9614030565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612d2a9190614bae565b612d34919061428c565b90505b6001811115612dd4577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612d7657612d75614030565b5b1a60f81b828281518110612d8d57612d8c614030565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612dcd90614bf0565b9050612d37565b5060008414612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f90614c65565b60405180910390fd5b8091505092915050565b6000612e2e8383613018565b612e87578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612e8c565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114612f9a576000600182612ec49190614c85565b9050600060018660000180549050612edc9190614c85565b9050818114612f4b576000866000018281548110612efd57612efc614030565b5b9060005260206000200154905080876000018481548110612f2157612f20614030565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612f5f57612f5e614cb9565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612fa0565b60009150505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061307a8261304f565b9050919050565b61308a8161306f565b811461309557600080fd5b50565b6000813590506130a781613081565b92915050565b6000819050919050565b6130c0816130ad565b81146130cb57600080fd5b50565b6000813590506130dd816130b7565b92915050565b600080604083850312156130fa576130f9613045565b5b600061310885828601613098565b9250506020613119858286016130ce565b9150509250929050565b61312c816130ad565b82525050565b60006020820190506131476000830184613123565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131828161314d565b811461318d57600080fd5b50565b60008135905061319f81613179565b92915050565b6000602082840312156131bb576131ba613045565b5b60006131c984828501613190565b91505092915050565b60008115159050919050565b6131e7816131d2565b82525050565b600060208201905061320260008301846131de565b92915050565b60006020828403121561321e5761321d613045565b5b600061322c848285016130ce565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561326f578082015181840152602081019050613254565b60008484015250505050565b6000601f19601f8301169050919050565b600061329782613235565b6132a18185613240565b93506132b1818560208601613251565b6132ba8161327b565b840191505092915050565b600060208201905081810360008301526132df818461328c565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133248261327b565b810181811067ffffffffffffffff82111715613343576133426132ec565b5b80604052505050565b600061335661303b565b9050613362828261331b565b919050565b600067ffffffffffffffff821115613382576133816132ec565b5b602082029050602081019050919050565b600080fd5b60006133ab6133a684613367565b61334c565b905080838252602082019050602084028301858111156133ce576133cd613393565b5b835b818110156133f757806133e388826130ce565b8452602084019350506020810190506133d0565b5050509392505050565b600082601f830112613416576134156132e7565b5b8135613426848260208601613398565b91505092915050565b600080fd5b600067ffffffffffffffff82111561344f5761344e6132ec565b5b6134588261327b565b9050602081019050919050565b82818337600083830152505050565b600061348761348284613434565b61334c565b9050828152602081018484840111156134a3576134a261342f565b5b6134ae848285613465565b509392505050565b600082601f8301126134cb576134ca6132e7565b5b81356134db848260208601613474565b91505092915050565b600080600080608085870312156134fe576134fd613045565b5b600061350c87828801613098565b945050602085013567ffffffffffffffff81111561352d5761352c61304a565b5b61353987828801613401565b935050604085013567ffffffffffffffff81111561355a5761355961304a565b5b61356687828801613401565b925050606085013567ffffffffffffffff8111156135875761358661304a565b5b613593878288016134b6565b91505092959194509250565b6000819050919050565b6135b28161359f565b81146135bd57600080fd5b50565b6000813590506135cf816135a9565b92915050565b6000602082840312156135eb576135ea613045565b5b60006135f9848285016135c0565b91505092915050565b61360b8161359f565b82525050565b60006020820190506136266000830184613602565b92915050565b600080600080600060a0868803121561364857613647613045565b5b600061365688828901613098565b955050602061366788828901613098565b945050604086013567ffffffffffffffff8111156136885761368761304a565b5b61369488828901613401565b935050606086013567ffffffffffffffff8111156136b5576136b461304a565b5b6136c188828901613401565b925050608086013567ffffffffffffffff8111156136e2576136e161304a565b5b6136ee888289016134b6565b9150509295509295909350565b6000806040838503121561371257613711613045565b5b6000613720858286016135c0565b925050602061373185828601613098565b9150509250929050565b600067ffffffffffffffff821115613756576137556132ec565b5b602082029050602081019050919050565b600061377a6137758461373b565b61334c565b9050808382526020820190506020840283018581111561379d5761379c613393565b5b835b818110156137c657806137b28882613098565b84526020840193505060208101905061379f565b5050509392505050565b600082601f8301126137e5576137e46132e7565b5b81356137f5848260208601613767565b91505092915050565b6000806040838503121561381557613814613045565b5b600083013567ffffffffffffffff8111156138335761383261304a565b5b61383f858286016137d0565b925050602083013567ffffffffffffffff8111156138605761385f61304a565b5b61386c85828601613401565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138ab816130ad565b82525050565b60006138bd83836138a2565b60208301905092915050565b6000602082019050919050565b60006138e182613876565b6138eb8185613881565b93506138f683613892565b8060005b8381101561392757815161390e88826138b1565b9750613919836138c9565b9250506001810190506138fa565b5085935050505092915050565b6000602082019050818103600083015261394e81846138d6565b905092915050565b60008060006060848603121561396f5761396e613045565b5b600061397d86828701613098565b935050602084013567ffffffffffffffff81111561399e5761399d61304a565b5b6139aa86828701613401565b925050604084013567ffffffffffffffff8111156139cb576139ca61304a565b5b6139d786828701613401565b9150509250925092565b600080600080608085870312156139fb576139fa613045565b5b6000613a0987828801613098565b9450506020613a1a878288016130ce565b9350506040613a2b878288016130ce565b925050606085013567ffffffffffffffff811115613a4c57613a4b61304a565b5b613a58878288016134b6565b91505092959194509250565b60008060408385031215613a7b57613a7a613045565b5b6000613a89858286016135c0565b9250506020613a9a858286016130ce565b9150509250929050565b613aad8161306f565b82525050565b6000602082019050613ac86000830184613aa4565b92915050565b613ad7816131d2565b8114613ae257600080fd5b50565b600081359050613af481613ace565b92915050565b60008060408385031215613b1157613b10613045565b5b6000613b1f85828601613098565b9250506020613b3085828601613ae5565b9150509250929050565b60008060408385031215613b5157613b50613045565b5b6000613b5f85828601613098565b9250506020613b7085828601613098565b9150509250929050565b600080600080600060a08688031215613b9657613b95613045565b5b6000613ba488828901613098565b9550506020613bb588828901613098565b9450506040613bc6888289016130ce565b9350506060613bd7888289016130ce565b925050608086013567ffffffffffffffff811115613bf857613bf761304a565b5b613c04888289016134b6565b9150509295509295909350565b600080600060608486031215613c2a57613c29613045565b5b6000613c3886828701613098565b9350506020613c49868287016130ce565b9250506040613c5a868287016130ce565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613cc0602a83613240565b9150613ccb82613c64565b604082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d3d57607f821691505b602082108103613d5057613d4f613cf6565b5b50919050565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000602082015250565b6000613db2603883613240565b9150613dbd82613d56565b604082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613e44602e83613240565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613ed6602f83613240565b9150613ee182613e7a565b604082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f686176652070617573657220726f6c6520746f20756e70617573650000000000602082015250565b6000613f68603b83613240565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613ffa602983613240565b915061400582613f9e565b604082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614099826130ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140cb576140ca61405f565b5b600182019050919050565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f686176652070617573657220726f6c6520746f20706175736500000000000000602082015250565b6000614132603983613240565b915061413d826140d6565b604082019050919050565b6000602082019050818103600083015261416181614125565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006141c4602183613240565b91506141cf82614168565b604082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614256602883613240565b9150614261826141fa565b604082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b6000614297826130ad565b91506142a2836130ad565b92508282019050808211156142ba576142b961405f565b5b92915050565b600060408201905081810360008301526142da81856138d6565b905081810360208301526142ee81846138d6565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614353602583613240565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006143e5602a83613240565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614477602383613240565b91506144828261441b565b604082019050919050565b600060208201905081810360008301526144a68161446a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614509602483613240565b9150614514826144ad565b604082019050919050565b60006020820190508181036000830152614538816144fc565b9050919050565b60006040820190506145546000830185613123565b6145616020830184613123565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006145c4602983613240565b91506145cf82614568565b604082019050919050565b600060208201905081810360008301526145f3816145b7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614621826145fa565b61462b8185614605565b935061463b818560208601613251565b6146448161327b565b840191505092915050565b600060a0820190506146646000830188613aa4565b6146716020830187613aa4565b818103604083015261468381866138d6565b9050818103606083015261469781856138d6565b905081810360808301526146ab8184614616565b90509695505050505050565b6000815190506146c681613179565b92915050565b6000602082840312156146e2576146e1613045565b5b60006146f0848285016146b7565b91505092915050565b60008160e01c9050919050565b600060033d11156147255760046000803e6147226000516146f9565b90505b90565b600060443d106147b55761473a61303b565b60043d036004823e80513d602482011167ffffffffffffffff821117156147625750506147b5565b808201805167ffffffffffffffff81111561478057505050506147b5565b80602083010160043d03850181111561479d5750505050506147b5565b6147ac8260200185018661331b565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614814603483613240565b915061481f826147b8565b604082019050919050565b6000602082019050818103600083015261484381614807565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006148a6602883613240565b91506148b18261484a565b604082019050919050565b600060208201905081810360008301526148d581614899565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061491d6017836148dc565b9150614928826148e7565b601782019050919050565b600061493e82613235565b61494881856148dc565b9350614958818560208601613251565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061499a6011836148dc565b91506149a582614964565b601182019050919050565b60006149bb82614910565b91506149c78285614933565b91506149d28261498d565b91506149de8284614933565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614a20601483613240565b9150614a2b826149ea565b602082019050919050565b60006020820190508181036000830152614a4f81614a13565b9050919050565b600060a082019050614a6b6000830188613aa4565b614a786020830187613aa4565b614a856040830186613123565b614a926060830185613123565b8181036080830152614aa48184614616565b90509695505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614ae6601083613240565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f455243313135355061757361626c653a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b6000614b78602c83613240565b9150614b8382614b1c565b604082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b6000614bb9826130ad565b9150614bc4836130ad565b9250828202614bd2816130ad565b91508282048414831517614be957614be861405f565b5b5092915050565b6000614bfb826130ad565b915060008203614c0e57614c0d61405f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614c4f602083613240565b9150614c5a82614c19565b602082019050919050565b60006020820190508181036000830152614c7e81614c42565b9050919050565b6000614c90826130ad565b9150614c9b836130ad565b9250828203905081811115614cb357614cb261405f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203c4f5ef93e9690509cf30b7d867da5a9b5e342c56f321eea6dd53bc6cedb8b2364736f6c63430008130033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000003c68747470733a2f2f76312d746573742e6c61646465722e746f702f6c61646465722f4c6567656e6461727942697472756557686561742f312e6a7067000000000000000000000000000000000000000000000000000000000000000000000009546f776e2053746172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164c6567656e646172792042697472756520576865617400000000000000000000