diff --git a/Makefile b/Makefile index c27112a2c4..6aac273f57 100644 --- a/Makefile +++ b/Makefile @@ -96,9 +96,6 @@ else GIT_TREE_STATE ?= clean endif -# The default linters used by lint and local-lint -LINTERS ?= "gosec,goconst,gofmt,goimports,unparam" - ### ### These variables should not need tweaking. ### @@ -221,22 +218,12 @@ endif lint: ifneq ($(SKIP_TESTS), 1) - @$(MAKE) shell CMD="-c 'hack/lint.sh $(LINTERS)'" + @$(MAKE) shell CMD="-c 'hack/lint.sh'" endif local-lint: ifneq ($(SKIP_TESTS), 1) - @hack/lint.sh $(LINTERS) -endif - -lint-all: -ifneq ($(SKIP_TESTS), 1) - @$(MAKE) shell CMD="-c 'hack/lint.sh $(LINTERS) true'" -endif - -local-lint-all: -ifneq ($(SKIP_TESTS), 1) - @hack/lint.sh $(LINTERS) true + @hack/lint.sh endif update: diff --git a/changelogs/unreleased/6008-blackpiglet b/changelogs/unreleased/6008-blackpiglet new file mode 100644 index 0000000000..277439df5e --- /dev/null +++ b/changelogs/unreleased/6008-blackpiglet @@ -0,0 +1 @@ +Modify golangci.yaml file. Resolve found lint issues. \ No newline at end of file diff --git a/config/crd/v1/bases/velero.io_restores.yaml b/config/crd/v1/bases/velero.io_restores.yaml index 880d11f6f6..5b95c27416 100644 --- a/config/crd/v1/bases/velero.io_restores.yaml +++ b/config/crd/v1/bases/velero.io_restores.yaml @@ -56,7 +56,7 @@ spec: nullable: true type: array existingResourcePolicy: - description: ExistingResourcePolicy specifies the restore behaviour + description: ExistingResourcePolicy specifies the restore behavior for the kubernetes resource to be restored nullable: true type: string diff --git a/config/crd/v1/crds/crds.go b/config/crd/v1/crds/crds.go index c9aa6361a1..7416414553 100644 --- a/config/crd/v1/crds/crds.go +++ b/config/crd/v1/crds/crds.go @@ -36,7 +36,7 @@ var rawCRDs = [][]byte{ []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WO\x93ܦ\x13\xbdϧ\xe8\xf2\xef\xe0_\xaa,\x8d]9$5\xb7d\xed\xc3V\x1cǵ\xeb\xec%\x95\x03\x83z$\xb2\b\b\xdd\xccz\xf3\xe9S\r\xd2\xfc\xd1hfLJp\x134\xcd\xe3\xf1\xfa\x81\x16UU-T0\x0f\x18\xc9x\xb7\x02\x15\f~et\xf2E\xf5\xe3\x8fT\x1b\xbfܾ[<\x1a\u05ec\xe0&\x11\xfb\xfe\x0eɧ\xa8\xf1=n\x8c3l\xbc[\xf4ȪQ\xacV\v\x00\xe5\x9cg%\xdd$\x9f\x00\xda;\x8e\xdeZ\x8cU\x8b\xae~Lk\\'c\x1b\x8c9\xf9\xb8\xf4\xf6m\xfdC\xfdv\x01\xa0#\xe6\xe9_L\x8fĪ\x0f+p\xc9\xda\x05\x80S=\xae\xa0\xf1O\xcez\xd5D\xfc;!1\xd5[\xb4\x18}m\xfc\x82\x02jY\xb4\x8d>\x85\x15\xec\a\xca\xdc\x01P\xd9\xcc\xfb!\xcd]I\x93G\xac!\xfeen\xf4\xa3\x19\"\x82MQ\xd9S\x10y\x90\x8ck\x93U\xf1dx\x01@\xda\a\\\xc1'\x81\x11\x94\xc6f\x010\xec=ê\x86\xddmߕT\xba\xc3^\x15\xbc\x00>\xa0\xfb\xe9\xf3\xed\xc3\xf7\xf7G\xdd\x00\r\x92\x8e&pfp\x82\x19\f\x81\x82\x01\x01\xb0߁\x02\xe5@E6\x1b\xa5\x196\xd1\xf7\xb0V\xfa1\x85]V\x00\xbf\xfe\v5\x03\xb1\x8f\xaa\xc57@Iw\xa0$_\t\x05\xeb[\xd8\x18\x8b\xf5nR\x88>`d3\xb2\\ځ\xb8\x0ez'\xc0_\xcb\xdeJ\x144\xa2*$\xe0\x0eG~\xb0\x19\xe8\x00\xbf\x01\xee\fA\xc4\x10\x91\xd0\x15\x9d\x1d%\x06\tRn\xd8A\r\xf7\x18%\rP\xe7\x93mD\x8c[\x8c\f\x11\xb5o\x9d\xf9g\x97\x9b\x84!Y\xd4*\x1e\xe5\xb0o\xc61F\xa7,l\x95M\xf8\x06\x94k\xa0W\xcf\x101\xf3\x94\xdcA\xbe\x1cB5\xfc\xea#\x82q\x1b\xbf\x82\x8e9\xd0j\xb9l\r\x8fE\xa5}\xdf'g\xf8y\x99\xebì\x13\xfbH\xcb\x06\xb7h\x97d\xdaJE\xdd\x19F\xcd)\xe2R\x05Se\xe8.\x17V\xdd7\xff\x8bC\x19\xd2\xeb#\xac\xfc,2#\x8eƵ\a\x03Y\xf3\x17N@T_\x04S\xa6\x96]쉖.a\xe7\xee\xc3\xfd\x17\x18\x97·1e\xbf(g7\x91\xf6G \x84\x19\xb7\xc1X\x0e1+Or\xa2k\x827\x8e\xf3\x87\xb6\x06ݔ~J\xeb\xde0\x8db\x96\xb3\xaa\xe1&;\r\xac\x11Rh\x14cSí\x83\x1bգ\xbdQ\x84\xff\xf9\x01\b\xd3T\t\xb1\xd7\x1d\xc1\xa1IN\x83\vk\a\x03\xa3\x93\x9d9\xafI\xa9\xdf\a\xd4rzB\xa0\xcc4\x1b\xa3si\xc0\xc6GP\xfb\xca\x1f\b\xac\x8f2\xcfWn\x06\xa7b\x8b<\xed\x9d`\xf9\x92\x83d\xf9\xa7N\x1d\x1b\xcd\xff\xb1nk\xf1\n\x1a\x80\x14\xf7\xf8\xae>\xc9x\x1e\x03̪w\x16\xc9(b\xa1Ax\x15+\x10\x93:\xc4t\xba\xb44t\xa9\x9f_\xa0\x82\x9f3揾\xbd8~\xe3\x1d\x8b\xdc/\x06=x\x9bz\xbcw*P\xe7_\x88\xbde\xec\u007f\v\x18\xcbUz1t\xbc\x91w\xb7ԅ\xc0dϮ{\x87\xe2\xf7x~\xa7C\xc0UY\xae\xc04D^\xb5ћ\xfb\xdbo\xa1\xf0L\xf8\xc5C:S\xb6c\xcb\xd7\xf3\xcb\x1a\x94\v~ԠL)w\x16\x82<{\xa2CF\xda\xdb\xe7\x93\xe1n6#\xc0Sgt\x97'f\x01\x8b3\x13ym\xb2\xcf};|\xa9{\x13q\xa6\x88\xaa\\\\3\xdd\x02\xfe\xa4\xfb\x8c[\x9d[\xa0\x1a\x1c\xe4*\xc7cʼn\xbe\xc1\xf3r\xfcH\xb5N1\xa2\xe3!K~\x03L'\\kz\xa3S\xfc~\xf7\xf1\x05\xe7{\xbf\x8f̯\\e\\A\x13\"VdZy\xb9Șx_\xf6\xa4S2J;~I\x1d\x135{\xa2\xf85\x98R0/@\xfc\xb0\v,\x06\x8d\xae\\\xbeӷbN\x88\x94\x1f6ZM\x9fT\xd2\xd6\b\rZdl`\xfd\\n\x9agb\xecOqo|\xec\x15\xaf@.\xe5\x8a͌\x8c\xe4=\xaf\xd6\x16W\xc01\x9dS\xd9\xec\xc6C\xa7h\xa6\f\x8f\xf6\xfcYb愱+Ƌʀ\xb3\xf7A\x05\x9f\xf0i\xa6\xf7s\xf4\x1a\x89\xf0\xb4\x8c\xce\xeed\xb6\bN:I^N\xcd\x01KÃ|\xe8ٗ\x8c\xd2\x1a\x03c\xf3i\xfa\x97\xf3\xea\xd5\xd1oK\xfe\xd4\xde5\xa6\xfc\xa0\xc1\x1f\u007f.JVl\x1eƿ\x11\xe9\xfc7\x00\x00\xff\xff:@\xbd\xf3\x1a\x0e\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Z\xdds\x1b\xb7\x11\u007f\xe7_\xb1\xe3<\xa8\x991\x8f\x89\xdbi;|s\xa4\xa6\xa36\x915\x96\xad\x17\x8f\x1f\xc0\xc3\xf2\x0e\xd1\x1d\x80\x028\xcal&\xff{g\xf1q\xbc\x0f\x90\x944ur/6\xf1\xb1\xf8a\xbfw\xa1\xc5r\xb9\\0-\xee\xd1X\xa1\xe4\x1a\x98\x16\xf8š\xa4_\xb6x\xf8\xbb-\x84Z\xed\xbe_<\b\xc9\xd7p\xd9Y\xa7\xda\xf7hUgJ\xbc\u00ad\x90\xc2\t%\x17-:ƙc\xeb\x05\x00\x93R9FÖ~\x02\x94J:\xa3\x9a\x06ͲBY\xf38\xfa\x01\xed\xe4\xfa\x8b\x99\xdb\x1e\xd1~[aޞ\xc3\xf4\xee\xfb\xe0@\xcb\x1a[\xb6\x8e+\x95F\xf9\xf6\xf6\xfa\xfe\xcfw\xa3a\x00m\x94F\xe3Dr\xe8\xe1\x1bı\xc1(\x8cY}A\x04\xc3*\xe0\x14\xc0\xd0\x06\xab\bc\xc8#\x86 \x0eaIu\rZ\x94nȒ\xf4\xa9-0\tj\xf3\v\x96\xae\x80;4D&\t\xa6Tr\x87Ɓ\xc1RUR\xfc\xb7\xa7mI\xd7\xe8І9\x8cq\xe5\xf0y\xd7/Y\x03;\xd6t\xf8\x1a\x98\xe4в=\x18\xa4S\xa0\x93\x03z~\x89-\xe0ge\x10\x84ܪ5\xd4\xcei\xbb^\xad*\xe1R\xfc.U\xdbvR\xb8\xfdʇb\xb1\xe9\x9c2v\xc5q\x87\xcdʊj\xc9LY\v\x87\xa5\xeb\f\xae\x98\x16K\x0f]\xfa\x18^\xb4\xfc\x1b\x13#\xbe\xbd\x18a\x9d)F\xf8|x=!\x01\n\xb0 ,\xb0\xb85\xdc\xe2\xc0\xe8\xe4 \xdf\xff\xe3\xee\x03\xa4\xa3\xbd0\xa6\xdc\xf7|?l\xb4\a\x11\x10Ä\xdcbt0[\xa3ZO\x13%\xd7JH\xe7\u007f\x94\x8d@9e\xbf\xed6\xadp$\xf7\xffth\x1dɪ\x80K\x9fԐ\xc3\xec4i./\xe0Z\xc2%k\xb1\xb9d\x16\xbf\xba\x00\x88\xd3vI\x8c}\x9a\b\x86\xf9\xd8tq\xe0\xda`\"%MG\xe45Ʉ\xee4\x96$=b \xed\x14[\x11=\x14\xb9s6]^\x8c\b\xe7\r\x97\xbe\xacw\x9a.\x82\\p\x99\xecI\xd8\xe4\xc0\xa7&\x87\x19VΈ\x024S/\xdb\xef\x19F.\x1b\x1dl1\xa3pD\f\xf4I\xc5\xf1\xcc=n\x14\xc7\x1cl\xda\n\xaefA[)\xe3#\u007f\xd4I9?\x85>%\x9f\x05L+~\x06W<\x91\x81\xc1-\x1a\x94%&\xc7u*\x9d\xc9 \x1b&\x1as\x8cǕ\x02Nx\xf5,ⷷ\xd7ɓ'&F\xecn~\xee\x19\xfeз\x15\xd8p\x1f\xe8Ο}q\xbd\r\x87y\x9f\xe6\x140\xd0\x02Cb\xda\a\t\x10\xd2:d\x1c\xd46K\x91\xca' \xc37\x18w\xbc\x0e\x1e,\xba\xcaCh!\xde\x03#\xdf)8\xfc\xeb\xee\xdd\xcd\xea\x9f9\xd6\xf7\xb7\x00V\x96h}^\xee\xb0E\xe9^\xf7\xa5\x02G+\frJ\xfc\xb1h\x99\x14[\xb4\xae\x88g\xa0\xb1\x9f\xde|\xces\x0f\xe0Ge\x00\xbf\xb0V7\xf8\x1aD\xe0x\uf593\xd2\b\x1b\xd8\xd1S\x84G\xe1j1\r\xa6=\aH\xbd\xe2\xb5\x1f\xfdu\x1d{@P\xf1\xba\x1dB#\x1ep\r\xaf|Zs\x80\xf9+\xd9\xceo\xaf\x8eP\xfdS0\xedW\xb4\xe8U\x00\xd7\xc7\xe1\xa1\xd1\x1d@\x06\xcb3\xa2\xaa\xf0\x90UM?\x1fT\xc8U\u007f\v\xca\x10\a\xa4\x1a\x90\xf0\x84Iz\xc1Q\"\x9f\x81\xfe\xf4\xe6\xf3Q\xc4c~\x81\x90\x1c\xbf\xc0\x1b\x10\xb1\xd8Ҋ\u007f[\xc0\a\xaf\x1d{\xe9\xd8\x17:\xa9\xac\x95\xc5c\x9cU\xb2ه\xf6\x881\tʄyp\xcdL\ueffa*\x13C;C\x88\xf6\xcb\xd8\xf6[2\xc9\xe9\xffVXG\xe3/\xe2`'\x9ed\xbe\x1f\xaf\xaf~\x1f\x05\xefċl\xf5H\x02\x1etd\xd8\xe58\x93\x98\xbd\x1f-N\xa9c&c\xed\xd7<+3t\xacʤb\xc3\xf6䩄\xed$\aƭ\x18VY`\x06\x81A\xcb4I\xee\x01\xf7\xcb\x10\xe25\x13\x14\x9f)\x04\xf7}\x0e`Z7\"\x1b\x8ac \x8fIh\xe4\x04\x15ڬ\xb2\xc7\ue795ð\xafsF\n\x1f\aK\x93\f\xcet\x96\\\x9d\xb3\xd4Q\xbfi\x8e\x16e\xd7Ρ,\xe1Ai\xc12\xe3\x06\xad\x13ef\xe2\xd5<\xd38!\xac\xc0\xcb3<\x88-\xe8L\xf1\x12E\x112\xbd\xbe\x80\xf1]\xc7\\\x85p\xbc<8\n\x91*t\xca[\xc7\x10\x97\xf9Rr\xb2\x86J\xabɐV|1ed\xa6\xf3\x98&G\x9d\xd1!\xd2y}\xed\x1b\xdeϨ\xb0C#?\xf24\xf8S\x97\xda\xfbTL\xbc\xb4\xc6.\x15\xe5\xe9㧕\xd3⽜\xef\xf0\xed,ã\xba\x8b\x96\xacw\xd0\xf6\x8fg\xe4\x8ad\x18\x90\v;}\x04#j\xc8}\x12M9\xfe\x96\x89\x069\xa4\xb7\x9d\xe9\x9e\f\xd5!\x95\rn\xc9\xdd\a\xd3K\xa5i\x84\xd7'\xaa5\x82\xf5}\xa2\v{\x82fg\x91\xfb\x9eF\x86\t\xf3\xe4u\xabL\xcb\\\xe8k.\xb3De\xd74l\xd3\xe0\x1a\x9c\xe9\xe6\xd3',\xb1EkYu\xce\x14\u007f\x0e\xabB\xc5\x1e\xb7\x00ۨ\xce\xf5%\xfb\xc8=^بS\xcf\xeb\x1ad\x8b\xe1\xb1:3*VlLڛ\xc6\xef\x19:\x82Ã\xa0G\xb5\xc1|\xd0\u007f\x89O\x00\xf0\x0fZ\xe7\x10Қ\x9c\x81\xf5\xde뤅\xc1\t\xa7|\x83\x8f\x99\xd1\xd9C\xdcp\xf22\x99Lf\xeeGo\rϺ\u007f<\xe8\x1c\v\xe22\xa8U\x93\x8cY9ր\xec\xda\r\x1a\xe2\xc3f\xefЎ\xddy\xae?\xe3\xeb\xba\x03\x1b\a\xfb\x93\xfc\x02\xa5X\xaa\x96L\xfa>*Y\x97S\xc0\x85\xd5\r\xdbg\b\xa7\x8b\xf8܍\x8c\x8b\\\xc0A\x9f\x93Qk4~\xea\xb9}%\x8f\xe9J\xc9#\x95F\xb2g!\xdd_\xffr\"\xd3\x13\xd2a5\t\x0eq\x9e\xd8\xf9\x03\x9d\xf2uN8\x91\xc4Xɴ\xad\x95\xbb\xbe:\xa3\x05w\xfd\xc2d\r\xb3\xe79\xec\xa9EUȉ\xaa\xf7-\xcf2\xd5\xf1\x13\xf09\xa8\xa3\xc5g\xa2P||\xceŠ;\xd4̐\xa5\xfb7\x81\xcb\xe9\xa3\xd5k\xb0\xc27:)\xf3\f\xa9hhCX\nN\x94Z)\x83\x19\x97\t\xf3\xb02\n\"c\xf8\xbfg\xfc\xc8\xea\xc9l\xd0#\xe7\x03ڱY>\x1c\xe96\xfdC\xd0\x1a~\xfdmqHlXI\xc5\x13\xf2\x9b\xe9\x1fYĔ3\xfdՄ\xffY*\x19*\t\xbb\x86O\x9f\x17\xe9\xd9\xf2>\xfd1\x04\r\xfe/\x00\x00\xff\xff\xb0\xddǼ\x99\"\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4YKs\x1b\xb9\x11\xbe\xf3Wti\x0f\xcaV\x99\xc3]'\x95\xa4x\xb3\xa5lJɮ\xac2e]\\>\x80\x83\xe6\f\x963\x00\x02`H3[\xfb\xdfS\x8d\a9/\x92\xa2*Z\xcf\xc5\x16\xd0h|\xf8\xd0/4'\xd3\xe9t´xBc\x85\x92s`Z\xe0W\x87\x92\xfe\xb2\xd9\xfa\xef6\x13j\xb6\xf9q\xb2\x16\x92\xcfᦱN\xd5\x1fѪ\xc6\xe4x\x8b+!\x85\x13JNjt\x8c3\xc7\xe6\x13\x00&\xa5r\x8c\x86-\xfd\t\x90+錪*4\xd3\x02e\xb6n\x96\xb8lD\xc5\xd1x\xe5i\xeb\xcd\x0f\xd9߲\x1f&\x00\xb9A\xbf\xfcQ\xd4h\x1d\xab\xf5\x1cdSU\x13\x00\xc9j\x9c\x83V|\xa3\xaa\xa6F\x83\xd6)\x836\xdb`\x85FeBM\xacƜv-\x8cj\xf4\x1c\x0e\x13aqD\x14N\xf3\xa0\xf8\x93\xd7\xf31\xe8\xf1S\x95\xb0\xeeߣ\xd3?\v뼈\xae\x1aê\x11\x1c~\xd6\nY4\x153\xc3\xf9\t\x80͕\xc69\xdc\x13\x14\xcdr\xe4\x13\x80H\x80\x876\x05ƹ\xa7\x94U\x0fFH\x87\xe6\x86T$*\xa7\xc0\xd1\xe6Fh\xe7)\xdb\xeb\x01\xb5\x02W\"m\xe9\xe9fB\nY\xf8\xa1\x00\x01\x9c\x82%BD½2\x80_\xad\x92\x0f̕sȈ\xb8L+\x9eɤ3\xca\x04\xce\xef{\xa3nG\xe7\xb0\xce\bY\x1cC\xf6\u007f\x06\xd5\xc1\xf3\xa0\xf83\x91<\x96\xe8e\x12\x9aFW\x8aq4\xb4y\xc9$\xaf\x10\xc8r\xc1\x19&\xed\n\xcd\x11\x14i\xd9\xe3Nw\x91|J\xfaZ3\x97\xb0s\t\x15A\xb6\xb3\xfdS{\xe8ܾ\x0f\x8a\xc7\x05\x10\x8d\x1a\xacc\xae\xb1`\x9b\xbc\x04f\xe1\x1e\xb7\xb3;\xf9`Ta\xd0\xda\x11\x18^<\xd3%\xb3]\x1c\v?\xf1\xba8V\xca\xd4\xcc\xcdAH\xf7\u05ff\x1c\xc7\x16\x17eN9V\xbd\xdf9\xb4\x1d\xa4\x8f\xfdဖ\x9c\xad\x88\xd7\xffM\xe0.\tҭ\x92]^\xdf\xf7F\xc7\xc0\xb6\x94\xa6@\x9c\r\x82hG뻢\xab\x8f3\x17\x06\xc2\xf4\xe6\xc7\x10\xca\xf2\x12k6\x8f\x92J\xa3|\xf7p\xf7\xf4\xe7Eg\x18@\x1b\xa5\xd18\x91\xa2k\xf8ZY\xa55\n]f\xafIa\x90\x02N\xe9\x04mp\x8a0\x86\xa3f5\xff\xce\xc4\xfck\xaf;X\aN\x17>\x9f\xebN\xdc\x00%;\x10\x16X\\\x1aNq :\x85\xec\x8f\xffX\xdc\xcf\xfe9\xc6\xfc\xfe\x14\xc0\xf2\x1c\xad\xf5\xf9\x1ak\x94\xee\xcd>gs\xb4\xc2 \xa7\xc2\x05\xb3\x9aI\xb1B벸\a\x1a\xfb\xf9\xed\x97q\xf6\x00~R\x06\xf0+\xabu\x85o@\x04\xc6\xf7\xe1/ٌ\xb0\x81\x8e\xbdF\xd8\nW\x8a~\xd2\xda3@\xd6\x15\x8f\xbd\xf5\xc7ul\x8d\xa0\xe2q\x1b\x84J\xacq\x0eW\xbe\x12<\xc0\xfc\x8d\x1c\xeb\xf7\xab#Z\xff\x14\x1c芄\xae\x02\xb8}\xbek{\xe4\x01\xa4+\x99\x03gDQ\xe0\xa1\x10\xed\u007f>xSH\xfc\x1e\x94!\x06\xa4j\xa9\xf0\x8a\xe9\xf6B\x00\xfd\xf9헣\x88\xbb|\x81\x90\x1c\xbf\xc2[\x102p\xa3\x15\xff>\x83Go\x1d;\xe9\xd8W\xda)/\x95\xc5c\xcc*Y\xedB\xb5\xbfA\xb0\xaaF\xd8bUMC\xbd\xc1a\xcbv\xc4B\xba8\xb27\x06\x9a\x19w\xd2ZS\x95\xf1\xf8\xe1\xf6\xc3< #\x83*|\xbc\xa3\xec\xb4\x12T5P\xb9\x10r\x9e\xb7\xc6A\xd2L\x9fm\x82\xf98\x05y\xc9d\x81\xe1\xbc\b\xab\x86\xb2Pv\xfd\x12?\x1e\xa6\xfe\xf4\x8d\x94\x00\xfd\xc0\xf1͒\xe83\x0f\xe7+\xd5g\x1c\xae\xfd\xd6:y\xb8u\xb3D#ѡ?\x1fW\xb9\xa5\xa3娝\x9d\xa9\r\x9a\x8d\xc0\xedl\xab\xccZ\xc8bJ\xa69\r6`g\xfe\xc9<\xfb\xce\xff\xf3\xe2\xb3\xf8\xd7\xf5s\x0f\xd4y\xf4\xbf\xe6\xa9h\x1f;{ѡR\xad\xf8\xfc2q5\xacTN0\x11\f\xe0\f\a\xb1\x994\xf22\x8a\xf6\x13*E?B\xaf\x11oE\xe3!\xf6R\xbb\xa2\x874\x95\xbd]\x84\xd3\xf1\xf7^OF+>\xe9\x93\xd6v\xc9\xde\xe4\xc1\xa1\xfa\x13][\xed\xcdv\x9a\x9c\xed\xd3\f\x9fʾ\x83v\xc9c9t\xed\"\xef!f\xbb\xd4ˣ\aˋ\x9f˹\xa2\xc7@\xf7W\x8b\xd36p3\\\xe1{S\x86G\x9f\x105\xfa7hh8n\x99M\x9b\x8c\xdd7\xb4\xf4\x85\xa5>O\x92:\xe4\xbeT\xa7\x97Ċ\x89\n9\xec\u007f7\xf1\xcdq\xeb\x9b4\xd7c\x95iR\xd4X\xe4>n\x8c\x80\x1e\xaeK}O\xce\x1cNI\xc5@B6UŖ\x15\xce\xc1\x99f8}½j\xb4\x96\x15\xe7\xfc\xeb\x97 \x15^\xf1q\t\xb0\xa5j\xdc\xfe\x19\x1f\x1d-Rqm\xa3\x15\\\xd6J(\x99=\a\xe5\x81d\xc6,n\xef\xf2\xa7M\x0eN\x84\xb2{\u070e\x8c\x0e\xfa\xd0\xedɛdB#s?y븈\x80\xb8\xd19\x0e\xa2\x18\x94\xaaJ֭\x1c%\xa5\xa6^\xa2!\"|\xf3;1\x92\x02\xc7X_Ŀ\xa7\x0eL\x1e4\xa4X\x18T\xc5\x17bΤo\x13\x92\xfd:\x05\\X]\xb1݈\xdet\x12_2\x91\xf9\x92\x1f\x1d,&y!\xb9\xbf\x9f\xbb\xb4\x9f\xb3o\xee\x8f\x17tc?\x15\x8c\xddB\xbb\xefߛ\xdf\xff\xaa\xf1:;\x9c(\xe2\xacc\xc6=7\xec-:\xc2\xe7\"\x9eW=\x1e\xefڡk\x18\xa8\xba\xdb\xfc\x911j\x94\xa8\xc1\xa0G\xce[\xbac/\xb4=\xd2,\xf7\x9d\xfe9\xfc\xf6\xfb\xe4\x90\xeeXNU;\xf2\xfb\xfeOڱVI\xbfP\xfb?s%\xc3O\xcav\x0e\x9f\xbfL 6M\x9f\xd2\xcf\xce4\xf8\xbf\x00\x00\x00\xff\xffe\xe5\xd5&\b \x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xdc:\xa5\x02\x1b\x84\xa6.\x99\xc5r\r\xf7\x12>\xb2\n\xc5Gf\xf0\xea\f J\x9b\x15\x116\x8f\x05}}x:\xd8S\xad\xf7GT^\x13\xfc\n\xa7\xff\xb1\xc6bpbh\x1a߆c\x0e[\xa5\aʁ\xa6\xac\a@Ӈ\x96\x1e\u007f\xfaI\x83\x9d\xfes\xb2\x95\xffh\a\x92\xfc\xd0&\x1a\xc9\u007fmЩ8\u007fbq\xa4RF !\xeeω\xc5z\xf4\xff\x04M\xe9\xc1\x1f\x85hJ,[m;\xc2\xe5dǟF\x13\x9c9b\\\x92\xfc\x93\xfa\xa7m\xcb\xee_R\xa7\x89\x1d3\x8d@\x12ȥ\x87\a\\:d\x93\x94\xa6\x87[\xac\x12\x9b\x9b\xc5\x0e\x9c\x9dc\x1b\x81w`u\x83\x13\x94aZ\xb3\xe3\x04a\xa2mΥK;>(\x04\xc1\v\xec\x1b\nO\x1aod\x98\x1e\xef\b~\xe7T\xe1\x86\xd4Y\xc4\xf2A\t^\x1c\x17I\x93\x9a\x14\x8f[8|Q\x827\xb8g\a\xae\x1a\x9d\xc0\x89\x8e$\x8d}\xea,i\xa7M\x15)\xb3\x00\xa5\xbc\f\xe3$\xb5\xf6J=-1\xff\xcf4\xa6S\xdbP8\xb7.\xe2\xa2\x03\xbb\x83\x15\xdd \xe0\x0f,\x1a\x9b\xd8&@\xd98\v\xa24\xd4\xca\xd8i\xc6O+\x1f\xf0\xfa`JjaNjF\x98\x05]\x19YG\x88\x0e\xf4\xa6\x92H{\xad\x88u\xddX\xad\x1a?\xf6\xd4\xc0\xf5(\x9e\xa6\bl\x98\xc1\x12T\x10\xfbF\xa0\tk\x95\x8e\xfd\x9db\xb9\x9d\x04\xdd\"\xef]\r\xc16(\xc0\xa0\xc0\xc2*=\xa6d\x0e=\xfd\x93\xa3,'\xe8\x98P\x9bC\xf9\xef\x10\x9b\x01\t$\xe6\xcf{^\xec\xbd\x17@\xb2\xe9\xe0@\xa9\xd08\xcdA\x9e\xeaq\nIX\xe2}XdNwt\xcf\u0099:\x85\x97\xd2'ݓ\xa1o\xbbgA\xf3\x8e4Kx\x9f4\x9d\xdd\xf3\xff\x93\xb0є\\ \xb4\xf7\xa3\xa9\xaf+\xb4.\xaa\"o\xff~\vX\xd5\xf6x\v\xdcƷK\x10\x99\x10\xbd\xf5\xff\xc0\x8c9_\xe2\xefOg\xbe\xaa\xc4\xcfre\t\"q\xa5]\xfe\x0f\xc8\x14g,\x1e\x83\xad\xc8f\xc8_\xfb\xb3n\x81o[\x86\x94\xb7\xb0\xe5¢>\xe1̋\xce\xcbk\x10#\xc7\xde\xd1S1[\xec?\xfd \xcf\xc6t\x19\xa8L\xba\x9cN\xf6>q\f\x12\x86\x86y\x01.\xb8\xf8\x95k\xac|\\\xfc\xcdQ\xb3{\xe3\x02\x8a\x0f\x9f\u007f\xc2r\x8e<\x90'y#D>\x9cl\xb6\xbftp\xf4s\xd1\b\xaeO\x1b4\xf9\x8c\xc7-0x£\xf7X\x98\x04b\x0e\xb3\xce\xdfM\x86Oc\xe2\xb8ԋw\x8f\xf1\xe8\xc0\x84\\\xca\xe2\xec\\Q\xf0\xcf\x13&\xfc\xfd\xd43 \xed)D\xb8\x9e\x92\xf4\xc2\x11\xc2E\xde\xf9\xc4\x03\x97\x17\x8b\xbah\x199\xc8W$\U00049d3f\x00͖m\xbd\xfc\xa1c\xec[\xe3YD\xa7`\xcf\xebLD]\xfaР;-13\xf6\x9d\t^\xb6\vy\xb9\xbf\x97\xd3\xde\xf0\xf0\xf9\xac콼\xf5!\x99qR\xf2\x93B\xf3YY\xf7\xe6*\xe4\xf4\x1b\xbf\x80\x98~\xa2;^ҫm\xa2C?Ŗ!\xdc\xfe\xb9\xf7\x99\x94\x96=\xdc\xc0\xbd\xa4\xc0%\xd0\xc3%L\xfdr\xf3\xf6a\xf8T\x8dq94\xa9\xe4ʙ\xcauj%O\xecL\x90J\x0f82\xdeZ\xbb\xa8_0\x13\xec7\xb2$~\xbeO\x01\vV`\x19\xa3M\x97\xb8d\x16w\xbc\x80\n\xf5n\xcep\xf4\x9f\x9a\xf4{\xde\x162\xb5\xae\u007fΔ\xb0<\xd3\x1e\x9f\xa0\xba\xcb\xe5ͬ\xe8\xe4f\x8c\x8a\xcc^\x1c:\x91\xaf\x9c\x1e\xba\x8c\x913\xb1\xce\xffX\xa4.+KW\\b\xe2\xe1\f\x8d\u007f\x06/ƶ\xdfo\xcc[Ȋ\xd5t~\xff\x87̜\x13\xe8\xff\x85\x9aq\x9dq\x86?\xb8:\x91\xc0\xc1ܐ\x19\xeb/C+p\x03\xc4\xdf\x03\x13\xe3Lx\x029E\xba\x05\x857\xe4j;\xf2Xn\xe1y\xaf\x8c\xb7\xa9[\x8e\"\x95\xb2\x19>\xdc\xc0\x9b'<\xbe\xb9\x1d\xe9\x817\xf7\xf2\x8d7\xf0g\xab\x9b\xd6[PR\x1c\u135b\xfb\xe6%NP\xa6$f\r\x93\xc9\"\xaf\xed\xd5\x16\xaa\xaa\xd8i\x95/k\xab\x1f\xfd\xcc(\xd3\x01\x90\xe7\xbe\xde5\xee\\\xe6\xbb{Q\x86\\}\xef\x99\xdb=\x97\xc0\xe2\xf1G\x1d\x04\x8aA\xad\x965\x91\u007f\xf6\xcc\xc0\x06Q\xb6\xb9\xf1߃\xbd\xae\xb8\xbcw\v\xc0\xfbW\xb7\xefБ\xeb\"vFR\xb7\fm_8\x8b\x93\xeb\x1a\xa9\x12\x9e\xf7\xa8q \x15\xe3\x847y\x8c\x99 \xa5\xb2\xfd\xbc\x02\xc1\xadU\xf9\xd6\xc0\x96kc\xfb\x1b\xcd\x15\xb8\xc6\xe4\x8aÙ\x1c&\xec\xbe\xf1\nUc/\xe0\xc1\xa7n\xf6\xa0@[\xb1\x1f\xbcj*`\x95j2\x8c\xbb\u007fȾ𪭢\x06\x0e<3n\xdbz\x92˰XE\\\xaa\x05\xda\\\x16opK\xea\xa8P\xd2\xf0\x12u\xac\xf2{\xcerE\aw˸hR\xe5\x9b\xd4sn\x98*?i}Q\x94\xfa\xc5\xcf\xece\r\xf7\xeayH\xa0l\x12\xec\xd9\x01\x81o\x81[@Y\x10_P{\x95\xed\x96\b\xc4p\xa4\xc9\x16\xcb<\x05O\x0fʦ\xca#\xc0ʝl.g\x93b\xfd\xe1?3.\xae\xc16\x92\xbcˏ\xc6/\xdd\xec\xdf\xe4h\xb4J%߄m\x10\xbe\"+\x8f\xf1|0k)Tu2\xa0@7\xb2\xaf\x11\xafp2Ή\xef\xc2.^3p\xe3\x92g0\xf6$\x9f\xcfm\xdf\xdb!\x10W\xf5vh\x81\xd6\xd0]\x92\x9a\xb9\x1f\x00 S\x19\x1dg\xb7\xf7Vj\xce\xf0|6H\x01*\x96>\xe9E\xe63\xf8Ѿwi\xa2\f\x9e\xc4\xee|\xd7%\x8b\xb3\xfd\t\xf9Y\xa2\x1f\xab\xae]a咂\xfa\x80\xabF>I\xf5,W.\xa64\x8b\xd9\xfav\xf1\x8b\x15\xc7o\xa94\x86\xe2\x95/\x02\xd1\xfe^A)d\xb3\xf9\xac\xc0xN\n\x96Ԑoc\x9d\xf8sq\x17s\xeb\xcfL\x0e5Ǐ\xbe\xff4\xb7\xb7\xe9>=\xab\xe7?<\xef\xd1\xeeQ\xc7\xc6֕\xeb\xe1M\xa9ծ4ٹ\xc2m\xb3\x13\xc9O\xf4\xa6|\x13\xdeI\xfbS\xdaW\x96\x8d\x10\xb7$ج\x11ַ\xa2\xea&!DY=@\x1b\xa5\x04\xb2Ӷ\u061c\"\xfaR\xe9|\xd8\x0f֖\xaecC\x98\x8a\x8b$0\xf4\xbc\xf4]\x9f\xfd\xba\xec\xb0\x06\xee\xb2?q\xa7\xff\xf0V\xb1\x8c\xf2\xf6BQ{\xbe\x81n\x8e^c\xb1\xe9S\xac\x93\xc10.tV\xfe\xbe\xc8g\xb1\xfaR\x87s0\xe9/\x0e)\x98\x98r\xd2\x19\xe047E}\xae\xc6\xccxJ\xb9\xd0)\f\x19%\x82\xf8\xa1p'QE\xc0\xc6e\x1d\xc3i\v\x9d\xce\xdc\xc0{ث&\xd1]5C\x9d\x85Z\xfbt\x85=\xe4\x93Ѳ\xc3\xfb\xf5\xf0\x1f\xabB\xbd\xdd%O\x12\xd8=\xef\xdbT\x88s.d\xc9\x0f\xbcl\x98\x18\x1c\xb2\x9eXt\xd2\x03J\x83\xe4\"Uj#\xb1\x8a\xf3\ab\x04_j\x9fr?[\x1d\xcd{tye\xf9\x8b\x8b\xf1\xc3b\xfb\x84\x91:7\xfb\x9c\xdfu\x98_n\x9f\xaf\x8f\x9fSd?-\xa1O\x02].\xad\xe78\xe3\ve\xf4\v\x8a癍S/α\xe7\x94\xc7/*\x8a/\xf6\x16e\x96\u0087E\xeey\x90g\x14\xc0\xb3\x88\xb3\\\xec>\xbb\xc4\x1dJʳxd\x17\xb6\x13%\xebY\xc0\x93\xe5\xec\xb9B\xf5<\xc9\x13E\xec\xfc\xf2\xf4,hW\xba^.J\xbf^\xeb\xd9kD\x01Ӫf\xb1\xb0\xfc\xa2(!\xa3t|N\xc1x\x91b\x17\x16\x87\xdb\xe2\xefĺ疄\x87%\xdf\t\xa09\x85\xe0\x89B\xef\x04\xc4\xd9\xf2onyw\x02\xf6\x82ٝ\x95\x92\x99?\xdb\xc0\xe2o\xac\xae\xb9܍9\x9f+\x1f\xb3\xb21\xaa\x0e\xf7\xd7\x1c\bG\xdf\xff\x1fDN\xa9%\xfd7\x97\x89(+\xe6ո\xb4j\r\x1f\xe4q\x04\xd7\xf5{'\xa3\x8a\xe1G9\xb4\xadg.D\xff\xc3\x13\a\xb6\x0f*|\xc3eұ>\r\x9c\xf2\x99\x93LQz\xe0\xef.\x05U_N\x86\xf73u\xf3\xfes\xcau\xe6v\u007f\xa1\xff\\5\xc2\xf2:y\x88k\xad\x0e\xdc\xe5\xfd\xf6xl\xe9\xf9w\xe5>\xf9\xd8\x1c\x1d\xa4/_\xdb\xf3\xb5>\t\x05X\xeaT<\xa3\x10\xc0\xcc\x18\xfd\xc2\u007f\xf6X\xa8\x95\xfb\x92\x898\x19\xe5!|\x1ey\xeb\xce`*\x06\x97\U00043f0a\xc0\xb8O'M\"\xc71i]\xe6=\\\uf33bw\xbf6\xa8\x8f\xa0\x0e\xae\xd0\x1b\\\x9e\x85\x9ej\xaf)\fEdQw\x05\x05\xe8?\xb6=\xf1\xfc;\x8d\x01\x1f\xa4\xb7\xc1I\xb0'{tpHiu\xd1\x0e\xe9g\nd&\x86&\xa1J\xd5\xceN\xcbì\xa9\xc9mH\xben\xecs~\xf4\xb3\xe8w\\%\x02\xba<\x06\x9a\x01\x99\xdb`\x9cW\x94Xl(\xbeV,\xb4\x14\re\xbb\x81y\r\xc3\xd7h\x14>\xa3A\xf8\x8c\xa8輸(\x9bL9\x8d\xc0W\x89\x8e\xae\x18\x1f]#B\xba,FZ\x00y\xd2\xe0\x9bӺ\x9bUGˮ\xc2\xe4\xd4͖K\xb7\xf3-\xb9\x19\xad\xb8\x19\xf5\x9d\xa5\x9df\xb4ܞ\xd7j\x9bA\xc3+EOW\x8a\x9f\xae\x11A]7\x86Z\x8c\xa2\x16%g\xf6\xef\x8b\xcb\x00\xb1`\xfcY\x95\xf8\xa0\xb4]r\xf8\x1fN\xc7'\x8at\xbd H\x89\x12d\x1c\x9a\xaa\x05\x90/\x1f\xfc\xf8ːJ\xd7\xd3\xc2\xfa\x0fߗ\xf0\xf9\xda\x0e\x9cG\x84\\\xd2\x18\x9f%\xf0\xa0\xf9\x0e\x17#Ym\xf6\x89\xf0\xee\xe5\xc8Ho\xa2\xfd\xdd \x05\x19d\xd3\x14\x05\x1a\xb3mD,d\xbb\xfbް\x8cÓ}\x97\x11\x873*\xb6i\xeflջ\xed\xe8&\x833&\xa1&gTd\xc1j\xdb\xe8 \xe6E\xa3\xb5C\xd9\xff\xa7\xb6\xa3\x1b\x9a\x06`\xa7\x95V\xe84\x1a܉7/!\x1f\xc73\xdc=h\xba\xecU\xd6\xfb\x17ٴ\x05\xf3T~\x8a\x99\xb6٩\\\xf7`{0ν'\xd0X\x02\x1eP\x82\x92\xae\x93\x18˹F\xb8o.\xfe\xd5\a\xd4oM\v\xc7\xd5\xfa\xb7Jãeڶ[\x1fK\xc4V\xe9\x8a\xd9;(\x99\xc5\x15;\xccB\xa6/\x99\xd2z9U\xe9Z\x92\x83?\xeb\xfa\x88\x1d{\x85\b\x8d\xc4\x15\x1a\xc3v\xf1\xe6\xa4g\xd4\b;\x94D\xe2\xb9kt\xba^\xecp\x82ۖ\x10\xa2\x16+l\xc3\xc2\x02\xdeR\xb6I\xdcT\x02\xd0_\xceFC\xd8n\xf2\xdcpiq7J\x9f\x86>\xf0\xaf\xc8\xcc\xe9e~#B\xfc\xdc\x1f\x1b\x82_O\x03\xff\xe18\xf3\xfd\x1b\xee\xee7\xcb5\xcey\bʭ|VWF\xbdgfI]>И\xf6\x03\x89ޡl5\xe5\u05c9=\xa5\x1b\xb6W\xf0\x19\x9f\x13o\u007fvB\xef\x12\x1a飴\x82{\xf9\xa0Վb\x8cğ\xbf0n\xb9\xdc\xfd\xac\xf4\x83hv\\\xb6\xdd1\xe7\r~`\xdar&\xc4\xd1\xef'1\xf7c<̉\xff\x96gO\xfc1Ǥ\x80\xf3b4\xe0\x87u\xc1\x11\x97\xfe\xa0\xbb\xcf\x136\xaa\xb1\xfdS\xf1\xd6t\a&\x9d\x99u\xd0\xd6\xf0YY\x8cI7>\x04\xca\rl\xd0\xd8\x15n\xb7J[\x1f\x8c\xadV\xc0\xb7AQ\xa7\x82\fƅ\xf35\xfcU\x84䀴\x85\xdf\xd6\xf2)\rL\x1eA\xbbS᜔\x8a\x1d}\xf7 +\x8a\x86\xf4\xc0;cYʠ\xbdȵu\xceM\x90扼Ĩ\t\xab\x1d\xdf~\xe8\xd8T\x1bԮ=\x9a\xfe\xf6\xa4s_Nx\x15\x94,8\x80\xfb\xbe\xa2\xf7\xe1\x16\x18:\xce\xe9\xf8xN\xf9\xb8\xff\x95e\xe2~\xdaQ\x1b\xf6\n\xb7\x83#\x02n\xfa\x18\x8d\xc1\x9dk\xd3mB\xdcĩijb\xcf\xe4\x8e\xc4G\xabf\xb7\x8f\"8\xa5\xa9\xa7\xf2!\x8d\xbb\xf2\xadv'\xd5\xc4\xe4\xb5m\xb4\xec\xe5^B:\xbb\xec\xb6;\at\x9e\x843~\xa6\xee\x9a\xe5:\x9d\xf1\xc1\u007f\xf5\x90\x92\x99\x94\xb731y\x82\xfe\x89\xfd\xb3v\n3GY\xccw\xf0\xf9Fm>\xd3W?G\x8c$\xbe\xad\x06\xbc\x04\xdfvr>\xbe\x9d\xd7+\x8e\x9d/u\x0e\xf2\xd3~\xf6+\x90ë\xf4Kh\xe1gN\x1d<\x87_b\xe7g\xb1;d\x1bP\x92\x83骺\xa3\x9c\x06D\xb7\xed\xa0@\xad\xd6\\]\x99\x123Zl\xa7UU\xde@\xfb\x87\x9f\x136\xe2\x91x\xf2\xd3\xdd\x1b\xc1\x8d\xfdK\xf7\xed_\xb9\xb1\xee\x9fRT\x9a\x89v1\xf7\xd2p\xb9\xab\x04\xd3\xcd\xeb+\x00\x93\xa9\x12o\xe0\x81\x96)Y\x86\xf9\x15@\xc0\xc9-\xbb\n\xbb>|\xf6 \xb2=\x16\xcc\xef\a@\x95(o\x1f\xef\xbf\xff\xebs\xef5@\x8e&Ӽ\xb4\x8e2ao\xc0\r0\xf8\xeep\xa3\r8&\x80\xdd3\v\x1aK\x8d\x06\xa55`\xf7\b\xac,\x05\xcf\x1c\x11\x1b\x88\x00j\xdb\xcc2\xb0ժh\xa1mX\xf6R\x95`\x150\xb0L\xef\xd0\xc2_\xaa\rj\x89\x16\rd\xa22\x16\xf5\xba\x81UjU\xa2\xb6\xbc&\xac\u007f:r\xd4y{\x82\xcbGB\u05cf\x82\x9c\x04\b\xfd\x96\x03\xc90\x0f\x14\xa2\xdd\xda=7-j\xa7\xe8\x04\x94\x98\x04\xb5\xf9;fv\rϨ\t\f\x98\xbd\xaaDNrw@M\xc4\xc9\xd4N\xf2\xffn`\x1bB\x94\x16\x15\xccb\xe0w\xfbpiQK&\xe0\xc0D\x85\xd7\xc0d\x0e\x05;\x82FZ\x05*ف熘5\xfcͱGn\xd5\r\xec\xad-\xcdͧO;n\xeb\U000d3a62\xa8$\xb7\xc7O\xee(\xf0Me\x956\x9fr<\xa0\xf8d\xf8n\xc5t\xb6\xe7\x163[i\xfc\xc4J\xber[\x97\xee\f\xad\x8b\xfc\x9f\x1a\xb6}\xec\xed\xd5\x1eI\xf2\x8c\xd5\\\xee:\u007f81\x9f\xe0\x00\t\xbc\x97%?\xd5c\xd1\x12\x9a^\x11u\x9e\xbe<\u007f\xeb\xca\x197\xa7\xd4wt\xef\b_\xcb\x02\"\x18\x97[Ԟ\x89N\xda\b&ʼT\\Z\xf7#\x13\x1c\xe5)\xf9M\xb5)\xb8%\xbe\xffZ\xa1!\x81Vk\xb8sJ\x056\bU\x993\x8b\xf9\x1a\xee%ܱ\x02\xc5\x1d3xq\x06\x10\xa5͊\b\x9bƂ\xae><\x1d\xec\xa9\xd6\xf9\xa3V^#\xfc\n\xa7\xff\xb9Ĭwbh\x1a߆c\x0e[\xa5{ʁ\xa6\xac{@㇖\x1e\u007f\xfaI\x83\x9d\xfes\xb2\x95\xffh\x06\x92\xfc\xd0&*\xc9\u007f\xadЩ8\u007fbq\xa0R\x06 \xa1ޟ\x13\x8b\xf5\xe0\xff\x11\x9a҃?2Q\xe5\x987\xdav\x80\xcbɎ\xbf\f&8sĸ$\xf9'\xf5Oۖ\xed\xbf\xa4N#;f\x1a\x81$\x90K\x0f\x0f\xb8t\xc8F)M\x0f\xb7XD67\x89\x1d8;\xc76\x02o\xc0\xea\nG(ôf\xc7\x11\xc2Զ9\x95.\xcd\xf8\xa0\x10\x04ϰk(\t\xea\xb6}f\x14\xef@\xb1\x84\xf7Q\xcb\xd9>\xff?\t[[\x923\x84\xf6~0\xf5}\x85\xd6\x05U\xe4\xec\xdfo\x01\x8b\xd2\x1e\xaf\x81\xdb\xfa\xed\x1cD&Dg\xfd?0c\x96K\xfc\xfd\xe9\xccw\x95\xf8I\xae\xccA$\xae4\xcb\xff\x01\x99\xe2\x8c\xc5s\xb0\x15\xc9\f\xf9kw\xd65\xf0mÐ\xfc\x1a\xb6\\X\xd4'\x9cy\xd3yy\x0fb\xa4\xd8;z\nf\xb3\xfd\x97\x1f\xe4٘6\x01\x95H\x97\xd3\xc9\xde%\xaec\x84\xbea\x9e\x81\v.|\xe5\x1a\v\x1f\x16\u007fs\xd4l߸x\xe2\xf6\xe1'̧\xc8\x03i\x927@\xe4\xf6d\xb3ݥ\x83\x9f\x9f\x8aFp}\x9a\x98\xc9'<\xae\x81\xc1\v\x1e\xbd\xc7\xc2$\x10s\x98u\xfen4z\x1a\x12\xc7e^\xbc{\x8cG\a&\xa4Rfg\xa7\x8a\x82\u007f^0\xe2\xeeǞ\x1e\x01iO!\xc0\xf5\x94\xa4\x17\x8e\x10.\xf0N'\x1e\xb8\xb4X\xad\x8b摃tER?5\xed\xcf@\xb3a['}\xe8\x18\xfb\xd1x\x16\xd1)\xd8\xf32\x11Q\x97=4\xe8NK\x9d\x18\xfb\xce\x04ϛ\x85\xbc\xdc\xdf\xcbqo\xb8\xff<({/\xaf}Df\x9c\x94\xfc\xa4\xd0<(\xeb\xde\\\x84\x9c~\xe3g\x10\xd3Ot\xc7Kz\xb5Mt\xe8f\xd8\x12\x84\xdb?\xf7>\x91Ұ\x87\x1b\xb8\x97\x14\xb8\x04z\xb8|\xa9_n\xda>\xf4\x9f\xa22.\x85&\x95\\9S\xb9\x8e\xad䉝\bR\xe9\x1eG\x86[k\x16\xf5\v&\x82\xfdF\x96\xc4\xcf\xf7\x19`\xc12\xcc\xebh\xd3\xe5-\x99\xc5\x1dϠ@\xbd\x9b2\x1cݧ$\xfd\x9e\xb6\x85D\xad럅\x12\x96f\xda\xeb'\xa8\xee|~3+:\xb9\t\xa3jf\xcf\x0e\x1dIW\x8e\x0f\x9d\xc7șX\xe7\u007f\xccR\x97幫-1\xf1\xb8@\xe3/\xe0\xc5\xd0\xf6\xfb\x8dy\vY\xb0\x92\xce\xef\xff\x90\x99s\x02\xfd\xbfP2\xae\x13\xce\xf0\xad+\x13\t\xec\xcd\r\x89\xb1\xee2\xb4\x027@\xfc=01L\x84G\x90S\xa4[PxC\xae\xb6\x03\x8f\xe5\x1a^\xf7\xcax\x9b\xba\xe5(b)\x9b\xfe\xc3\r|x\xc1\xe3\x87\xeb\x81\x1e\xf8p/?x\x03\xbfX\xdd4ނ\x92\xe2\b\x1f\xdc\xdc\x0foq\x82\x12%1i\x98\x8c\xa6\xb9ۧ'\x16\xddTw\x9b\xe3\x0en\xeeԮ\x93\xe4\xb0T\xc6\xfe9\x9e\xb0\x1b\xd9\xcfc=\xa3\xef\x9bF\xf2^\xb3>{\xc8a5J\x95<\xb9\xadE\x1d\x92x^\xd1\xd6\x11\xc0\x1bc\xa3\xb9$]\x93\xa0cMb\x95\b<#\x15\xbe䑲\xc5%^#\xd1e\xa1\xbf\xfd\xe5G'\xc7H'\x94~w\x11yo\xaf6SE\xc1N\x8b|I[\xbd\xf33k\x99\x0e\x80<\xf7\xf5\xaer\xe72\xddݫeȕ\xf7^\xb9\xdds\t\xac>\xfe\xa8\x83@1(ռ&\xf2Ϟ\x19\xd8 \xca&7\xfe{\xb0\xd7\x05\x97\xf7n\x01\xf8\xfc\xee\xf6\x1dZr\x9d\xc5Κ\xd4\rC\x9b\x17\xce⤺F*\x87\xd7=j\xecI\xc50\xe1M\x1ec\"H\xa9l7\xaf@pK\x95\u007f4\xb0\xe5\xda\xd8\xeeFS\x05\xae2\xa9ⰐÄ\xdd7^\xa0\xaa\xec\x19<\xf8\xd2\xce\xee\xd5g\v\xf6\x83\x17U\x01\xacPU\x82q\xf7\x0f\xd9\x17^4E\xd4\xc0\x81W\xc6mSOr\x19\x16\xab\x88K\xa5@\x9b\xca\xe2\rnI\x1deJ\x1a\x9e\xa3\xae\x8b\xfc\x9e\xb3\\\xd1\xc1\xdd2.\xaaX\xf9&\xf6,\rS\xe5\x17\xadϊR\xbf\xfa\x99\x9d\xac\xe1^\xbd\xf6\t\x94L\x82=; \xf0-p\v(3\xe2\vj\xaf\xb2\xdd\x12\x81\x18\x8e4\xc9b\x99\xa6\xe0\xe9AY\x15i\x04X\xb9\x93\xcd\xe5dR\xac;\xfcg\xc6\xc5%\xd8F\x92w\xfe\xd1\xf8\xa5\x9d\xfd\x9b\x1c\x8dF\xa9\xa4\x9b\xb0\r\xc2\x13\xb2\xfcX\x9f\x0ff-\x85\xaaN\x06\x14\xe8Jv5\xe2\x05Nƒ\xf8.\xec\xe2=\x037.y\x02cO\xf2\xf9\xdcv\xbd\x1d\x02qQo\x87\x16h\f\xdd9\xa9\x99\xfb\x1e\x002\x95\xb5\xe3\xec\xf6\xdeH\xcd\x02\xcfg\x83\x14\xa0b\xee\x93^d>\x83\x1f\xed[\x97F\xca\xe0Q얻.I\x9c\xedNH\xcf\x12\xfdX\xb5\xed\n+\x97\x14\xd4\a\\U\xf2E\xaaW\xb9r1\xa5\x99\xcd\xd67\x8b\x9f\xad8~K\xa5\xd1\x17\xaft\x11\xa8\xed\xef\x05\x94B2\x9b\x17\x05\xc6SR0\xa7\x86|\x17\xebȟ\xb3\xbb\x98Z\u007fbr\xa89\xde\xf9\xf6\xd3\xd4֦\xfb\xf8\xac\x8e\xff\xf0\xbaG\xbbG]\xf7\xb5\xae\\\voL\xad\xb6\xa5\xc9\xd6\x15nz\x9dH~jo\xca\xf7\xe0\x9dt?\xc5}eY\tqM\x82\xcd*a}'\xaa\xae\"B\x94\xd4\x03\xb4QJ ;\xed\x8aM)\xa2ϕ\xce\xfb\xed`M\xe9\xba\xee\aS\xf5\"\x11\f=/}\xd3g\xb7.ۯ\x81\xbb\xecO\xbd\xd3\u007fx\xa7XBy{\xa6\xa8=\xdd?7E\xaf\xa1\xd8t)\xd6\xca`\x18\x17\x1a+\u007f_\xe4\xb3X|-\xc39\x18\xf5\x17\xfb\x14\x8cL9\xe9\fp\x9a\x9b\xa2>Wcf<\xa6\\\xe8\x14\x86\x8c\x12A\xbc\xcd\xdcIT5`㲎ᴅFgn\xe03\xecU\x15鮚\xa0\xceL\xad}\xbc\xc2\x1e\xf2\xc9h\xd9\xe1\xf3\xba\xff\x8fU\xa1\xde\xee\x92'\x11\xec^\xf7M*\xc49\x172\xe7\a\x9eWL\xf4\x0eYG,Z\xe9\x01\xa5Ar\x11+\xb5\x91X\xd5\xf3{b\x04_K\x9fr_\xac\x8e\xa6=\xba\xb4\xb2\xfc\xd9\xc5\xf8~\xb1}\xc4H-\xcd>\xa7w\x1d\xa6\x97ۧ\xeb\xe3K\x8a\xec\xa7%\xf4Q\xa0\xf3\xa5\xf5\x14g|\xa6\x8c~F\xf1<\xb1q\xea\xcd9\xf6\x94\xf2\xf8YE\xf1\xd9ޢ\xc4Rx\xbf\xc8=\rrA\x01<\x898\xf3\xc5\xee\xc5%\xeePR\x9e\xc4#\xb9\xb0\x1d)YO\x02\x1e-gO\x15\xaa\xa7I\x1e)b\xa7\x97\xa7'A\xbb\xd2\xf5|Q\xfa\xfdZ\xcf\xde#\n\x18W5\xb3\x85\xe57E\t\t\xa5\xe3%\x05\xe3Y\x8a\x9dY\x1cn\x8a\xbf#\xeb.-\t\xf7K\xbe#@S\n\xc1#\x85\xde\x11\x88\x93\xe5\xdf\xd4\xf2\xee\b\xec\x19\xb3;)%\x13\u007f6\x81\xc5\xdfXYr\xb9\x1br>U>&ecP\x1d\xee\xae\xd9\x13\x8e\xae\xffߋ\x9cbK\xfaO.#QV\x9dW\xe3Ҫ5\xdc\xca\xe3\x00\xae\xeb\xf7\x8eF\x15\xfdorh[\xaf\\\x88\xee\x87'\x0el\x17T\xf8\x84\xcb\xc4c}\x1a8\xe63G\x99\xa2t\xcfߝ\v\xaa\xbe\x9e\f\xeff\xea\xa6\xfd\xe7\x98\xeb\xcc\xed\xfeL\xff\xb9\xa8\x84\xe5e\xf4\x10\x97Z\x1d\xb8\xcb\xfb\xed\xf1\xd8\xd0\xf3\xef\xca}\xf2\xb19:H_\x9f\x9a\xf3\xb5>\t\x05X\xecT\xbc\xa2\x10\xc0\xcc\x10\xfd\xcc\u007f\xf5\x98\xa9\x95\xfb\x90\x898Y\xcbC\xf8:\xf2ڝ\xc1X\f.\xeb\xef\xf1\n\x02㾜4\x91\x1cǨu\x99\xf6p\xbd3\xee\xde\xfdZ\xa1>\x82:\xb8Bopyfz\xaa\xbd\xa60\x14\x91պ+(@\xff\xad\xed\x89\xe7\xdfj\f\xb8\x95\xde\x06G\xc1\x9e\xec\xd1\xc1!\xa5\xd5F;\xa4\x9f)\x90\x19\x19\x1a\x85*U3;.\x0f\x93\xa6&\xb5!\xf9\xb2\xb1\xcf\xf2\xe8g\xd6\xef\xb8H\x04t~\f4\x012\xb5\xc18\xad(1\xdbP|\xa9Xh.\x1aJv\x03\xd3\x1a\x86/\xd1(\xbc\xa0AxAT\xb4,.J&SJ#\xf0E\xa2\xa3\v\xc6G\x97\x88\x90\u038b\x91f@\x9e4\xf8\xa6\xb4\xee&\xd5ђ\xab0)u\xb3\xf9\xd2\xedtKnB+nB}gn\xa7\t-\xb7\xcbZm\x13hx\xa1\xe8\xe9B\xf1\xd3%\"\xa8\xcb\xc6P\xb3QԬ\xe4L\xfe}v\x19\xa0.\x18?\xa8\x1c\x1f\x95\xb6s\x0e\xff\xe3\xe9\xf8H\x91\xae\x13\x04)\x91\x83\xac\x87\xc6j\x01\xe4\xcb\a?\xfe<\xa4\xe2\xf5\xb4\xb0\xfe\xe3\xf79|\x9e\x9a\x81ӈ\x90KZ\xc7g\x11\x9eR>\xee\u007fe\x99\xb8\x1fw\xd4\xfa\xbd\xc2\xcd\xe0\x1a\x017}\x88F\xefε\xf16!n\xea\xa9ijl\xcf\xe4\x8e\xc4G\xabj\xb7\xafEpLS\x8f\xe5C*w\xe5[\xe9N\xaa\xa9\x93\u05f6Ҳ\x93{\t\xe9\xec\xbc\xdd\xee\x14\xd0i\x12N\xf8\x99\xbam\x96kuƭ\xff\xea!&31ogd\xf2\b\xfd#\xfbg\xcd\x14f\x8e2\x9b\xee\xe0\xf3\x8d\xda|\xa2\xaf~\x8a\x18Q|\x1b\rx\x0e\xbe\xcd\xe4t|[\xafW\x1c[_j\t\xf2\xe3~\xf6;\x90ë\xf4sh\xe1g\x8e\x1d<\x87_d\xe7\x8b\xd8\x1d\xb2\r(\xc9\xc1tU\xddAN\x03j\xb7m\x19-L\xcf˜\v\xbaz\x83\xdf\xe6M\xbb\x85ɗ\xfe\xfdz\xc1\x87ƍ\xf9\x92\xe2\x0f\u007f?\x19~\xd2\x0eM\x9eq\v1\xf8\xb0\x11\xe2\xfc3\xdf֗Wo\x04\xfe\xcb`\xc4o\xdc\xd6\xfcʴ\xe4r7\x87\xfc/aX$\x1c\b\x10\"\x01A\x04\x89&DX\x14\x10ԛ\x1c\xb9\x9f\xb5\t\x12\xde\x10\x12D\xcd\xc9\xe0\xa5\x13\xe4\xbcC\xe4\xb0Rxӆ\xd2,ː\x94\xff\xc3\xe9\xd5\xec\x1f>\xb8\x1f\xf5\xdd\xeb\xeeg\xa6\xa4\xb7\x90\xe6\x06\xfe\xf3\xbf\xaej\x84\xbe\xd7W\xac\xd3\xcb\xff\v\x00\x00\xff\xffNKg\x8f\xc7^\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec=Ms\xdc:rw\xfd\x8a\xae\xc9\xc1ɖf\xfc\\9$\xa5\x9b\"\xfb%S\xeb\xd8*K\xebK\x92\x03\x86\xec\xd1\xe0\x89\x04\xb8\x008\xf2dk\xff\xfb\x16\x1a\xe07A\x82#\xa9\xdeG\t\x17[\x1c\xa0\xd1\xe8n\xf4\a\xd0\x00.\xd6\xeb\xf5\x05+\xf8wT\x9aKq\x05\xac\xe0\xf8à\xb0\u007f\xe9\xcd\xe3\xbf\xeb\r\x97\xef\x8f\x1f.\x1e\xb9H\xaf\xe0\xa6\xd4F\xe6\xdfP\xcbR%\xf8\x11\xf7\\på\xb8\xc8Ѱ\x94\x19vu\x01\xc0\x84\x90\x86\xd9\xcf\xda\xfe\t\x90Ha\x94\xcc2T\xeb\a\x14\x9b\xc7r\x87\xbb\x92g)*\x02^u}\xfci\xf3o\x9b\x9f.\x00\x12\x85\xd4\xfc\x9e\xe7\xa8\rˋ+\x10e\x96]\x00\b\x96\xe3\x15\xe8\xe4\x80i\x99\xa1\xde\x1c1C%7\\^\xe8\x02\x13\xdbۃ\x92eq\x05\xcd\x0f\xae\x91\xc7č\xe2η\xa7O\x19\xd7\xe6ϝϟ\xb96\xf4S\x91\x95\x8ae\xad\xfe\xe8\xab\xe6\xe2\xa1̘j\xbe_\x00\xe8D\x16x\x05_lW\x05K0\xbd\x00\xf0\x03\xa3\xae\xd7\xc0ҔHŲ[ŅAu#\xb32\xafH\xb4\x86\x14u\xa2xa\x88\x14w\x86\x99R\x83܃9`\xbb\x1f[~\xd1R\xdc2s\xb8\x82\x8d\xa6z\x9b\xe2\xc0t\xf5\xab#\x91\x03\xe0?\x99\x93\xc5M\x1b\xc5\xc5\xc3Xo\xd7p\xa3\xa4\x00\xfcQ(\xd4\x16eH\x89\xb3\xe2\x01\x9e\x0e(\xc0HP\xa5 T\xfe\x83%\x8fe1\x82H\x81ɦ\x87\xa7Ǥ\xfbq\x0e\x97\xfb\x03Bƴ\x01\xc3s\x04\xe6;\x84'\xa6\t\x87\xbdT`\x0e\\\xcf\xd3\xc4\x02\xe9`\xeb\xd0\xf9\xdc\xff\xec\x10J\x99A\x8fN\vT%՛\x81Dv`^?`\x040\"Q\xc1JM\xc2Ѵ\xbem\u007fr\x00vRf\xc8\xc4ES\xe9\xf8\xc1\xc9^r\xc0\x9c]\xf9ʲ@q}\xbb\xfd\xfe\xafw\x9d\xcfГ%O)\xe0\x1a\x18|\xa7\x89\x01\xcaOa0\af@\xa1\xe5<\nck\x14\n\xd7\x15u\xd3\x1a$\x80TP\xa0\xe22\xe5I\xc5\x15j\xac\x0f\xb2\xccRءeЦnP(Y\xa02\xbc\x9az\xae\xb4TM\xebk\x0f\xe3wvP\xae\x96\x93D\xd4$|~Ba\xea\xe9\xe0\xe6\a\xd7\r\xfeĤ\x0e`\xb0\x95\x98\x00\xb9\xfb\x05\x13\xb3\x81;T\x16L\x85u\"\xc5\x11\x95\xa5@\"\x1f\x04\xff\xff\x1a\xb6\xb6RoH\x18\rz}\xd0\x14\x9a\xc0\x82epdY\x89\x97\xc0D\n9;\x81B\xdb\v\x94\xa2\x05\x8f\xaa\xe8\r\xfc\xb7T\b\\\xec\xe5\x15\x1c\x8c)\xf4\xd5\xfb\xf7\x0f\xdcT*6\x91y^\nnN\xefI[\xf2]i\xa4\xd2\xefSHcm\x9c,\xcdX\xad\xde\x00n\uedbdF-\xce[\xacȆ\x13\xa3\x8d\x84'Ƈ\x9cv\xc5\xca\xe5\xcd\xdd\x16\xbe[\x97\b+\x98\xe0,9\x98R\tR\xc7ߐ\xa5\xa7{\xf9\x17\x8d\x90\x96\xa4\x95*\xbb|\x19\x00\xbcý\x9d\xf4\n-\f\xdb\x00\x95\xb2s@\x13j\xb24\x1br8Rܳ23^\xc9q\r\x1f~\x82\x9c\x8b\xd2\xe0\x90\xef0\xcd{G$\x02\xe7F\xa3\xef\xe5\xcf\xda12\x82\xa4\x1f\x03MG\xa6T!S8R\xbd\x10Uy\x86\xa0O\xda`\x0e;\x0f\xa5\xb6\xd5\xc4\x15\xd2\aY\xe6\xc1h\u061d*\xdc\xc7\xc7m\xbdp\xb6\xcb\xf0\n\x8c*ǻ\x9d\x9a\xbac\xb4\xf9\x86\xda\xf0$\x822\xab>i\\\xcb\x11\xc2(\xfa!@\x94\x1e\x05\xac\x91g\x8f\xd6\xd1\xf4\x14\xb2\xdeB\x96\xb5\x88;O\x15\x80\xff\x15\xf0\xd1\x1a\xb8Ě\x9d+o\xce8fdB\x85\x84L\x8a\aT\xaeG\xeb*<\xf1,\xa3)\x8d\xb9\x00\xe7\x97W1\f\xf1 \x02$\xd4N\x05\xed\ap\x85\xb9\xdbg\xb8\xa7\xf9\xd1|!\x0f\xf0\xfa\xcb\xc7P8\xd8-\x91\x92:\x18\xd4u\xcf\xd3i\xa3@\x03\x8c\x02\xd9\x1a\x14\xb9iu\x8c\xe7v\x93.\x81\xc1#\x9e\x9cg5\xbaT3V,kY\rR!mm\x91\x1ay\xc4\x13\x81\xf2{UQ\U0001620a+\x8fx\x8a\xad\xda#\xaa\xc5ϯ\x92;\xea\xda\x0f4\x8a\x98\xa9Ԕ\x9a\xa8~\ue011q\x83\x85eJ\xa9*\x15\xc5\xcf\x1cvͰ\xce\x06\xed#\x9e\xdei\xc7>;k\x0e\xbcX@\x01\xab\xb0A#Ͱjg\xf2;\xcbxZwF\xf3d\x01ĭ\xb8\x84/\xd2\xd8\u007f>\xfd\xe0ڢ(R\xf8(Q\u007f\x91\x86\xbe\xbc*\x89\xdd \xce$\xb0kL\xd3R8\xb3`鲨\xff\x06\a2\xa1VDk\xb6q\r[a\xe33G\x9f%l:`\x85\x9cC+/5\xedm\n)\xd6d\xa6\xab\xde\x16\x00m\xe3\xe5Y%U\x87S\x97\v!\x8e\xa2\xe8ѻ\xb7\xd6\xca\xfd2\xd8\x15\x9e*\n\x8b\x8c%\x98V{<\xb4\x05\xcd\f>\xf0\x04rT\x0f\b\x85\xb5\x1b\xf1B\xb5@\x93\xbbr\x86\x14ƻ\x16U\xf1fadGu\xac\xac\xed\xac\x8f\xacY\xb19\xaaz`\xbfy\xbaz\xdc(ɼ\x93?\x14E\xfdv\x82\xd42˲\x90_C\x1f\xc4!\xe9\u070f\x9c\xd1&\xd0߬y%\xf1\xfe{\x9c5d\\\xe9\r\\SzX\x86\xed\xf6\xd5*a\xab\xab(\x90\x16\x13\xae\xc1\xcaɑe\xd6}\xb0\xca[\x00fΙ\x90\xfb\x81\a\x15\xa7b\x9e\x0eR;\x9b_oR\xad\x1e\xf1\xb4\xba\x1ch\xaf\xd5V\xac\xe2`Z\x9d?PZ\xb5\xd7\"Ev\x82\x15\xfd\xb6\"\xc7l\xc9\x149\xc3y[ \xd5\xd1U)\x11kI(`c\xed\xcak\xb1\x8d\xebt%\xeb\xc2ύ\"Z\xa6\v\xa9\x03{\xf5\x01\xb4n\xa56n\x01\xb0\xe3n\x8f\xac\x10\xc6D\u007f~\xd5\x10؞\xf6ˌTUj\x90U\xbb\xbd\x05r\xcby=\xcf{\xb7s\xe3W#\x1d`\x1bd\xae\x1a\r\xe1t\xfa\xcam\x1e\xd9\xff\xcf\xc3L\xc8Y\"\u0605\x92\tj=/J\x91\x96cf\xc1\xb6^\xace.x\xdbG\xa9春\xe4\xaa,s\xc5-i\xcf\bl>\xfdh\xad;[5d\xff\x8e\x11\xe5sp\x04J\x1b\xces\xd6OS\x8bF\xf7Ƶ\xae&\xa0\a\xe6\x02&\xf5P\x92RY\xe67{\x91\xfc\xad9\x1e9\x17[\xea\b>\xbc\x9a\xb3\x02\x95*\xc7sC\x99\x9b\xaa}Ð\xfaCl\xfc\nU\xb2\x93\xa4\xbd\x1a\x85\x1d\xce\x0ew2\xe29\x05֙\x16Ҵ\x17k|O\xef4\xec\xb9ҦAx\x01T\xae)\xe9\xe3ucL\xf1I\xa9\xb3C̯\xaeukY\xf1 \x9f|\x8a\xe0\x92\xc0\xba\"\xfe\x81\x1d\x11\xf8\x1e\xb8\x01\x14\x89,\x05-xYua\xbbY\x00\xd11\xd1\x19\x93H\x9b\xd9j,\xca<\x9e k\x92N.fW\xc7\xdaM~fw\xd0Ru\\\xe0\x98P\xedk\xaf\x89\xe5}\xe5\xf5\x8d\xb9\xd5\xe1\xc0\xd79\xdbg\xb8\xd5\x01\x90\xdb=\xe4efx\x91\xb5.\xa82\a<\xd5\x17\xe0\xfc\"\xe9\xe8\xf8\xeeDо~\xab\x058\x04\xb2\x1b 0\rO\x98e\xf6\xdf\x01\x15\x12w\x1d\\\"\xd7hmNx\x1b\xcf_\xfc\xe3\uf4bbt\v[t\xae\x9e\xecYn!U\xf7\x05\x9d\x11\x93N;\xbb\xceG\xa7o\u007f-Q\x9d@\x1eQ\xd5^MP̚\xf3\x96~jj\x1b\xe1U\xaa\xc4\xeb$w)aW\xb5\x84gC=\xa1\xe1Z83\xdbǕ`Y\x1d\xd2\x04GS\xaa\xd3\xc6B!\x10B\xd6\x10\x02\xedc|\xe9%\a\x10_#Tz\x89`)ʭx\x8d\x80\xe9\xb5B\xa6\xa5AӒԋ\xa8\x03\x84\xaf\x11:-\t\x9e\x16y\x80\xf1\a\x04_\xeb`\xe0+\x04Qg\x87Q\x8bH\x17{\xf0oq0\x151\xbe\x99\x83~\x03\x8f+\x02d\xf0\x80\xdfx@\x15\x01qp\xb0o6\xa4\x8a\x99\a\xfd\xa0\xeb\xd9\xc7\xf4\xa2Ӑ\x16\xed\x85Ǧ\x10\xc5mS\xcf\x1f\xbf\x8b\x83Wɉ\xb4\x1a\xe9v\xeb\xb0ܐ`1q\x02\xe9\xef\xfc\xe6*]\x17L\x05\xb7\xdb\xc0˃\xbe\xec`X\xd9乵\xa5I\x135\xbc\xe1\xbe]:4\xaf.\xbb\xa7m\xd8S\xd1\xdd\xe0&J\xb7\xe8\xf9\x1c\x9c\xa6\x8f\x10\xcf\x1e\x1e~\x05\x9c\xa6ݟ5Q1\xf0S01nf\x86k\u007f\xbd\xb7\xbf\xbf8b\x8a\xdfu[\x8c]/\xef\xafq\xae`O(r+\x9f\xb7\xdf)N\xaau\x83\x17g\x1f\x05Uk\\\xbd[>\x03 C\xf7\xc3\xc3ˤ\xadi#\x15{\xc0\xcf\xd2]\xe1\x1fC\xadn\x8b\xce+\x0e\xde\v\xa9\x92X\xbd`\x854\x97\x1f[\x1f`\x93\xdb>\xb8U\xdcb\x1b\x9a\xb73\xb2hL\x161\xb8\xfb\xfb\xcfn@\x86\xe7\xb8\xf9X\xbaD\a\xabd4ZJW\x03u\x8dv\xe1\xa9x\x90Ot-w\xfb\x9e\xfd\xd6K&H\xb9\xf4\x94\xadx\xd6h\x8e\x9d\x9b\xec+\xd2\xc5\b\xfb\xf7\xf1\x96-\x87\xa1\xc5ĩL&\xb9\x0f\xc2bZ˄\x93\x8fA\x8b\xbd\x94\xc2\xfez\x97\xd8N\xf9\x8a\x13ʢ\xd4\xf8\xf5I\xa0\xfaVMT\xbd\x15\xa1\x8b\xf4;$\xfcˠa\xf0\x12}#ɳ\xe9U\x1f\xf3h\x85'\x90v\x8f\x0eT\xab\xd6\\\xd7OM\fI73\xff\xc3s\u007f\\-\xaf\xc7_wX\xd7\x0fN\\DP\xd6=\xaa\x10\xf3\x96\x88{}!a\x85)\x95\xf7\xa7\x92Rэ\xbe\x16\b\xba\vo\xcf{M\xa4y\x9di\x86\x97\xcd{M\xcd:\xde\xec\xebP#\xfc\xab\xdf\x03\t>\x90\xe1\xbcf\xf7z\xd3\xda\xc2?\x8f\x9d\xa3\xf3\x80n@\x9e{;\xc5֩\x8f\x1fyBS\xc3\xea\xe6\xe4\xbb\x10\xea\xe3\xe7I\xd6\xf0\x05\x87^\xeb\x1a>\t;\x88\xa1Yw\x87F0\xa5տ\xb1\x97\x94&\x87x\xac[щ\x9d\x11m\xd1Us\xbd\xea\xbd\xfcBz\x95\xa2\xae\xe2N猱\xf5\x9f\xf9\xde-\xcd&vL\xff2\xa8\x11T\\\x93J+\xa4\xb0F\xa7\xd4\xe0\xa3Fu\xa4g *!\xf16\xbc\xfd\xa5\xdc5\x17Y\xc3\xdf\xfe~\xd1\xccJ\x96$X\x18\x9f\xc7\xea0w\xaf֭ܳ\x0eգt\xf4g\"\x85\v\xa1\xf5\x15\xfc\xcf\xff]\x807\xc0߫\x97\xe7\xec\xc7\u007f\x04\x00\x00\xff\xff\x87\x91\x8e\xf4\xe3o\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VO\x8f\xeb4\x10\xbf\xe7S\x8c\x1e\x87w!\xe9{\xe2\x00\xca\r\x15\x0e+`\xb5\xda>\xed\x05qp\x9di;\xacc\x9b\xf1\xb8K\xf9\xf4\xc8v\xb2m\x93\x94]\x90\xf0-\xf6\xfc\xf9\xcdo\xfed\xaa\xba\xae+\xe5\xe9\t9\x90\xb3-(O\xf8\xa7\xa0M_\xa1y\xfe.4\xe4V\xc7\xcf\xd53ٮ\x85u\f\xe2\xfaG\f.\xb2\xc6\x1fpG\x96\x84\x9c\xadz\x14\xd5)Qm\x05\xa0\xacu\xa2\xd2uH\x9f\x00\xdaYag\fr\xbdG\xdb<\xc7-n#\x99\x0e9\x1b\x1f]\x1f?5\xdf6\x9f*\x00͘տP\x8fAT\xef[\xb0ј\n\xc0\xaa\x1e[\b\xc8II\x94\xc4\xc0\xf8G\xc4 \xa19\xa2Av\r\xb9*x\xd4\xc9\xf1\x9e]\xf4-\x9c\x1f\x8a\xfe\x00\xaa\x04\xb4ɦ6\xd9\xd4c1\x95_\r\x05\xf9\xe9\x96\xc4\xcf4Hy\x13Y\x99e@Y \x1c\x1c\xcb\xfd\xd9i\r!py!\xbb\x8fF\xf1\xa2r\x05\x10\xb4\xf3\xd8B\xd6\xf5JcW\x01\fLe[\xf5\xc0\xc5\xf1s1\xa7\x0fث\xe2\x04\xc0y\xb4\xdf?\xdc=}\xb3\xb9\xba\x06\xe80h&/\x99\xef\x85Ȁ\x02(\x18P\x808PZc\b\xa0#3Z\x81\x82\x12\xc8\xee\x1c\xf79G\xaf\xa6\x01\xd4\xd6E\x019 d\x05\xd9*\x03Ge\"~\r\xcavЫ\x130&/\x10텽,\x12\x1a\xf8\xc51f2[8\x88\xf8ЮV{\x92\xb1\xeb\xb4\xeb\xfbhIN\xab\xdc@\xb4\x8d\xe28\xac:<\xa2Y\x05\xda\u05ca\xf5\x81\x04\xb5Dƕ\xf2Tg\xe86w^\xd3w_\xf1Ч\xe1\xe3\x15V9\xa5\xca\n\xc2d\xf7\x17\x0f\xb9!\xfe!\x03\xa9\x1dJ}\x14\xd5\x12ř\xe8t\x95\xd8y\xfcq\xf3\x05F\xd79\x19S\xf63\xefg\xc5pNA\"\x8c\xec\x0e\xb9$qǮ\xcf6\xd1vޑ-ե\r\xa1\x9d\xd2\x1f\xe2\xb6'\tc\xed\xa6\\5\xb0Σ\b\xb6\b\xd1wJ\xb0k\xe0\xce\xc2Z\xf5h\xd6*\xe0\xff\x9e\x80\xc4t\xa8\x13\xb1\xefK\xc1\xe5\x14\x9d\n\x17\xd6.\x1e\xc61w#_\vݽ\xf1\xa8S\x06\x13\x89I\x9bv\xa4s{\xc0\xce1\xa8%\x95\xe6]H\xb2ƿ\xc42L\x92\x82f2_R\u007f\xbe\x8dfy\x9c䗃\n8\xbd\x9c`zH2S\xff\x86v\xa8O\xda`1Q\xa6\t\xbe\r%\x1d\xb4\xb1\x9f\xfb\xac\xe1\x1e_\x16n\x1fإɚ\xe7\xfa\xf5\xb9Q\x1bP\xfe7{\xb2\xb3p\xa7\x91\x15\xa9\xfc\x0f\xbb\x1c\xd5\x17\x03z0\x04\x1c\xadM};\x9b\x90\x19\xc8t\x92\xcfdH\xb0_@\xb3\x88\xe7\xce\xee\\\xde\x04Tr\xac\xa4\xf4\x13\x0e\xc9\x1e\xfc\x14\\\v\x06o纜\xf9\xf0z\x17\xa1\xe5\xe4?\xe9\u007fSN\xe3\x86\x18\x17}\xd7\x19\xd5\xe2C\xf2\xb8\xc4\xf8r\u007f\r(\xa31jk\xb0\x05\xe18\xd7.\xba\x8aY\x9d\xa6U3\x96\xday\x9fz\xa3\x80f\n\xa9O^\x0ehou\x03\xbc\xa8锿\xf2\f\xdb\xd3-\xd5\xf5\xebr8o\xa9R\xba-\xa4\xd9]\v-p\xf6.R\x16\xb3WJzq\xf3\x98\x11\xb2\xb9\x94\x1dg\xc6Uk\x8c\x8b\xc8<\x86\x9b\x10\x16\x93=\xbb\xcc滋\xf0\x828V\xfb1\xe0\xf3\xe8M\x9b\x9a\x17\xec\xee\xa7+\xee\x87\x0fW\xbbj\xfe\xd4\xcevT6t\xf8\xf5\xb7\xaaX\xc5\xeei\\0\xd3\xe5\xdf\x01\x00\x00\xff\xff\xfb\xb1p\x12\x1b\f\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WO\x8f۶\x13\xbd\xfbS\f\x92\xc3^\"9\xc1\xef\xf0+t)\x82M\x0fA\xf3g\x11o\xf7R\xf4@\x93#\x8b]\x8aTgHm\xddO_\f)\xad\xbd\xb6\x9cl\x8aV\x17C\x149|\xf3\u07bc!\xbd\xaa\xaaj\xa5\x06{\x87\xc46\xf8\x06\xd4`\xf1ψ^\u07b8\xbe\xff\x81k\x1b\xd6\xe3\x9bս\xf5\xa6\x81\xeb\xc41\xf4_\x90C\"\x8dﰵ\xdeF\x1b\xfc\xaaǨ\x8c\x8a\xaaY\x01(\xefCT2\xcc\xf2\n\xa0\x83\x8f\x14\x9cC\xaav\xe8\xeb\xfb\xb4\xc5m\xb2\xce \xe5\xe0\xf3\xd6\xe3\xeb\xfa\xff\xf5\xeb\x15\x80&\xcc\xcbom\x8f\x1cU?4\xe0\x93s+\x00\xafzl`\f.\xf5\xc8^\r܅\xe8\x82.\x9b\xd5#:\xa4P۰\xe2\x01\xb5콣\x90\x86\x06\x0e\x1fJ\x88\tW\xc9\xe9.G\xdbL\xd1>L\xd1\xf2\x04g9\xfe\xfc\x95I\x1f,\xc7\xe8\xcdK\x9a,\xcaWO\xb0ƽT\x11G\xb2~w\xf4!\x1b\xe1+\n\x88\aJ!\x94\xa5%\x8b\x03\xd12$\xec|\xf9is\v\xf3\xd6Y\x8cS\xf63\uf1c5|\x90@\b\xb3\xbeE*\"\xb6\x14\xfa\x1c\x13\xbd\x19\x82\xf51\xbfhgџ\xd2\xcfi\xdb\xdb(\xba\xff\x91\x90\xa3hU\xc3u\xeeB\xb0EH\x83Q\x11M\r\xef=\\\xab\x1eݵb\xfc\xcf\x05\x10\xa6\xb9\x12b\x9f'\xc1q\x03=\x9d\\X;6\xd8\xd4\xde.\xe8\xb5\xec\xe4̀\xfa\x89\x81$\x8am\xed\xe4\xec6\xd0\t\xafj\xf6\xf9r\xbc\xfa\xc9\xf4e\x83C\xe9\xfe\xadݝ\x8e\x02(c\xf2١\xdc\xcdŵ_!l!\xef뼓\x14j\x1bH\x10\x8d\xd6 Us\x9e\x13\x92DS\xc2\x16\x9d\xe1\xfa,\xe4\x05\xces*\x84F4V\xee\x1c\xe8S$\x8f\x13\xf3᧬/\x94\x1f\x02\xe4ң~\xea\xb1>\xa27\xb9\xa9\x9f\xa1\t\xb9\x86\x19\r<\xd8\xd8\x15s\xb8\xe3C\xeay*\xc8s\x8f\xfb\xa5\xe1\x13\xec\xb7\x1d\xca\xcc\xd2N\x11\x185a\x14\x1c\x8cN\xcc+ά\x01>&\xce\xf6R\x8b\x11AZ\x845\xf3\xea{ܟ\x13\r\xdf\x12w:\xef\xbf\r\xf9J\xce\xc5\x190a\x8b\x84>.Z\\\xee\x1e\xe41bv\xb9\t\x9a\xc5\xe0\x1a\x87\xc8\xeb0\"\x8d\x16\x1f\xd6\x0f\x81\xee\xad\xdfUBxU\n\x81\xd7\xf9ް~\x99\u007f.\xa4|\xfb\xf9\xdd\xe7\x06\xde\x1a\x03!vH\xa2Z\x9b\xdc\\hG\xa7ݫ\xdcq_A\xb2\xe6ǫ\u007f\xc2K\x18\x8as\x9e\xc1\xcd&W\xff^N\xee\fJ(\xda\x14U\x02\x81\xf4M\x11\xbb\x9f\xd4,\xfda\xa9\x10gL\xdb\x10\x1c\xaa\xf3ғ\xeek\t\xcd9\xa4Jv\xf8\x1e\x9b\xcd\xce\xfd\x86\xc9n\xa6ibx\xc9j^6\x17B\xb9\x97\xe4[\x8a\xda\xe1%\xa3/p\xbc\x9cJ\xf5\xb8\xc1\xb3ZtT1\xf1\xf77\xe9\xbcl\x9a\xb9\x9d\x1a\xb5N$\x05=\xc5\\\xb8\xd0\xfc;\x8dz\xe8\x14/\xb8\xed\x19\xa8od\xe5,\x83\xb3-\xea\xbdvX\x02Bh\x17\xaa\xe9\xbb ˃>\xf5K\xa5\xf5vT֩\xadÅo\xbfxu\xf1\xebE\xf1\x17\xf5<\x1bd\xb9\xb5\x98\x06\"\xa5\x12{\xaa\xb2i䠾\xd2\xd2\\\xd0|:\xfd\xdb\xf1\xe2œ\u007f\x0e\xf9U\a_\xceDn\xe0\xd7\xdfV%*\x9a\xbb\xf9\xa2/\x83\u007f\a\x00\x00\xff\xff\xe4\xf3S\x85\xb2\r\x00\x00"), diff --git a/golangci.yaml b/golangci.yaml index e958170d02..4422a3a3c3 100644 --- a/golangci.yaml +++ b/golangci.yaml @@ -7,18 +7,11 @@ run: concurrency: 4 # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 5m + timeout: 20m # exit code when at least one issue was found, default is 1 issues-exit-code: 1 - # include test files or not, default is true - tests: true - - # list of build tags, all linters use it. Default is empty list. - #build-tags: - # - mytag - # which dirs to skip: issues from them won't be reported; # can use regexp here: generated.*, regexp is applied on full path; # default value is empty list, but default dirs are skipped independently @@ -294,77 +287,23 @@ linters-settings: # Allow leading comments to be separated with empty liens allow-separated-leading-comment: false - # The custom section can be used to define linter plugins to be loaded at runtime. See README doc - # for more info. - # custom: - # Each custom linter should have a unique name. - # example: - # The path to the plugin *.so. Can be absolute or local. Required for each custom linter - # path: /path/to/example.so - # The description of the linter. Optional, just for documentation purposes. - # description: This is an example usage of a plugin linter. - # Intended to point to the repo location of the linter. Optional, just for documentation purposes. - # original-url: github.com/golangci/example-linter - linters: -# enable: -# - megacheck -# - govet -# disable: -# - maligned -# - prealloc disable-all: true - presets: -# - bugs -# - unused + enable: + - bodyclose + - goconst + - gofmt + - goheader + - goimports + - gosec + - misspell + - typecheck + - unparam + - unused fast: false issues: -# # List of regexps of issue texts to exclude, empty list by default. -# # But independently from this option we use default exclude patterns, -# # it can be disabled by `exclude-use-default: false`. To list all -# # excluded by default patterns execute `golangci-lint run --help` -# exclude: -# - abcdef -# -# # Excluding configuration per-path, per-linter, per-text and per-source -# exclude-rules: -# # Exclude some linters from running on tests files. -# - path: _test\.go -# linters: -# - gocyclo -# - errcheck -# - dupl -# - gosec -# -# # Exclude known linters from partially hard-vendored code, -# # which is impossible to exclude via "nolint" comments. -# - path: internal/hmac/ -# text: "weak cryptographic primitive" -# linters: -# - gosec -# -# # Exclude some staticcheck messages -# - linters: -# - staticcheck -# text: "SA9003:" -# -# # Exclude lll issues for long lines with go:generate -# - linters: -# - lll -# source: "^//go:generate " - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: true - - # The default value is false. If set to true exclude and exclude-rules - # regular expressions become case sensitive. - exclude-case-sensitive: false - # The list of ids of default excludes to include or disable. By default it's empty. include: - EXC0002 # disable excluding of issues about comments from golint @@ -375,19 +314,8 @@ issues: # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. max-same-issues: 0 - # Show only new issues: if there are unstaged changes or untracked files, - # only those changes are analyzed, else only changes in HEAD~ are analyzed. - # It's a super-useful option for integration of golangci-lint into existing - # large codebase. It's not practical to fix all existing issues at the moment - # of integration: much better don't allow issues in new code. - # Default is false. - new: false - # Show only new issues created after git revision `REV` - new-from-rev: REV - - # Show only new issues created in git patch with set file path. - new-from-patch: path/to/patch/file + # new-from-rev: origin/main severity: # Default value is empty string. diff --git a/hack/lint.sh b/hack/lint.sh index b9aeed43e6..13ed64caba 100755 --- a/hack/lint.sh +++ b/hack/lint.sh @@ -14,23 +14,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -LINTERS=${1:-"gosec,goconst,gofmt,goimports,unparam"} -ALL=${2:-false} - HACK_DIR=$(dirname "${BASH_SOURCE[0]}") # Printing out cache status golangci-lint cache status -if [[ $ALL == true ]] ; then - action="" -else - action="-n" -fi - # Enable GL_DEBUG line below for debug messages for golangci-lint # export GL_DEBUG=loader,gocritic,env -CMD="golangci-lint run -E ${LINTERS} $action -c $HACK_DIR/../golangci.yaml" +CMD="golangci-lint run -c $HACK_DIR/../golangci.yaml" echo "Running $CMD" eval $CMD diff --git a/hack/release-tools/chk_version.go b/hack/release-tools/chk_version.go index 0b68f8ed73..be9f69baca 100644 --- a/hack/release-tools/chk_version.go +++ b/hack/release-tools/chk_version.go @@ -24,6 +24,7 @@ import ( // This regex should match both our GA format (example: v1.4.3) and pre-release formats (v1.2.4-beta.2, v1.5.0-rc.1) // The following sub-capture groups are defined: +// // major // minor // patch diff --git a/internal/restartabletest/restartable_delegate.go b/internal/restartabletest/restartable_delegate.go index f91a3eb37f..37f73e4c39 100644 --- a/internal/restartabletest/restartable_delegate.go +++ b/internal/restartabletest/restartable_delegate.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/apis/velero/v1/restore_types.go b/pkg/apis/velero/v1/restore_types.go index 5f5e66b90a..a32476f32a 100644 --- a/pkg/apis/velero/v1/restore_types.go +++ b/pkg/apis/velero/v1/restore_types.go @@ -108,7 +108,7 @@ type RestoreSpec struct { // +optional Hooks RestoreHooks `json:"hooks,omitempty"` - // ExistingResourcePolicy specifies the restore behaviour for the kubernetes resource to be restored + // ExistingResourcePolicy specifies the restore behavior for the kubernetes resource to be restored // +optional // +nullable ExistingResourcePolicy PolicyType `json:"existingResourcePolicy,omitempty"` diff --git a/pkg/builder/json_schema_props_builder.go b/pkg/builder/json_schema_props_builder.go index 2eafb8605e..10f904cf0a 100644 --- a/pkg/builder/json_schema_props_builder.go +++ b/pkg/builder/json_schema_props_builder.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/cmd/cli/backuplocation/delete.go b/pkg/cmd/cli/backuplocation/delete.go index becb92afb3..d34bfa8e5a 100644 --- a/pkg/cmd/cli/backuplocation/delete.go +++ b/pkg/cmd/cli/backuplocation/delete.go @@ -51,7 +51,7 @@ func NewDeleteCommand(f client.Factory, use string) *cobra.Command { # Delete backup storage locations named "backup-location-1" and "backup-location-2". velero backup-location delete backup-location-1 backup-location-2 - # Delete all backup storage locations labelled with "foo=bar". + # Delete all backup storage locations labeled with "foo=bar". velero backup-location delete --selector foo=bar # Delete all backup storage locations. diff --git a/pkg/cmd/cli/nodeagent/server.go b/pkg/cmd/cli/nodeagent/server.go index 10e436574c..cd0d4030eb 100644 --- a/pkg/cmd/cli/nodeagent/server.go +++ b/pkg/cmd/cli/nodeagent/server.go @@ -173,7 +173,12 @@ func (s *nodeAgentServer) run() { metricsMux := http.NewServeMux() metricsMux.Handle("/metrics", promhttp.Handler()) s.logger.Infof("Starting metric server for node agent at address [%s]", s.metricsAddress) - if err := http.ListenAndServe(s.metricsAddress, metricsMux); err != nil { + server := &http.Server{ + Addr: s.metricsAddress, + Handler: metricsMux, + ReadHeaderTimeout: 3 * time.Second, + } + if err := server.ListenAndServe(); err != nil { s.logger.Fatalf("Failed to start metric server for node agent at [%s]: %v", s.metricsAddress, err) } }() diff --git a/pkg/cmd/cli/restore/delete.go b/pkg/cmd/cli/restore/delete.go index e0f907f389..a634c9e408 100644 --- a/pkg/cmd/cli/restore/delete.go +++ b/pkg/cmd/cli/restore/delete.go @@ -48,7 +48,7 @@ func NewDeleteCommand(f client.Factory, use string) *cobra.Command { # Delete restores named "restore-1" and "restore-2". velero restore delete restore-1 restore-2 - # Delete all restores labelled with "foo=bar". + # Delete all restores labeled with "foo=bar". velero restore delete --selector foo=bar # Delete all restores. diff --git a/pkg/cmd/cli/schedule/delete.go b/pkg/cmd/cli/schedule/delete.go index 5776e9d26a..af7c7c28d4 100644 --- a/pkg/cmd/cli/schedule/delete.go +++ b/pkg/cmd/cli/schedule/delete.go @@ -48,7 +48,7 @@ func NewDeleteCommand(f client.Factory, use string) *cobra.Command { # Delete schedules named "schedule-1" and "schedule-2". velero schedule delete schedule-1 schedule-2 - # Delete all schedules labelled with "foo=bar". + # Delete all schedules labeled with "foo=bar". velero schedule delete --selector foo=bar # Delete all schedules. diff --git a/pkg/cmd/cli/schedule/pause.go b/pkg/cmd/cli/schedule/pause.go index e8aa3fe82e..541fe68652 100644 --- a/pkg/cmd/cli/schedule/pause.go +++ b/pkg/cmd/cli/schedule/pause.go @@ -45,7 +45,7 @@ func NewPauseCommand(f client.Factory, use string) *cobra.Command { # Pause schedules named "schedule-1" and "schedule-2". velero schedule pause schedule-1 schedule-2 - # Pause all schedules labelled with "foo=bar". + # Pause all schedules labeled with "foo=bar". velero schedule pause --selector foo=bar # Pause all schedules. diff --git a/pkg/cmd/cli/schedule/unpause.go b/pkg/cmd/cli/schedule/unpause.go index 8a9e467e3d..6b9ff2a0a7 100644 --- a/pkg/cmd/cli/schedule/unpause.go +++ b/pkg/cmd/cli/schedule/unpause.go @@ -37,7 +37,7 @@ func NewUnpauseCommand(f client.Factory, use string) *cobra.Command { # Unpause schedules named "schedule-1" and "schedule-2". velero schedule unpause schedule-1 schedule-2 - # Unpause all schedules labelled with "foo=bar". + # Unpause all schedules labeled with "foo=bar". velero schedule unpause --selector foo=bar # Unpause all schedules. diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 1494d13fde..b8901e1c3f 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -97,7 +97,6 @@ const ( defaultProfilerAddress = "localhost:6060" - defaultControllerWorkers = 1 // the default TTL for a backup defaultBackupTTL = 30 * 24 * time.Hour @@ -136,11 +135,6 @@ type serverConfig struct { maxConcurrentK8SConnections int } -type controllerRunInfo struct { - controller controller.Interface - numWorkers int -} - func NewCommand(f client.Factory) *cobra.Command { var ( volumeSnapshotLocations = flag.NewMap().WithKeyValueDelimiter(':') @@ -307,7 +301,7 @@ func newServer(f client.Factory, config serverConfig, logger *logrus.Logger) (*s } // cancelFunc is not deferred here because if it was, then ctx would immediately - // be cancelled once this function exited, making it useless to any informers using later. + // be canceled once this function exited, making it useless to any informers using later. // That, in turn, causes the velero server to halt when the first informer tries to use it. // Therefore, we must explicitly call it on the error paths in this function. ctx, cancelFunc := context.WithCancel(context.Background()) @@ -625,7 +619,12 @@ func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]string metricsMux := http.NewServeMux() metricsMux.Handle("/metrics", promhttp.Handler()) s.logger.Infof("Starting metric server at address [%s]", s.metricsAddress) - if err := http.ListenAndServe(s.metricsAddress, metricsMux); err != nil { + server := &http.Server{ + Addr: s.metricsAddress, + Handler: metricsMux, + ReadHeaderTimeout: 3 * time.Second, + } + if err := server.ListenAndServe(); err != nil { s.logger.Fatalf("Failed to start metric server at [%s]: %v", s.metricsAddress, err) } }() @@ -973,7 +972,12 @@ func (s *server) runProfiler() { mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) mux.HandleFunc("/debug/pprof/trace", pprof.Trace) - if err := http.ListenAndServe(s.config.profilerAddress, mux); err != nil { + server := &http.Server{ + Addr: s.config.profilerAddress, + Handler: mux, + ReadHeaderTimeout: 3 * time.Second, + } + if err := server.ListenAndServe(); err != nil { s.logger.WithError(errors.WithStack(err)).Error("error running profiler http server") } } diff --git a/pkg/controller/backup_deletion_controller.go b/pkg/controller/backup_deletion_controller.go index 85d87d431d..4511a50a0c 100644 --- a/pkg/controller/backup_deletion_controller.go +++ b/pkg/controller/backup_deletion_controller.go @@ -484,14 +484,14 @@ func (r *backupDeletionReconciler) patchBackup(ctx context.Context, backup *vele // Record original json oldData, err := json.Marshal(backup) if err != nil { - return nil, errors.Wrap(err, "error marshalling original Backup") + return nil, errors.Wrap(err, "error marshaling original Backup") } newBackup := backup.DeepCopy() mutate(newBackup) newData, err := json.Marshal(newBackup) if err != nil { - return nil, errors.Wrap(err, "error marshalling updated Backup") + return nil, errors.Wrap(err, "error marshaling updated Backup") } patchBytes, err := jsonpatch.CreateMergePatch(oldData, newData) if err != nil { diff --git a/pkg/plugin/framework/util.go b/pkg/plugin/framework/util.go deleted file mode 100644 index 2ac0b19380..0000000000 --- a/pkg/plugin/framework/util.go +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright the Velero contributors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -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. -*/ - -package framework - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - - proto "github.com/vmware-tanzu/velero/pkg/plugin/generated" - "github.com/vmware-tanzu/velero/pkg/plugin/velero" -) - -func packResourceIdentifiers(resourcesIDs []velero.ResourceIdentifier) (protoIDs []*proto.ResourceIdentifier) { - for _, item := range resourcesIDs { - protoIDs = append(protoIDs, resourceIdentifierToProto(item)) - } - return -} - -func unpackResourceIdentifiers(protoIDs []*proto.ResourceIdentifier) (resourceIDs []velero.ResourceIdentifier) { - for _, itm := range protoIDs { - resourceIDs = append(resourceIDs, protoToResourceIdentifier(itm)) - } - return -} - -func protoToResourceIdentifier(proto *proto.ResourceIdentifier) velero.ResourceIdentifier { - return velero.ResourceIdentifier{ - GroupResource: schema.GroupResource{ - Group: proto.Group, - Resource: proto.Resource, - }, - Namespace: proto.Namespace, - Name: proto.Name, - } -} - -func resourceIdentifierToProto(id velero.ResourceIdentifier) *proto.ResourceIdentifier { - return &proto.ResourceIdentifier{ - Group: id.Group, - Resource: id.Resource, - Namespace: id.Namespace, - Name: id.Name, - } -} diff --git a/pkg/restic/exec_commands.go b/pkg/restic/exec_commands.go index 4ff9e1a325..6d9e29d468 100644 --- a/pkg/restic/exec_commands.go +++ b/pkg/restic/exec_commands.go @@ -59,7 +59,7 @@ func GetSnapshotID(snapshotIdCmd *Command) (string, error) { var snapshots []snapshotID if err := json.Unmarshal([]byte(stdout), &snapshots); err != nil { - return "", errors.Wrap(err, "error unmarshalling restic snapshots result") + return "", errors.Wrap(err, "error unmarshaling restic snapshots result") } if len(snapshots) != 1 { @@ -260,7 +260,7 @@ func getSnapshotSize(repoIdentifier, passwordFile, caCertFile, snapshotID string } if err := json.Unmarshal([]byte(stdout), &snapshotStats); err != nil { - return 0, errors.Wrapf(err, "error unmarshalling restic stats result, stdout=%s", stdout) + return 0, errors.Wrapf(err, "error unmarshaling restic stats result, stdout=%s", stdout) } return snapshotStats.TotalSize, nil diff --git a/pkg/restore/change_pvc_node_selector.go b/pkg/restore/change_pvc_node_selector.go index 80219d63b6..c051b918ba 100644 --- a/pkg/restore/change_pvc_node_selector.go +++ b/pkg/restore/change_pvc_node_selector.go @@ -59,8 +59,9 @@ func (p *ChangePVCNodeSelectorAction) AppliesTo() (velero.ResourceSelector, erro } // Execute updates the pvc's selected-node annotation: -// a) if node mapping found in the config map for the plugin -// b) if node mentioned in annotation doesn't exist +// +// a) if node mapping found in the config map for the plugin +// b) if node mentioned in annotation doesn't exist func (p *ChangePVCNodeSelectorAction) Execute(input *velero.RestoreItemActionExecuteInput) (*velero.RestoreItemActionExecuteOutput, error) { p.logger.Info("Executing ChangePVCNodeSelectorAction") defer p.logger.Info("Done executing ChangePVCNodeSelectorAction") diff --git a/pkg/restore/priority.go b/pkg/restore/priority.go index c544532c74..5897c3af7b 100644 --- a/pkg/restore/priority.go +++ b/pkg/restore/priority.go @@ -26,9 +26,9 @@ const ( ) // Priorities defines the desired order of resource operations: -// Resources in the HighPriorities list will be handled first -// Resources in the LowPriorities list will be handled last -// Other resources will be handled alphabetically after the high prioritized resources and before the low prioritized resources +// Resources in the HighPriorities list will be handled first +// Resources in the LowPriorities list will be handled last +// Other resources will be handled alphabetically after the high prioritized resources and before the low prioritized resources type Priorities struct { HighPriorities []string LowPriorities []string diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 84368348bf..7496122a98 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -704,7 +704,7 @@ func getNamespace(logger logrus.FieldLogger, path, remappedName string) *v1.Name var backupNS v1.Namespace if err := json.Unmarshal(nsBytes, &backupNS); err != nil { - logger.Warnf("Error unmarshalling namespace from backup, creating new one.") + logger.Warnf("Error unmarshaling namespace from backup, creating new one.") return &v1.Namespace{ TypeMeta: metav1.TypeMeta{ Kind: "Namespace", diff --git a/pkg/test/helpers.go b/pkg/test/helpers.go index 261e33da4e..5c103c5eae 100644 --- a/pkg/test/helpers.go +++ b/pkg/test/helpers.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/test/mock_pod_command_executor.go b/pkg/test/mock_pod_command_executor.go index ef28ec96e1..219361b776 100644 --- a/pkg/test/mock_pod_command_executor.go +++ b/pkg/test/mock_pod_command_executor.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/uploader/kopia/progress.go b/pkg/uploader/kopia/progress.go index 17e78ce99a..515d060484 100644 --- a/pkg/uploader/kopia/progress.go +++ b/pkg/uploader/kopia/progress.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -25,7 +25,7 @@ import ( "github.com/vmware-tanzu/velero/pkg/uploader" ) -//Throttle throttles controlle the interval of output result +// Throttle throttles controlle the interval of output result type Throttle struct { throttle int64 interval time.Duration @@ -68,7 +68,7 @@ type KopiaProgress struct { Log logrus.FieldLogger // output info into log when backup } -//UploadedBytes the total bytes has uploaded currently +// UploadedBytes the total bytes has uploaded currently func (p *KopiaProgress) UploadedBytes(numBytes int64) { atomic.AddInt64(&p.uploadedBytes, numBytes) atomic.AddInt32(&p.uploadedFiles, 1) @@ -76,7 +76,7 @@ func (p *KopiaProgress) UploadedBytes(numBytes int64) { p.UpdateProgress() } -//Error statistic the total Error has occurred +// Error statistic the total Error has occurred func (p *KopiaProgress) Error(path string, err error, isIgnored bool) { if isIgnored { atomic.AddInt32(&p.ignoredErrorCount, 1) @@ -87,7 +87,7 @@ func (p *KopiaProgress) Error(path string, err error, isIgnored bool) { } } -//EstimatedDataSize statistic the total size of files to be processed and total files to be processed +// EstimatedDataSize statistic the total size of files to be processed and total files to be processed func (p *KopiaProgress) EstimatedDataSize(fileCount int, totalBytes int64) { atomic.StoreInt64(&p.estimatedTotalBytes, totalBytes) atomic.StoreInt32(&p.estimatedFileCount, int32(fileCount)) @@ -95,57 +95,57 @@ func (p *KopiaProgress) EstimatedDataSize(fileCount int, totalBytes int64) { p.UpdateProgress() } -//UpdateProgress which calls Updater UpdateProgress interface, update progress by third-party implementation +// UpdateProgress which calls Updater UpdateProgress interface, update progress by third-party implementation func (p *KopiaProgress) UpdateProgress() { if p.outputThrottle.ShouldOutput() { p.Updater.UpdateProgress(&uploader.UploaderProgress{TotalBytes: p.estimatedTotalBytes, BytesDone: p.processedBytes}) } } -//UploadStarted statistic the total Error has occurred +// UploadStarted statistic the total Error has occurred func (p *KopiaProgress) UploadStarted() {} -//CachedFile statistic the total bytes been cached currently +// CachedFile statistic the total bytes been cached currently func (p *KopiaProgress) CachedFile(fname string, numBytes int64) { atomic.AddInt64(&p.cachedBytes, numBytes) p.UpdateProgress() } -//HashedBytes statistic the total bytes been hashed currently +// HashedBytes statistic the total bytes been hashed currently func (p *KopiaProgress) HashedBytes(numBytes int64) { atomic.AddInt64(&p.processedBytes, numBytes) atomic.AddInt64(&p.hashededBytes, numBytes) p.UpdateProgress() } -//HashingFile statistic the file been hashed currently +// HashingFile statistic the file been hashed currently func (p *KopiaProgress) HashingFile(fname string) {} -//ExcludedFile statistic the file been excluded currently +// ExcludedFile statistic the file been excluded currently func (p *KopiaProgress) ExcludedFile(fname string, numBytes int64) {} -//ExcludedDir statistic the dir been excluded currently +// ExcludedDir statistic the dir been excluded currently func (p *KopiaProgress) ExcludedDir(dirname string) {} -//FinishedHashingFile which will called when specific file finished hash +// FinishedHashingFile which will called when specific file finished hash func (p *KopiaProgress) FinishedHashingFile(fname string, numBytes int64) { p.UpdateProgress() } -//StartedDirectory called when begin to upload one directory +// StartedDirectory called when begin to upload one directory func (p *KopiaProgress) StartedDirectory(dirname string) {} -//FinishedDirectory called when finish to upload one directory +// FinishedDirectory called when finish to upload one directory func (p *KopiaProgress) FinishedDirectory(dirname string) { p.UpdateProgress() } -//UploadFinished which report the files flushed after the Upload has completed. +// UploadFinished which report the files flushed after the Upload has completed. func (p *KopiaProgress) UploadFinished() { p.UpdateProgress() } -//ProgressBytes which statistic all bytes has been processed currently +// ProgressBytes which statistic all bytes has been processed currently func (p *KopiaProgress) ProgressBytes(processedBytes int64, totalBytes int64) { atomic.StoreInt64(&p.processedBytes, processedBytes) atomic.StoreInt64(&p.estimatedTotalBytes, totalBytes) diff --git a/pkg/uploader/kopia/shim.go b/pkg/uploader/kopia/shim.go index e8e2466d44..68463c376d 100644 --- a/pkg/uploader/kopia/shim.go +++ b/pkg/uploader/kopia/shim.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -31,18 +31,18 @@ import ( "github.com/kopia/kopia/repo/object" ) -//shimRepository which is one adapter for unifited repo and kopia. -//it implement kopia RepositoryWriter interfaces +// shimRepository which is one adapter for unified repo and kopia. +// it implement kopia RepositoryWriter interfaces type shimRepository struct { udmRepo udmrepo.BackupRepo } -//shimObjectWriter object writer for unifited repo +// shimObjectWriter object writer for unifited repo type shimObjectWriter struct { repoWriter udmrepo.ObjectWriter } -//shimObjectReader object reader for unifited repo +// shimObjectReader object reader for unifited repo type shimObjectReader struct { repoReader udmrepo.ObjectReader } @@ -53,7 +53,7 @@ func NewShimRepo(repo udmrepo.BackupRepo) repo.RepositoryWriter { } } -//OpenObject open specific object +// OpenObject open specific object func (sr *shimRepository) OpenObject(ctx context.Context, id object.ID) (object.Reader, error) { reader, err := sr.udmRepo.OpenObject(ctx, udmrepo.ID(id)) if err != nil { @@ -94,7 +94,7 @@ func (sr *shimRepository) FindManifests(ctx context.Context, labels map[string]s } } -//GetKopiaManifestEntries get metadata from specific ManifestEntryMetadata +// GetKopiaManifestEntries get metadata from specific ManifestEntryMetadata func GetKopiaManifestEntry(uMani *udmrepo.ManifestEntryMetadata) *manifest.EntryMetadata { var ret manifest.EntryMetadata @@ -106,7 +106,7 @@ func GetKopiaManifestEntry(uMani *udmrepo.ManifestEntryMetadata) *manifest.Entry return &ret } -//GetKopiaManifestEntries get metadata list from specific ManifestEntryMetadata +// GetKopiaManifestEntries get metadata list from specific ManifestEntryMetadata func GetKopiaManifestEntries(uMani []*udmrepo.ManifestEntryMetadata) []*manifest.EntryMetadata { var ret []*manifest.EntryMetadata @@ -123,12 +123,12 @@ func GetKopiaManifestEntries(uMani []*udmrepo.ManifestEntryMetadata) []*manifest return ret } -//Time Get the local time of the unified repo +// Time Get the local time of the unified repo func (sr *shimRepository) Time() time.Time { return sr.udmRepo.Time() } -//ClientOptions is not supported by unified repo +// ClientOptions is not supported by unified repo func (sr *shimRepository) ClientOptions() repo.ClientOptions { return repo.ClientOptions{} } @@ -143,26 +143,26 @@ func (sr *shimRepository) ContentInfo(ctx context.Context, contentID content.ID) return nil, errors.New("not supported") } -//PrefetchContents is not supported by unified repo +// PrefetchContents is not supported by unified repo func (sr *shimRepository) PrefetchContents(ctx context.Context, contentIDs []content.ID, hint string) []content.ID { return nil } -//PrefetchObjects is not supported by unified repo +// PrefetchObjects is not supported by unified repo func (sr *shimRepository) PrefetchObjects(ctx context.Context, objectIDs []object.ID, hint string) ([]content.ID, error) { return nil, errors.New("not supported") } -//UpdateDescription is not supported by unified repo +// UpdateDescription is not supported by unified repo func (sr *shimRepository) UpdateDescription(d string) { } -//NewWriter is not supported by unified repo +// NewWriter is not supported by unified repo func (sr *shimRepository) NewWriter(ctx context.Context, option repo.WriteSessionOptions) (context.Context, repo.RepositoryWriter, error) { return nil, nil, errors.New("not supported") } -//Close will close unified repo +// Close will close unified repo func (sr *shimRepository) Close(ctx context.Context) error { return sr.udmRepo.Close(ctx) } @@ -222,7 +222,7 @@ func (sr *shimObjectReader) Seek(offset int64, whence int) (int64, error) { return sr.repoReader.Seek(offset, whence) } -//Close current io for ObjectReader +// Close current io for ObjectReader func (sr *shimObjectReader) Close() error { return sr.repoReader.Close() } diff --git a/pkg/uploader/provider/kopia.go b/pkg/uploader/provider/kopia.go index 087ded5baa..d64fbc74c0 100644 --- a/pkg/uploader/provider/kopia.go +++ b/pkg/uploader/provider/kopia.go @@ -35,18 +35,18 @@ import ( "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/service" ) -//BackupFunc mainly used to make testing more convenient +// BackupFunc mainly used to make testing more convenient var BackupFunc = kopia.Backup var RestoreFunc = kopia.Restore -//kopiaProvider recorded info related with kopiaProvider +// kopiaProvider recorded info related with kopiaProvider type kopiaProvider struct { bkRepo udmrepo.BackupRepo credGetter *credentials.CredentialGetter log logrus.FieldLogger } -//NewKopiaUploaderProvider initialized with open or create a repository +// NewKopiaUploaderProvider initialized with open or create a repository func NewKopiaUploaderProvider( ctx context.Context, credGetter *credentials.CredentialGetter, @@ -78,7 +78,7 @@ func NewKopiaUploaderProvider( return kp, nil } -//CheckContext check context status check if context is timeout or cancel and backup restore once finished it will quit and return +// CheckContext check context status check if context is timeout or cancel and backup restore once finished it will quit and return func (kp *kopiaProvider) CheckContext(ctx context.Context, finishChan chan struct{}, restoreChan chan struct{}, uploader *snapshotfs.Uploader) { select { case <-finishChan: @@ -166,7 +166,7 @@ func (kp *kopiaProvider) GetPassword(param interface{}) (string, error) { return strings.TrimSpace(rawPass), nil } -//RunRestore which will restore specific path and update restore progress +// RunRestore which will restore specific path and update restore progress func (kp *kopiaProvider) RunRestore( ctx context.Context, snapshotID string, diff --git a/pkg/uploader/types.go b/pkg/uploader/types.go index 015a2c156e..035e616fee 100644 --- a/pkg/uploader/types.go +++ b/pkg/uploader/types.go @@ -41,13 +41,13 @@ type SnapshotInfo struct { Size int64 `json:"Size"` } -//UploaderProgress which defined two variables to record progress +// UploaderProgress which defined two variables to record progress type UploaderProgress struct { TotalBytes int64 `json:"totalBytes,omitempty"` BytesDone int64 `json:"doneBytes,omitempty"` } -//UploaderProgress which defined generic interface to update progress +// UploaderProgress which defined generic interface to update progress type ProgressUpdater interface { UpdateProgress(p *UploaderProgress) } diff --git a/pkg/util/kube/pod.go b/pkg/util/kube/pod.go index 85fb41325b..ec42504acb 100644 --- a/pkg/util/kube/pod.go +++ b/pkg/util/kube/pod.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/util/logging/format_flag.go b/pkg/util/logging/format_flag.go index fda083cb8d..c757a17dd7 100644 --- a/pkg/util/logging/format_flag.go +++ b/pkg/util/logging/format_flag.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/util/logging/log_level_flag.go b/pkg/util/logging/log_level_flag.go index 4d3d306d03..ff0f0efb22 100644 --- a/pkg/util/logging/log_level_flag.go +++ b/pkg/util/logging/log_level_flag.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,